00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef VECTORARRAYADAPTERHXX
00023 #define VECTORARRAYADAPTERHXX 1
00024
00025
00026 namespace simgear
00027 {
00028 template <typename Vector>
00029 class VectorArrayAdapter {
00030 public:
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 VectorArrayAdapter(Vector& v, int rowStride, int baseOffset = 0,
00043 int rowOffset = 0):
00044 _v(v), _rowStride(rowStride), _baseOffset(baseOffset),
00045 _rowOffset(rowOffset)
00046 {
00047 }
00048 #ifdef SG_CHECK_VECTOR_ACCESS
00049 typename Vector::value_type& operator() (int i, int j)
00050 {
00051 return _v.at(_baseOffset + i * _rowStride + _rowOffset + j);
00052 }
00053 const typename Vector::value_type& operator() (int i, int j) const
00054 {
00055 return _v.at(_baseOffset + i * _rowStride + _rowOffset + j);
00056 }
00057 #else
00058 typename Vector::value_type& operator() (int i, int j)
00059 {
00060 return _v[_baseOffset + i * _rowStride + _rowOffset + j];
00061 }
00062 const typename Vector::value_type& operator() (int i, int j) const
00063 {
00064 return _v[_baseOffset + i * _rowStride + _rowOffset + j];
00065 }
00066 #endif
00067 private:
00068 Vector& _v;
00069 const int _rowStride;
00070 const int _baseOffset;
00071 const int _rowOffset;
00072 };
00073 }
00074 #endif