jit: c++-ify gdb_block
[deliverable/binutils-gdb.git] / gdb / gdb_regex.h
index 27a570a1f4097ee4c3c82aca790e59b88849e490..58a0f22efd8a4a99c6603592d4ffd0358fbef300 100644 (file)
@@ -1,11 +1,11 @@
-/* Portable <regex.h>
-   Copyright 2000, 2001 Free Software Foundation, Inc.
+/* Portable <regex.h>.
+   Copyright (C) 2000-2019 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef GDB_REGEX_H
-#define GDB_REGEX_H
+#define GDB_REGEX_H 1
 
 #ifdef USE_INCLUDED_REGEX
-#include "xregex.h"
+# include "xregex.h"
 #else
-#include <regex.h>
+/* Request 4.2 BSD regex functions.  */
+# define _REGEX_RE_COMP
+# include <regex.h>
 #endif
 
-#endif /* gdb_regex.h */
+/* A compiled regex.  This is mainly a wrapper around regex_t.  The
+   the constructor throws on regcomp error and the destructor is
+   responsible for calling regfree.  The former means that it's not
+   possible to create an instance of compiled_regex that isn't
+   compiled, hence the name.  */
+class compiled_regex
+{
+public:
+  /* Compile a regexp and throw an exception on error, including
+     MESSAGE.  REGEX and MESSAGE must not be NULL.  */
+  compiled_regex (const char *regex, int cflags,
+                 const char *message)
+    ATTRIBUTE_NONNULL (2) ATTRIBUTE_NONNULL (4);
+
+  ~compiled_regex ();
+
+  DISABLE_COPY_AND_ASSIGN (compiled_regex);
+
+  /* Wrapper around ::regexec.  */
+  int exec (const char *string,
+           size_t nmatch, regmatch_t pmatch[],
+           int eflags) const;
+
+  /* Wrapper around ::re_search.  (Not const because re_search's
+     regex_t parameter isn't either.)  */
+  int search (const char *string, int size, int startpos,
+             int range, struct re_registers *regs);
+
+private:
+  /* The compiled pattern.  */
+  regex_t m_pattern;
+};
+
+#endif /* not GDB_REGEX_H */
This page took 0.028188 seconds and 4 git commands to generate.