libdap  Updated for version 3.20.9
libdap4 is an implementation of OPeNDAP's DAP protocol.
GNURegex.h
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2005 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #ifndef _Regex_h
27 #define _Regex_h 1
28 
29 #define USE_CPP_11_REGEX 0
30 
31 #if USE_CPP_11_REGEX
32 #include <regex>
33 #else
34 #include <string>
35 #endif
36 
37 namespace libdap
38 {
39 
40 
56 class Regex
57 {
58 private:
59 #if USE_CPP_11_REGEX
60  std::regex d_exp;
61 
62  void init(const char *s) { d_exp = std::regex(s); }
63  void init(const std::string &s) { d_exp = std::regex(s); } // , std::regex::basic
64 #else
65  // d_preg was a regex_t* but I needed to include both regex.h and config.h
66  // to make the gnulib code work. Because this header is installed (and is
67  // used by other libraries) it cannot include config.h, so I moved the
68  // regex.h and config.h (among other) includes to the implementation. It
69  // would be cleaner to use a special class, but for one field that seems
70  // like overkill.
71  void *d_preg;
72 
73  void init(const char *t);
74  void init(const std::string &s) { init(s.c_str()); } // std::regex::ECMAScript
75 #endif
76 
77 public:
79  explicit Regex(const char *s) { init(s); }
81  Regex(const char *s, int) { init(s); }
83  explicit Regex(const std::string &s) { init(s); }
84 
85 #if USE_CPP_11_REGEX
86  ~Regex() = default;
87 #else
88  ~Regex();
89 #endif
90 
92  int match(const char *s, int len, int pos = 0) const;
94  int match(const std::string &s) const;
95 
97  int search(const char *s, int len, int &matchlen, int pos = 0) const ;
99  int search(const std::string &s, int &matchlen) const;
100 };
101 
102 #if 0
103 class Regex
104 {
105 private:
106  - std::regex d_exp;
107  -
108  - void init(const char *s) { d_exp = std::regex(s); }
109  - void init(const std::string &s) { d_exp = std::regex(s); } // , std::regex::basic
110  + // d_preg was a regex_t* but I needed to include both regex.h and config.h
111  + // to make the gnulib code work. Because this header is installed (and is
112  + // used by other libraries) it cannot include config.h, so I moved the
113  + // regex.h and config.h (among other) includes to the implementation. It
114  + // would be cleaner to use a special class, but for one field that seems
115  + // like overkill.
116  + void *d_preg;
117  + void init(const char *t);
118 
119 public:
120  -
121  - explicit Regex(const char *s) { init(s); }
122  -
123  - Regex(const char *s, int) { init(s); }
124  -
125  - explicit Regex(const std::string &s) { init(s); }
126  -
127  - ~Regex() = default;
128  -
129  -
130  - int match(const char *s, int len, int pos = 0) const;
131  -
132  - int match(const std::string &s) const;
133  -
134  -
135  - int search(const char *s, int len, int &matchlen, int pos = 0) const ;
136  -
137  - int search(const std::string &s, int &matchlen) const;
138  + Regex(const char *t);
139  + Regex(const char *t, int dummy);
140  + ~Regex();
141  +
142  +
143  + int match(const char* s, int len, int pos = 0);
144  +
145  + int search(const char* s, int len, int& matchlen, int pos = 0);
146 };
147 #endif
148 
149 } // namespace libdap
150 
151 #endif
Regular expression matching.
Definition: GNURegex.h:57
Regex(const char *s)
initialize a Regex with a C string
Definition: GNURegex.h:79
Regex(const std::string &s)
nitialize a Regex with a C++ string
Definition: GNURegex.h:83
int search(const char *s, int len, int &matchlen, int pos=0) const
How much of the string does the pattern match.
Definition: GNURegex.cc:206
Regex(const char *s, int)
Definition: GNURegex.h:81
int match(const char *s, int len, int pos=0) const
Does the pattern match.
Definition: GNURegex.cc:141
top level DAP object to house generic methods
Definition: AlarmHandler.h:36