X-Git-Url: https://git.ucc.asn.au/?p=progcomp2012.git;a=blobdiff_plain;f=home%2Fprogcomp%2Fjudge%2Fmanager%2Farray.h;fp=home%2Fprogcomp%2Fjudge%2Fmanager%2Farray.h;h=0000000000000000000000000000000000000000;hp=2a1d29fe9c88c36233c8994a675a59d6962f361d;hb=88fc5a96c424e9a451b98f3b680bc1980345320d;hpb=e3b15cd5dea739f7523920d83bda592db95a7b93;ds=sidebyside diff --git a/home/progcomp/judge/manager/array.h b/home/progcomp/judge/manager/array.h deleted file mode 100644 index 2a1d29f..0000000 --- a/home/progcomp/judge/manager/array.h +++ /dev/null @@ -1,128 +0,0 @@ -#ifndef ARRAY_H -#define ARRAY_H - -typedef long unsigned int LUint; -#include - -template -class Array -{ - public: - Array() : start(NULL), size(0), reserved(0) {} - Array(LUint newSize) : start(new T[newSize]), size(newSize), reserved(newSize) {} - ~Array() {delete [] start;} - - void Empty() {size = 0;} - void Add(const T & add); - void Reserve(LUint reserve); - void Resize(LUint newSize); - void RemoveBack(); - - LUint Size() const {return size;} - LUint Capacity() const {return reserved;} - - void operator=(const Array & equ); - bool operator==(const Array & equ) const; - bool operator!=(const Array & equ) const {return !operator==(equ);} - - class Iterator - { - public: - Iterator(const Array & from) : parent(from), index(0) {} - Iterator(const Iterator & cpy) : parent(cpy.parent), index(cpy.index) {} - ~Iterator() {} - - bool Good() const {return index < parent.Size();} - - T & operator*() const {return parent.start[index];} - - void operator++() {++index;} - void operator--() {--index;} - void operator++(int) {operator++();} - void operator--(int) {operator--();} - Iterator & operator+=(int amount) {index += amount;} - Iterator & operator-=(int amount) {index -= amount;} - Iterator operator+(int amount) {return Iterator(*this) += amount;} - Iterator operator-(int amount) {return Iterator(*this) -= amount;} - - void operator=(const Iterator & set) {index = set.index;} - bool operator==(const Iterator & set) {return (&parent == &(set.parent) && index == set.index);} - private: - const Array & parent; - LUint index; - }; - - Iterator First() const {return Iterator(*this);} - Iterator Last() const {return Iterator(*this) -= (size-1);} - - - T & operator[](LUint at) const - { - #ifdef DEBUGALL - printf(" Array::operator[] - called for index %lu/%lu (reserved %lu)\n", at, size, reserved); - - #endif //DEBUG - assert(at < size); return start[at]; - } - - int Find(const T & find) - { - - LUint result; - for (result = 0; result < size; result++) - { - //printf("%p %lu/%lu\n", (void*)(start), result, size); - if (start[result] == find) - return (int)(result); - } - return -1; - } - - private: - T * start; - LUint size; LUint reserved; -}; - -template void Array::Add(const T & add) -{ - if (size >= reserved) - { - T * old = start; - reserved *= 2; ++reserved; - start = new T[reserved]; - for (LUint ii=0; ii < size; ++ii) - start[ii] = old[ii]; - delete [] old; - } - start[size++] = add; -} - -template void Array::RemoveBack() -{ - if (size > 0) - --size; -} - -template void Array::Resize(LUint newSize) -{ - T * old = start; - start = new T[newSize]; - for (LUint ii=0; ii < size; ++ii) - start[ii] = old[ii]; - size = newSize; reserved = newSize; - delete [] old; -} - -template void Array::Reserve(LUint newReserve) -{ - if (newReserve > reserved) - { - T * old = start; - start = new T[newReserve]; - for (LUint ii=0; ii < size; ++ii) - start[ii] = old[ii]; - reserved = newReserve; - } -} - -#endif //ARRAY_H