source: source/ariba/utility/misc/StringFormat.h@ 12762

Last change on this file since 12762 was 2452, checked in by mies, 16 years ago

implemented bootstrap info parser

File size: 1.9 KB
Line 
1
2#ifndef STRINGFORMAT_H_
3#define STRINGFORMAT_H_
4
5#include "boost/xpressive/xpressive.hpp"
6
7namespace ariba {
8namespace utility {
9namespace string_format {
10
11using boost::xpressive::sregex;
12
13class regex_nav {
14private:
15 typedef boost::xpressive::smatch _match;
16 typedef _match::nested_results_type nested_results;
17 typedef nested_results::const_iterator nested_iterator;
18 const _match& match;
19
20public:
21 regex_nav(const _match& match) :
22 match(match) {
23 }
24
25 regex_nav() :
26 match(*((const _match*) NULL)) {
27 }
28
29 bool matched() const {
30 return &match != NULL;
31 }
32
33 regex_nav operator[] (const sregex& type) const {
34 const nested_results& nr = match.nested_results();
35 for (nested_iterator i = nr.begin(); i != nr.end(); i++) {
36 if (i->regex_id() == type.regex_id()) return regex_nav(*i);
37 }
38 return regex_nav();
39 }
40
41 regex_nav operator[](int index) const {
42 const nested_results& nr = match.nested_results();
43 for (nested_iterator i = nr.begin(); i != nr.end() && index >= 0; i++) {
44 if (index == 0) return regex_nav(*i);
45 index--;
46 }
47 return regex_nav();
48 }
49
50 int size() const {
51 return match.nested_results().size();
52 }
53
54 std::string str() const {
55 if (!matched()) return std::string("<no match>");
56 return match[0].str();
57 }
58};
59
60// regex: string
61extern const sregex rstring;
62
63// regex: base64 encoding
64extern const sregex rbase64;
65
66// regex: raw alphabet
67extern const sregex rchars;
68
69// regex: integer
70extern const sregex rint;
71
72// regex: binary label
73extern const sregex rlabel;
74
75// regex: dot separated identifier
76extern const sregex rid;
77
78// regex: "leaf" data
79extern const sregex rdata;
80
81// regex: fields
82extern const sregex rfield_label;
83extern const sregex rfield;
84extern const sregex rfields;
85
86// regex: objects
87extern const sregex robject_data;
88extern const sregex robject_id;
89extern const sregex robject;
90extern const sregex robjects;
91
92}}}
93
94#endif /* STRINGFORMAT_H_ */
Note: See TracBrowser for help on using the repository browser.