Sync with 5.1.0
[deliverable/titan.core.git] / compiler2 / EnumItem.cc
CommitLineData
970ed795
EL
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
11namespace Common {
12
13// =================================
14// ===== EnumItem
15// =================================
16
17EnumItem::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
23EnumItem::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
30EnumItem::~EnumItem()
31{
32 delete name;
33 delete value;
34}
35
36EnumItem *EnumItem::clone() const
37{
38 return new EnumItem(*this);
39}
40
41void EnumItem::set_fullname(const string& p_fullname)
42{
43 Node::set_fullname(p_fullname);
44 if(value) value->set_fullname(p_fullname);
45}
46
47void EnumItem::set_my_scope(Scope *p_scope)
48{
49 if(value) value->set_my_scope(p_scope);
50}
51
52void 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
59void EnumItem::set_text(const string& p_text)
60{
61 text = p_text;
62}
63
64string 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
79void 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
92EnumItems::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
98EnumItems::~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
105void EnumItems::release_eis()
106{
107 eis_v.clear();
108 eis_m.clear();
109}
110
111EnumItems* EnumItems::clone() const
112{
113 return new EnumItems(*this);
114}
115
116void 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
125void 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
132void 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
144void 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.033097 seconds and 5 git commands to generate.