1 #ifndef GENESIS_POPULATION_FUNCTIONS_GENOME_LOCUS_H_
2 #define GENESIS_POPULATION_FUNCTIONS_GENOME_LOCUS_H_
42 namespace population {
52 throw std::invalid_argument(
"Invalid GenomeLocus with empty chromosome." );
96 std::string
const& l_chromosome,
size_t l_position,
97 std::string
const& r_chromosome,
size_t r_position
100 if( l_chromosome < r_chromosome ) {
102 }
else if( l_chromosome > r_chromosome ) {
105 assert( l_chromosome == r_chromosome );
106 if( l_position < r_position ) {
108 }
else if( l_position > r_position ) {
112 assert( l_chromosome == r_chromosome );
113 assert( l_position == r_position );
122 std::string
const& r_chromosome,
size_t r_position
131 std::string
const& l_chromosome,
size_t l_position,
150 #if __cplusplus >= 202002L
155 inline int operator <=> ( GenomeLocus
const& l, GenomeLocus
const& r )
157 return locus_compare( l.chromosome, l.position, r.chromosome, r.position );
160 #endif // __cplusplus >= 202002L
170 std::string
const& l_chromosome,
size_t l_position,
171 std::string
const& r_chromosome,
size_t r_position
173 return l_chromosome == r_chromosome && l_position == r_position;
181 std::string
const& r_chromosome,
size_t r_position
190 std::string
const& l_chromosome,
size_t l_position,
222 std::string
const& l_chromosome,
size_t l_position,
223 std::string
const& r_chromosome,
size_t r_position
225 return !
locus_equal( l_chromosome, l_position, r_chromosome, r_position );
233 std::string
const& r_chromosome,
size_t r_position
242 std::string
const& l_chromosome,
size_t l_position,
278 std::string
const& l_chromosome,
size_t l_position,
279 std::string
const& r_chromosome,
size_t r_position
281 return l_chromosome < r_chromosome || ( l_chromosome == r_chromosome && l_position < r_position );
289 std::string
const& r_chromosome,
size_t r_position
298 std::string
const& l_chromosome,
size_t l_position,
332 std::string
const& l_chromosome,
size_t l_position,
333 std::string
const& r_chromosome,
size_t r_position
335 return locus_less( r_chromosome, r_position, l_chromosome, l_position );
343 std::string
const& r_chromosome,
size_t r_position
352 std::string
const& l_chromosome,
size_t l_position,
386 std::string
const& l_chromosome,
size_t l_position,
387 std::string
const& r_chromosome,
size_t r_position
391 return l_chromosome < r_chromosome || ( l_chromosome == r_chromosome && l_position <= r_position );
399 std::string
const& r_chromosome,
size_t r_position
408 std::string
const& l_chromosome,
size_t l_position,
442 std::string
const& l_chromosome,
size_t l_position,
443 std::string
const& r_chromosome,
size_t r_position
453 std::string
const& r_chromosome,
size_t r_position
462 std::string
const& l_chromosome,
size_t l_position,
489 #endif // include guard