22 #include "field_codec_message_stack.h" 
   23 #include "dccl/field_codec.h" 
   25 std::vector<const google::protobuf::FieldDescriptor*> dccl::internal::MessageStack::field_;
 
   26 std::vector<const google::protobuf::Descriptor*> dccl::internal::MessageStack::desc_;
 
   27 std::vector<dccl::MessagePart> dccl::internal::MessageStack::parts_;
 
   33 void dccl::internal::MessageStack::push(
const google::protobuf::Descriptor* desc)
 
   36     desc_.push_back(desc);
 
   37     ++descriptors_pushed_;
 
   40 void dccl::internal::MessageStack::push(
const google::protobuf::FieldDescriptor* field)
 
   42     field_.push_back(field);
 
   46 void dccl::internal::MessageStack::push(MessagePart part)
 
   48     parts_.push_back(part);
 
   53 void dccl::internal::MessageStack::__pop_desc()
 
   59 void dccl::internal::MessageStack::__pop_field()
 
   65 void dccl::internal::MessageStack::__pop_parts()
 
   72 dccl::internal::MessageStack::MessageStack(
const google::protobuf::FieldDescriptor* field)
 
   73     : descriptors_pushed_(0),
 
   79         if(field->cpp_type() == google::protobuf::FieldDescriptor::CPPTYPE_MESSAGE)
 
   81             MessagePart 
part = UNKNOWN;
 
   82             if(field->options().GetExtension(dccl::field).has_in_head())
 
   85                 part = field->options().GetExtension(dccl::field).in_head() ? HEAD : BODY;
 
   90                 part = current_part();
 
   94             push(field->message_type());
 
  101 dccl::internal::MessageStack::~MessageStack()
 
  103     for(
int i = 0; i < fields_pushed_; ++i)
 
  106     for(
int i = 0; i < descriptors_pushed_; ++i)
 
  109     for(
int i = 0; i < parts_pushed_; ++i)