7 #include <boost/bind/bind.hpp>
10 using namespace boost::placeholders;
17 StackFrame() : offset(0), lensize(0), size(-1), total_size(-1) {
23 std::unique_ptr<ParseObject>
data;
47 return current->
data.release();
70 frame->
data.release();
74 if (!
stack_.empty() && obj) {
76 frame->
data.reset(obj);
87 return current->
data.get();
92 stack_.back()->offset += delta;
115 current->
size = length;
124 return current->
size;
143 const uint8_t *data,
int data_size) {
185 int p_offset = frame->
offset;
210 boost::bind(cb, _1, data, top->
offset, element_size));
214 std::pair<std::map<std::string, int>::iterator,
bool > result =
215 offsets_.insert(make_pair(key, offset));
216 if (!result.second) {
217 PROTO_DEBUG(
"Offset for " << key <<
" already set");
223 for (boost::ptr_vector<StackFrame>::iterator it =
stack_.begin();
224 it !=
stack_.end(); ++it) {
232 std::map<std::string, int>::iterator it =
offsets_.find(std::string(key));
boost::function< void(EncodeContext *, uint8_t *, int, int)> CallbackType
void SaveOffset(std::string)
void AddCallback(CallbackType cb, uint8_t *data, int arg)
boost::ptr_vector< StackFrame > stack_
void SaveOffset(std::string, int)
int FindOffset(const char *)
std::map< std::string, int > offsets_
void set_lensize(int lensize)
void set_size(size_t length)
void SetError(int error, int subcode, std::string type, const uint8_t *data, int data_size)
size_t total_size() const
void Push(ParseObject *data)
ParseErrorContext error_context_
void SwapData(ParseObject *obj)
std::vector< StackFrame * > stack_
#define PROTO_DEBUG(args...)
std::vector< CallbackFn >::iterator CallbackIterator
boost::function< void(EncodeContext *)> CallbackFn
std::vector< CallbackFn > callbacks
std::unique_ptr< ParseObject > data