X-Git-Url: https://ruin.nu/git/?a=blobdiff_plain;f=src%2Fgeneorder.h;h=ebc427a9c4c0f49bb770de0af27a3c8c795c80de;hb=3610a7961eaea08a41bf1c0354c68cdee3884278;hp=e411a37253f932ec9788a3f5533bff19c695f2fe;hpb=47b1f5c0294e079bc120dc8366977951aa0778bf;p=germs.git diff --git a/src/geneorder.h b/src/geneorder.h index e411a37..ebc427a 100644 --- a/src/geneorder.h +++ b/src/geneorder.h @@ -23,7 +23,6 @@ #include #include -#include #include "misc.h" @@ -34,7 +33,7 @@ class GeneOrder{ public: - typedef std::vector GeneList; + typedef std::vector GeneList; typedef GeneList::size_type size_type; /** @@ -77,18 +76,19 @@ class GeneOrder{ */ const GeneList& list() const; + + private: + GeneList _geneorder; /** - * Reverses an interval and returns the new permutation + * pads the permutation with 0 in front and n+1 at the end if needed */ - GeneOrder reverse(size_type i, size_type j) const; + void pad(); /** - * Moves the gene on position i to position j, returning a new permutation + * Verifies that the permutation starts with 0, ends with n+1 and that all genes i, 0 < i < n+1 + * are present, without duplication. */ - GeneOrder transpos(size_type i, size_type j) const; - - private: - GeneList _geneorder; + void verify(); }; @@ -98,22 +98,8 @@ class GeneOrder{ */ template GeneOrder::GeneOrder(T begin, T end): _geneorder(begin,end){ - - /*TODO: Pad code, just not sure if I need it all the time. - if (_geneorder[0] != 0) - _geneorder.insert(_geneorder.begin(),0); - if(_geneorder[_geneorder.size()-1] != _geneorder.size() - 1) - _geneorder.push_back(_geneorder.size()); - */ - - GeneList genes(_geneorder.size()); - for (GeneList::iterator gene = _geneorder.begin(); gene != _geneorder.end(); ++gene){ - ++genes[std::abs(*gene)]; - } - for (GeneList::iterator gene = genes.begin(); gene != genes.end(); ++gene){ - if (*gene != 1) - throw std::invalid_argument("Not all genes are present only 1 time"); - } + pad(); + verify(); } #endif