00001 #ifndef __SAFERANGE_H__ 00002 #define __SAFERANGE_H__ 00003 00004 namespace oasys { 00005 00011 template<typename _Type> 00012 class SafeRange { 00013 public: 00018 struct Error { 00019 Error(size_t offset) : offset_(offset) {} 00020 size_t offset_; 00021 }; 00022 00023 SafeRange(_Type* a, size_t size) 00024 : array_(a), size_(size) {} 00025 00026 _Type& operator[](size_t offset) { 00027 if (offset >= size_) { 00028 throw Error(offset); 00029 } 00030 00031 return array_[offset]; 00032 } 00033 00034 private: 00035 _Type* array_; 00036 size_t size_; 00037 }; 00038 00039 } // namespace oasys 00040 00041 #endif /* __SAFERANGE_H__ */