strbuffer: change basic_buffer to BasicBuffer
[ncmpcpp.git] / src / regexes.cpp
blob02ed476cd84e1be03550809133b7fe6c383cc277
1 /***************************************************************************
2 * Copyright (C) 2008-2012 by Andrzej Rybczak *
3 * electricityispower@gmail.com *
4 * *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) any later version. *
9 * *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
14 * *
15 * You should have received a copy of the GNU General Public License *
16 * along with this program; if not, write to the *
17 * Free Software Foundation, Inc., *
18 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
19 ***************************************************************************/
21 #include <cassert>
22 #include "regexes.h"
24 Regex::Regex() : m_cflags(0), m_compiled(false) { }
26 Regex::Regex(const std::string &regex_, int cflags)
27 : m_regex(regex_), m_cflags(cflags), m_compiled(false)
29 compile();
32 Regex::Regex (const Regex &rhs)
33 : m_regex(rhs.m_regex), m_cflags(rhs.m_cflags), m_compiled(false)
35 if (rhs.m_compiled)
36 compile();
39 Regex::~Regex()
41 if (m_compiled)
42 regfree(&m_rx);
45 const std::string &Regex::regex() const
47 return m_regex;
50 const std::string &Regex::error() const
52 return m_error;
55 bool Regex::compile()
57 if (m_compiled)
59 m_error.clear();
60 regfree(&m_rx);
62 int comp_res = regcomp(&m_rx, m_regex.c_str(), m_cflags);
63 bool result = true;
64 if (comp_res != 0)
66 char buf[256];
67 regerror(comp_res, &m_rx, buf, sizeof(buf));
68 m_error = buf;
69 result = false;
71 m_compiled = result;
72 return result;
75 bool Regex::compile(const std::string &regex_, int cflags)
77 m_regex = regex_;
78 m_cflags = cflags;
79 return compile();
82 bool Regex::match(const std::string &s) const
84 assert(m_compiled);
85 return regexec(&m_rx, s.c_str(), 0, 0, 0) == 0;
88 Regex &Regex::operator=(const Regex &rhs)
90 if (this == &rhs)
91 return *this;
92 m_regex = rhs.m_regex;
93 m_cflags = rhs.m_cflags;
94 if (rhs.m_compiled)
95 compile();
96 return *this;