Sync with 5.1.0
[deliverable/titan.core.git] / compiler2 / EnumItem.cc
1 ///////////////////////////////////////////////////////////////////////////////
2 // Copyright (c) 2000-2014 Ericsson Telecom AB
3 // All rights reserved. This program and the accompanying materials
4 // are made available under the terms of the Eclipse Public License v1.0
5 // which accompanies this distribution, and is available at
6 // http://www.eclipse.org/legal/epl-v10.html
7 ///////////////////////////////////////////////////////////////////////////////
8 #include "EnumItem.hh"
9 #include "Value.hh"
10
11 namespace Common {
12
13 // =================================
14 // ===== EnumItem
15 // =================================
16
17 EnumItem::EnumItem(Identifier *p_name, Value *p_value)
18 : Node(), Location(), name(p_name), value(p_value)
19 {
20 if (!p_name) FATAL_ERROR("NULL parameter: Common::EnumItem::EnumItem()");
21 }
22
23 EnumItem::EnumItem(const EnumItem& p)
24 : Node(p), Location(p)
25 {
26 name=p.name->clone();
27 value=p.value?p.value->clone():0;
28 }
29
30 EnumItem::~EnumItem()
31 {
32 delete name;
33 delete value;
34 }
35
36 EnumItem *EnumItem::clone() const
37 {
38 return new EnumItem(*this);
39 }
40
41 void EnumItem::set_fullname(const string& p_fullname)
42 {
43 Node::set_fullname(p_fullname);
44 if(value) value->set_fullname(p_fullname);
45 }
46
47 void EnumItem::set_my_scope(Scope *p_scope)
48 {
49 if(value) value->set_my_scope(p_scope);
50 }
51
52 void EnumItem::set_value(Value *p_value)
53 {
54 if(!p_value) FATAL_ERROR("NULL parameter: Common::EnumItem::set_value()");
55 if(value) FATAL_ERROR("Common::EnumItem::set_value()");
56 value=p_value;
57 }
58
59 void EnumItem::set_text(const string& p_text)
60 {
61 text = p_text;
62 }
63
64 string EnumItem::get_name_hacked(Type *p_type) const
65 {
66 if (p_type->is_asn1()) {
67 string hack_asnname(Identifier::name_2_asn(p_type->get_genname_own()));
68 hack_asnname += "-enum-";
69 hack_asnname += name->get_asnname();
70 return Identifier::asn_2_name(hack_asnname);
71 } else {
72 string hack_ttcnname(Identifier::name_2_ttcn(p_type->get_genname_own()));
73 hack_ttcnname += "_enum_";
74 hack_ttcnname += name->get_ttcnname();
75 return Identifier::ttcn_2_name(hack_ttcnname);
76 }
77 }
78
79 void EnumItem::dump(unsigned level) const
80 {
81 name->dump(level);
82 if(value) {
83 DEBUG(level, "with value:");
84 value->dump(level+1);
85 }
86 }
87
88 // =================================
89 // ===== EnumItems
90 // =================================
91
92 EnumItems::EnumItems(const EnumItems& p)
93 : Node(p), my_scope(0)
94 {
95 for (size_t i = 0; i < p.eis_v.size(); i++) add_ei(p.eis_v[i]->clone());
96 }
97
98 EnumItems::~EnumItems()
99 {
100 for(size_t i = 0; i < eis_v.size(); i++) delete eis_v[i];
101 eis_v.clear();
102 eis_m.clear();
103 }
104
105 void EnumItems::release_eis()
106 {
107 eis_v.clear();
108 eis_m.clear();
109 }
110
111 EnumItems* EnumItems::clone() const
112 {
113 return new EnumItems(*this);
114 }
115
116 void EnumItems::set_fullname(const string& p_fullname)
117 {
118 Node::set_fullname(p_fullname);
119 for (size_t i = 0; i < eis_v.size(); i++) {
120 EnumItem *ei = eis_v[i];
121 ei->set_fullname(p_fullname + "." + ei->get_name().get_dispname());
122 }
123 }
124
125 void EnumItems::set_my_scope(Scope *p_scope)
126 {
127 my_scope = p_scope;
128 for(size_t i = 0; i < eis_v.size(); i++)
129 eis_v[i]->set_my_scope(p_scope);
130 }
131
132 void EnumItems::add_ei(EnumItem *p_ei)
133 {
134 if(!p_ei)
135 FATAL_ERROR("NULL parameter: Common::EnumItems::add_ei()");
136 eis_v.add(p_ei);
137 const Identifier& id = p_ei->get_name();
138 const string& name = id.get_name();
139 if (!eis_m.has_key(name)) eis_m.add(name, p_ei);
140 p_ei->set_fullname(get_fullname()+"."+id.get_dispname());
141 p_ei->set_my_scope(my_scope);
142 }
143
144 void EnumItems::dump(unsigned level) const
145 {
146 for (size_t i = 0; i < eis_v.size(); i++) eis_v[i]->dump(level);
147 }
148
149 }
This page took 0.032521 seconds and 5 git commands to generate.