00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef MECHSYS_ARRAY_H
00023 #define MECHSYS_ARRAY_H
00024
00025 #include <vector>
00026
00027 #include "util/exception.h"
00028
00029 template <typename Type>
00030 class Array : public std::vector<Type>
00031 {
00032 public:
00033
00034 Type & operator[] (size_t i)
00035 {
00036 #ifndef NDEBUG
00037 if (!(i>=0 && i<this->size()))
00038 throw new Fatal(_("Array::operator[] failed. Subscript <i=%d> out of range"),i);
00039 else
00040 return this->std::vector<Type>::operator[](i);
00041 #else
00042 return this->std::vector<Type>::operator[](i);
00043 #endif
00044 }
00045
00046 const Type & operator[] (size_t i) const
00047 {
00048 #ifndef NDEBUG
00049 if (!(i>=0 && i<this->size()))
00050 throw new Fatal(_("Array::operator[] failed. Subscript <i=%d> out of range"),i);
00051 else
00052 return this->std::vector<Type>::operator[](i);
00053 #else
00054 return this->std::vector<Type>::operator[](i);
00055 #endif
00056 }
00057 Array<Type> Copy(size_t Begin, size_t Len) const
00058 {
00059 #ifndef NDEBUG
00060 if (Begin<0 || Begin>=this->std::vector<Type>::size())
00061 throw new Fatal(_("Array::Copy failed. Begin variable is out of range"));
00062 if (Len<=0)
00063 throw new Fatal(_("Array::Copy failed. Len variable is null or negative"));
00064 #endif
00065 Array<Type> Result;
00066 Result.resize(Len);
00067 size_t End = Begin+Len;
00068 size_t Counter=0;
00069 for (size_t i=Begin; i<End; ++i)
00070 {
00071 Result[Counter] = this->std::vector<Type>::operator[](i);
00072 Counter++;
00073 }
00074 return Result;
00075 }
00076
00077 };
00078
00079 #endif // MECHSYS_ARRAY_H
00080
00081