#ifndef __CELLULARAUTOMATON_H_
#define __CELLULARAUTOMATON_H_

#include "Definitions.h"
#include <cstddef>
#include <boost/noncopyable.hpp>

class CellularAutomaton : boost::noncopyable {
  private:
    const AlleleType * const chromosome;
    const AlleleType * const ruleLUT;
    unsigned int numBits;
    unsigned int iteration;
    char *bits;
    AlleleType getRule( unsigned int index ) const;
    char getBit( unsigned int index, unsigned int state ) const;

  public:
    CellularAutomaton( const AlleleType *chromosome, unsigned int numberOfGenes, const AlleleType *ruleLUT = NULL );
    ~CellularAutomaton();

    unsigned int getNumBits() const;
    const char * getStorage() const;
    unsigned int getIteration() const;
    void createVector();
};

#endif /* __CELLULARAUTOMATON_H_ */
