// // aegis - project change supervisor // Copyright (C) 1991-1994, 1998, 1999, 2001-2008, 2012 Peter Miller // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or (at // your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // #include #include type_structure::~type_structure() { delete [] element; nelements = 0; nelements_max = 0; element = 0; toplevel_flag = false; } type_structure::type_structure(generator *a_gen, const nstring &a_name, bool a_global) : type(a_gen, a_name, a_global), nelements(0), nelements_max(0), element(0), toplevel_flag(false) { } void type_structure::member_add(const nstring &member_name, const type::pointer &member_type, int attributes, const nstring &cmnt) { if (nelements >= nelements_max) { size_t new_nelements_max = nelements_max * 2 + 16; element_ty *new_element = new element_ty[new_nelements_max]; for (size_t j = 0; j < nelements; ++j) new_element[j] = element[j]; delete [] element; nelements_max = new_nelements_max; element = new_element; } element_ty *ep = element + nelements++; ep->etype = member_type; ep->name = member_name; ep->attributes = attributes; ep->comment = cmnt; } void type_structure::in_include_file() { type::in_include_file(); for (size_t j = 0; j < nelements; ++j) { element[j].etype->in_include_file(); } } void type_structure::get_reachable(type_vector &results) const { for (size_t j = 0; j < nelements; ++j) results.push_back(element[j].etype); } nstring type_structure::c_name_inner() const { return (def_name() + "_ty *"); } bool type_structure::has_a_mask() const { return false; } void type_structure::toplevel() { type::toplevel(); toplevel_flag = true; } // vim: set ts=8 sw=4 et :