7 #include <boost/bind.hpp>
16 StackFrame() : offset(0), lensize(0), size(-1), total_size(-1) {
22 std::unique_ptr<ParseObject>
data;
46 return current->
data.release();
69 frame->
data.release();
73 if (!
stack_.empty() && obj) {
75 frame->
data.reset(obj);
86 return current->
data.get();
91 stack_.back()->offset += delta;
114 current->
size = length;
123 return current->
size;
142 const uint8_t *data,
int data_size) {
184 int p_offset = frame->
offset;
209 boost::bind(cb, _1, data, top->
offset, element_size));
213 std::pair<std::map<std::string, int>::iterator,
bool > result =
214 offsets_.insert(make_pair(key, offset));
215 if (!result.second) {
216 PROTO_DEBUG(
"Offset for " << key <<
" already set");
222 for (boost::ptr_vector<StackFrame>::iterator it =
stack_.begin();
223 it !=
stack_.end(); ++it) {
231 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