1 // Copyright (c) 2006- Facebook
2 // Distributed under the Thrift Software License
4 // See accompanying file LICENSE or visit the Thrift site at:
5 // http://developers.facebook.com/thrift/
16 // Forward declare that puppy
20 * A struct is a container for a set of member fields that has a name. Structs
21 * are also used to implement exception types.
23 * @author Mark Slee <mcslee@facebook.com>
25 class t_struct
: public t_type
{
27 t_struct(t_program
* program
) :
32 t_struct(t_program
* program
, const std::string
& name
) :
33 t_type(program
, name
),
37 void set_name(const std::string
& name
) {
41 void set_xception(bool is_xception
) {
42 is_xception_
= is_xception
;
45 void set_xsd_all(bool xsd_all
) {
49 bool get_xsd_all() const {
53 void append(t_field
* elem
) {
54 members_
.push_back(elem
);
57 const std::vector
<t_field
*>& get_members() {
61 bool is_struct() const {
65 bool is_xception() const {
69 virtual std::string
get_fingerprint_material() const {
71 std::vector
<t_field
*>::const_iterator m_iter
;
72 for (m_iter
= members_
.begin(); m_iter
!= members_
.end(); ++m_iter
) {
73 rv
+= (*m_iter
)->get_fingerprint_material();
80 virtual void generate_fingerprint() {
81 t_type::generate_fingerprint();
82 std::vector
<t_field
*>::const_iterator m_iter
;
83 for (m_iter
= members_
.begin(); m_iter
!= members_
.end(); ++m_iter
) {
84 (*m_iter
)->get_type()->generate_fingerprint();
88 bool validate_field(t_field
* field
) {
89 int key
= field
->get_key();
90 std::vector
<t_field
*>::const_iterator m_iter
;
91 for (m_iter
= members_
.begin(); m_iter
!= members_
.end(); ++m_iter
) {
92 if ((*m_iter
)->get_key() == key
) {
101 std::vector
<t_field
*> members_
;