Program Listing for File SpeciesList.h

Return to documentation for file (necsim/SpeciesList.h)

//This file is part of necsim project which is released under MIT license.
//See file **LICENSE.txt** or visit https://opensource.org/licenses/MIT) for full license details.

#ifndef SPECIESLIST
#define SPECIESLIST

#ifdef CXX14_SUPPORT
#include "memory.h"
#else

#include <memory>

#endif

#include "Matrix.h"
#include "RNGController.h"

using namespace std;
using namespace random_numbers;
namespace necsim
{
    class SpeciesList
    {
    private:
        unsigned long list_size, max_size; // List size and maximum size of the cell (based on percentage cover).
        unsigned long next_active; // For calculating the wrapping, using the next and last system.
        vector<unsigned long> lineage_indices; // list of the active reference number, with zeros for empty cells.
        unsigned long nwrap; // The number of wrapping (next and last possibilities) that there are.
    public:
        SpeciesList();

        ~SpeciesList() = default;

        void initialise(unsigned long maxsizein);

        // special case if just the max_size wants to be change, but want to maintain the lineage_indices variables.
        void setMaxsize(unsigned long maxsizein);

        void setSpecies(unsigned long index, unsigned long new_val);

        void setSpeciesEmpty(unsigned long index, unsigned long new_val);

        void setNext(unsigned long n);

        void setNwrap(unsigned long nr);

        unsigned long addSpecies(const unsigned long &new_spec);

        void deleteSpecies(unsigned long index);

        void decreaseNwrap();

        void increaseListSize();

        void increaseNwrap();

        void changePercentCover(unsigned long newmaxsize);

        unsigned long getRandLineage(const shared_ptr<RNGController> &rand_no);

        unsigned long getLineageIndex(unsigned long index) const;

        unsigned long getNext() const;

        unsigned long getNwrap() const;

        unsigned long getListSize() const;

        unsigned long getMaxSize() const;

        unsigned long getListLength() const;

        void wipeList();

        double getCoalescenceProbability() const;

        friend ostream &operator<<(ostream &os, const SpeciesList &r);

        friend istream &operator>>(istream &is, SpeciesList &r);
    };
}
#endif