#ifndef pac_dataptr_h #define pac_dataptr_h #include #include "pac_common.h" #include "pac_dbg.h" // A data pointer is represented by an data pointer variable // plus a constant offset. class DataPtr { public: DataPtr(Env* env, const ID* arg_id, const int arg_off); DataPtr(DataPtr const& x) { *this = x; } DataPtr const& operator=(DataPtr const& x) { id_ = x.id(); offset_ = x.offset(); ptr_expr_ = x.ptr_expr(); return *this; } const ID* id() const { return id_; } int offset() const { return offset_; } const char* ptr_expr() const { ASSERT(id_); return ptr_expr_.c_str(); } int AbsOffset(const ID* base_ptr) const; char* AbsOffsetExpr(Env* env, const ID* base_ptr) const; void GenBoundaryCheck(Output* out, Env* env, const char* data_size, const char* data_name) const; protected: const ID* id_; int offset_; string ptr_expr_; }; #endif // pac_dataptr_h