30 #define __UPX_BPTR_H 1 47 explicit BoundedPtr(
void* base,
size_t size_in_bytes, T* ptr=0)
48 : ptr_(ptr), base_(base), size_in_bytes_(0)
50 assert(base_ != NULL);
51 size_in_bytes_ = mem_size(1, size_in_bytes);
57 assert(base_ == other.base_);
58 assert(size_in_bytes_ == other.size_in_bytes_);
59 ptr_ = other.ptr_; check();
return *
this;
62 ptr_ = other; check();
return *
this;
65 operator T* () {
return ptr_; }
66 operator const T* ()
const {
return ptr_; }
69 checkNULL(); ptr_ += n; checkRange();
return *
this;
72 checkNULL(); ptr_ -= n; checkRange();
return *
this;
75 checkNULL(); ptr_ += 1; checkRange();
return *
this;
79 void checkNULL()
const {
80 if __acc_very_unlikely(!ptr_)
81 throwCantUnpack(
"unexpected NULL pointer; take care!");
83 void checkRange()
const {
84 size_t off = (
const char *) ptr_ - (
const char *) base_;
85 if __acc_very_unlikely(off > size_in_bytes_)
86 throwCantUnpack(
"pointer out of range; take care!");
95 size_t size_in_bytes_;