mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 06:38:20 +00:00
48 lines
936 B
C++
48 lines
936 B
C++
#ifndef pac_dataptr_h
|
|
#define pac_dataptr_h
|
|
|
|
#include <string>
|
|
|
|
#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
|