19 constexpr
auto GA_ALLELE_CHUNK = 10;
83 : csz(GA_ALLELE_CHUNK),
86 lowerb = GAAllele::BoundType::NONE;
87 upperb = GAAllele::BoundType::NONE;
93 : type(GAAllele::Type::ENUMERATED), csz(GA_ALLELE_CHUNK), sz(n),
98 a = std::vector<T>(SZ);
99 for (
unsigned int i = 0; i < sz; i++)
100 a.at(i) = *(array + i);
101 lowerb = GAAllele::BoundType::NONE;
102 upperb = GAAllele::BoundType::NONE;
108 GAAllele::BoundType lb = GAAllele::BoundType::INCLUSIVE,
109 GAAllele::BoundType ub = GAAllele::BoundType::INCLUSIVE)
110 : type(GAAllele::Type::BOUNDED), csz(GA_ALLELE_CHUNK), sz(2), SZ(2),
122 GAAllele::BoundType lb = GAAllele::BoundType::INCLUSIVE,
123 GAAllele::BoundType ub = GAAllele::BoundType::INCLUSIVE)
124 : type(GAAllele::Type::DISCRETIZED), csz(GA_ALLELE_CHUNK), sz(3), SZ(3),
138 : csz(orig.csz), sz(orig.sz), SZ(orig.SZ), a(std::vector<T>(orig.SZ))
140 for (
unsigned int i = 0; i < sz; i++)
141 a.at(i) = orig.a.at(i);
142 lowerb = orig.lowerb;
143 upperb = orig.upperb;
154 GAErr(GA_LOC,
"GAAlleleSetCore",
"destructor", GAError::RefsRemain);
168 a = std::vector<T>(SZ);
171 for (
unsigned int i = 0; i < orig.sz; i++)
172 a.at(i) = orig.a.at(i);
175 lowerb = orig.lowerb;
176 upperb = orig.upperb;
182 GAAllele::Type type{GAAllele::Type::ENUMERATED};
183 GAAllele::BoundType lowerb, upperb;
200 GAAllele::BoundType lb = GAAllele::BoundType::INCLUSIVE,
201 GAAllele::BoundType ub = GAAllele::BoundType::INCLUSIVE)
205 GAAlleleSet(
const T &lower,
const T &upper,
const T &increment,
206 GAAllele::BoundType lb = GAAllele::BoundType::INCLUSIVE,
207 GAAllele::BoundType ub = GAAllele::BoundType::INCLUSIVE)
273 int size()
const {
return core->sz; }
277 int add(
const T &alle)
281 if (core->type != GAAllele::Type::ENUMERATED)
283 if (core->sz >= core->SZ)
285 core->SZ += core->csz;
287 core->a = std::vector<T>(core->SZ);
288 for (
unsigned int i = 0; i < core->sz; i++)
289 core->a.at(i) = tmp.at(i);
291 core->a.at(core->sz) = alle;
296 int remove(
const T &allele)
300 if (core->type != GAAllele::Type::ENUMERATED)
302 for (
unsigned int i = 0; i < core->sz; i++)
304 if (core->a[i] == allele)
306 for (
unsigned int j = i; j < core->sz - 1; j++)
307 core->a[j] = core->a[j + 1];
317 int remove(
unsigned int x)
319 for (
unsigned int j = x; j < core->sz - 1; j++)
320 core->a[j] = core->a[j + 1];
336 if (core->type == GAAllele::Type::ENUMERATED)
337 return core->a[GARandomInt(0, core->sz - 1)];
338 else if (core->type == GAAllele::Type::DISCRETIZED)
340 GAErr(GA_LOC,
"GAAlleleSet",
"allele(unsigned int)",
346 GAErr(GA_LOC,
"GAAlleleSet",
"allele(unsigned int)",
357 T allele(
unsigned int i)
const
359 if (core->type == GAAllele::Type::ENUMERATED)
360 return core->a[i % core->sz];
361 else if (core->type == GAAllele::Type::DISCRETIZED)
363 GAErr(GA_LOC,
"GAAlleleSet",
"allele(unsigned int)",
369 GAErr(GA_LOC,
"GAAlleleSet",
"allele(unsigned int)",
370 GAError::NoAlleleIndex);
375 T lower()
const {
return core->a[0]; }
376 T upper()
const {
return core->a[1]; }
377 T inc()
const {
return core->a[2]; }
378 GAAllele::BoundType lowerBoundType()
const {
return core->lowerb; }
379 GAAllele::BoundType upperBoundType()
const {
return core->upperb; }
380 GAAllele::Type type()
const {
return core->type; }
382 int read(std::istream &)
384 GAErr(GA_LOC,
"GAAlleleSet",
"read", GAError::OpUndef);
388 int write(std::ostream &)
const
390 GAErr(GA_LOC,
"GAAlleleSet",
"write", GAError::OpUndef);
409 : csz(GA_ALLELE_CHUNK), sz(1), SZ(GA_ALLELE_CHUNK),
416 : csz(orig.csz), sz(orig.sz), SZ(orig.SZ),
419 for (
unsigned int i = 0; i < sz; i++)
425 for (
unsigned int i = 0; i < sz; i++)
435 for (i = 0; i < sz; i++)
445 for (i = 0; i < orig.sz; i++)
453 int size()
const {
return sz; }
454 const GAAlleleSet<T> &set(
unsigned int i)
const {
return *(aset[i]); }
472 int add(
unsigned int n,
const T a[])
487 int add(
const T &lower,
const T &upper,
488 GAAllele::BoundType lb = GAAllele::BoundType::INCLUSIVE,
489 GAAllele::BoundType ub = GAAllele::BoundType::INCLUSIVE)
504 int add(
const T &lower,
const T &upper,
const T &increment,
505 GAAllele::BoundType lb = GAAllele::BoundType::INCLUSIVE,
506 GAAllele::BoundType ub = GAAllele::BoundType::INCLUSIVE)
521 int remove(
unsigned int n)
526 for (
unsigned int i = n; i < sz - 1; i++)
527 aset[i] = aset[i + 1];
543 if (a.core == b.core)
545 if (a.core == 0 || b.core == 0)
547 if (a.core->sz != b.core->sz)
552 for (i = 0; i < a.core->sz && a.core->a[i] == b.core->a[i]; i++)
554 return ((i == a.core->sz) ? 1 : 0);
560 if (a.core == b.core)
562 if (a.core == 0 || b.core == 0)
564 if (a.core->sz != b.core->sz)
569 for (i = 0; i < a.core->sz && a.core->a[i] == b.core->a[i]; i++)
571 return ((i == a.core->sz) ? 0 : 1);
575 std::ostream &operator<<(std::ostream &os,
const GAAlleleSet<T> &arg)
Definition: GAAllele.h:404
Definition: GAAllele.h:80
Definition: GAAllele.h:192
Allele.
Definition: GAAllele.h:27