]> git.tdb.fi Git - libs/core.git/blobdiff - source/strings/regex.h
Mark overridden virtual functions as such
[libs/core.git] / source / strings / regex.h
index 70f9ebb7f592a4e161c9b5df45430a676e738466..bef5231e4b8a3cc3e1337da11ad682c94b9653db 100644 (file)
@@ -1,17 +1,23 @@
-/* $Id$
-
-This file is part of libmspstrings
-Copyright © 2007 Mikko Rasa
-Distributed under the LGPL
-*/
 #ifndef MSP_STRINGS_REGEX_H_
 #define MSP_STRINGS_REGEX_H_
 
+#include <stdexcept>
 #include <string>
 #include "regmatch.h"
 
 namespace Msp {
 
+class bad_regex: public std::logic_error
+{
+public:
+       bad_regex(const std::string &, const std::string &, const std::string::const_iterator &);
+       ~bad_regex() throw() override = default;
+
+private:
+       std::string make_where(const std::string &, const std::string::const_iterator &);
+};
+
+
 /**
 This class provides regular expression matching.  It supports a subset of
 POSIX.2 extended regex syntax.  Character classes, equivalence classes and
@@ -67,7 +73,7 @@ The MATCH_ANY instruction consumes the input character and always succeeds.
 class Regex
 {
 private:
-       typedef std::string Code;
+       typedef std::basic_string<unsigned char> Code;
        typedef unsigned short Count;
        typedef short Offset;
        typedef unsigned short Index;
@@ -97,11 +103,11 @@ private:
        struct RunContext
        {
                Code::const_iterator citer;
-               RegMatch::GroupArray groups;
+               std::vector<RegMatch::Group> groups;
        };
 
        Code code;
-       unsigned n_groups;
+       unsigned n_groups = 0;
 
 public:
        /** Constructs a new Regex object from a string representation. */
@@ -114,7 +120,7 @@ private:
 
        Code parse_atom(const std::string &, std::string::const_iterator &i, unsigned &);
        Code parse_brackets(const std::string &, std::string::const_iterator &);
-       bool parse_repeat(std::string::const_iterator &, Count &, Count &);
+       bool parse_repeat(const std::string &, std::string::const_iterator &, Count &, Count &);
 
 public:
        /** Matches the regex against a string.  Refer to RegMatch documentation for
@@ -122,7 +128,7 @@ public:
        RegMatch match(const std::string &str) const;
 
 private:
-       bool run(const std::string &, const std::string::const_iterator &, RegMatch::GroupArray &) const;
+       bool run(const std::string &, const std::string::const_iterator &, std::vector<RegMatch::Group> &) const;
        bool group_compare(const RegMatch::Group &, const RegMatch::Group &) const;
 
 public: