00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00031 #ifndef ROTOR_H
00032 #define ROTOR_H
00033
00034
00035
00036 #include <vector>
00037
00038 using namespace std;
00039
00046 class Rotor
00047 {
00048 private:
00049
00050 vector<unsigned int> digits;
00051
00052
00053 unsigned int values;
00054
00055
00056 bool unique;
00057
00058
00059
00060 void rotateUnique(unsigned int pos);
00061 void start(unsigned int pos);
00062 void rotateNonunique(unsigned int pos);
00063
00064 public:
00065 Rotor(unsigned int digitSize = 0, unsigned int valuesSize = 0,
00066 bool unique = false);
00067 Rotor(const Rotor& src);
00068 ~Rotor();
00069 Rotor& operator =(const Rotor& rhs);
00070 unsigned int getValue(unsigned int index) const;
00071 bool isValid() const;
00072 void rotate();
00073 void setUnique();
00074 void reset();
00075 void reset(const vector<unsigned int>& startPos);
00076 void resizeDigits(unsigned int size);
00077 void resizeValues(unsigned int size);
00078 unsigned int getSize() const;
00079 unsigned int getDigit(unsigned int index) const;
00080 bool isEmpty() const;
00081 };
00082
00083 #endif