An Overlay-based
Virtual Network Substrate
SpoVNet

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

Last change on this file since 5719 was 2452, checked in by mies, 15 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.