blob: ebbad06668aea34e3f0544b097388d32c5d0e239 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
#ifndef _AST_ATTRS_HPP_
#define _AST_ATTRS_HPP_
namespace AST {
//
class MetaItem;
class MetaItems:
public Serialisable
{
public:
::std::vector<MetaItem> m_items;
MetaItems() {}
MetaItems(::std::vector<MetaItem> items):
m_items(items)
{
}
void push_back(MetaItem i);
MetaItem* get(const char *name);
bool has(const char *name) {
return get(name) != 0;
}
friend ::std::ostream& operator<<(::std::ostream& os, const MetaItems& x) {
return os << "[" << x.m_items << "]";
}
SERIALISABLE_PROTOTYPES();
};
class MetaItem:
public Serialisable
{
::std::string m_name;
MetaItems m_sub_items;
::std::string m_str_val;
public:
MetaItem() {}
MetaItem(::std::string name):
m_name(name)
{
}
MetaItem(::std::string name, ::std::string str_val):
m_name(name),
m_str_val(str_val)
{
}
MetaItem(::std::string name, ::std::vector<MetaItem> items):
m_name(name),
m_sub_items(items)
{
}
void mark_used() {}
const ::std::string& name() const { return m_name; }
const ::std::string& string() const { return m_str_val; }
bool has_sub_items() const { return m_sub_items.m_items.size() > 0; }
const MetaItems& items() const { return m_sub_items; }
MetaItems& items() { return m_sub_items; }
friend ::std::ostream& operator<<(::std::ostream& os, const MetaItem& x) {
os << x.m_name;
if(x.m_sub_items.m_items.size())
os << "(" << x.m_sub_items.m_items << ")";
else
os << "=\"" << x.m_str_val << "\"";
return os;
}
SERIALISABLE_PROTOTYPES();
};
} // namespace AST
#endif
|