00001
00011 #ifndef BS_TOOLS_MEMBER_ACCESSOR_H_
00012 #define BS_TOOLS_MEMBER_ACCESSOR_H_
00013
00014 namespace blue_sky
00015 {
00016 namespace tools
00017 {
00018
00019 template <typename data_array_t, typename item_t>
00020 struct member_accessor
00021 {
00022 typedef item_t value_type;
00023
00024 member_accessor (const data_array_t &data_, const item_t *data_begin_, const item_t *data_offset_, size_t size_)
00025 : data_ (data_)
00026 , data_begin_ (data_begin_)
00027 , data_offset_ (data_offset_)
00028 , size_ (size_)
00029 {
00030 }
00031
00032 size_t
00033 size_i () const
00034 {
00035 return data_.size ();
00036 }
00037
00038 size_t
00039 size_j () const
00040 {
00041 return size_;
00042 }
00043
00044 item_t
00045 get (size_t i, size_t j) const
00046 {
00047 const item_t *data = (const item_t *)&data_[i];
00048 size_t count = data_offset_ - data_begin_;
00049 return data [count + j];
00050 }
00051
00052 private:
00053 const data_array_t &data_;
00054 const item_t *data_begin_;
00055 const item_t *data_offset_;
00056 size_t size_;
00057 };
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071 }
00072 }
00073
00074 #endif // #ifndef BS_TOOLS_MEMBER_ACCESSOR_H_
00075