/**************************************************************************\ MODULE: GF2XVec SUMMARY: The class GF2XVec implements vectors of fixed-length GF2X's. You can allocate a vector of GF2X's of a specified length, where the maximum size of each GF2X is also specified. These parameters can be specified either with a constructor, or with SetSize. It is an error to try to re-size a vector of non-xero , or store a GF2X that doesn't fit. The space can be released with "kill", and then you are free to call SetSize again. If you want more flexible---but less efficient---vectors, use vec_GF2X. \**************************************************************************/ #include class GF2XVec { public: GF2XVec(); GF2XVec& operator=(const GF2XVec&); // first kill()'s destination (unless source and destination are // identical) GF2XVec(const GF2XVec&); ~GF2XVec(); GF2XVec(GF2XVec&& other) noexcept; GF2XVec& operator=(GF2XVec&& other) noexcept; GF2XVec(long n, long d); // sets length to n and max size of each element to d, // where the size d measures the number of words void SetSize(long n, long d); // sets length to n and max size of each element to d, // where the size d measures the number of words long length() const; // length of vector long BaseSize() const; // max size of each element void kill(); // release space GF2X* elts(); const GF2X* elts() const; // pointer to first element GF2X& operator[](long i); const GF2X& operator[](long i) const; // indexing operator; starts at 0; no range checking swap(GF2XVec& x); // swap with x by swapping pointers void move(GF2XVec& other); // quick move other to *this }; void swap(GF2XVec& x, GF2XVec& y); // swaps x and y by swapping pointers