MatchSet updates

This commit is contained in:
Josh Holtrop 2010-05-19 14:06:02 -04:00
parent 3a0a7e494d
commit b100c035a0
2 changed files with 15 additions and 4 deletions

View File

@ -140,8 +140,8 @@ void Token::process()
{ {
} }
MatchSet::MatchSet(const char * data, int * ovector, int ovec_size) MatchSet::MatchSet(pcre * re, const char * data, int * ovector, int ovec_size)
: m_data(data), m_ovector(ovector), m_ovec_size(ovec_size) : m_re(re), m_data(data), m_ovector(ovector), m_ovec_size(ovec_size)
{ {
} }
@ -161,7 +161,15 @@ std::string MatchSet::operator[](int index)
std::string MatchSet::operator[](const std::string & index) std::string MatchSet::operator[](const std::string & index)
{ {
/* FIXME */ int idx = pcre_get_stringnumber(m_re, index.c_str());
if (idx > 0 && idx < (m_ovec_size / 3))
{
if (m_ovector[idx] >= 0 && m_ovector[idx + 1] >= 0)
{
return string(m_data, m_ovector[idx],
m_ovector[idx + 1] - m_ovector[idx]);
}
}
return ""; return "";
} }

View File

@ -2,6 +2,8 @@
#ifndef IMBECILE_PARSER_HEADER #ifndef IMBECILE_PARSER_HEADER
#define IMBECILE_PARSER_HEADER #define IMBECILE_PARSER_HEADER
#include <pcre.h>
#include <iostream> #include <iostream>
#include <map> #include <map>
#include <vector> #include <vector>
@ -124,11 +126,12 @@ class I_CLASSNAME
class MatchSet class MatchSet
{ {
public: public:
MatchSet(const char * data, int * ovector, int ovec_size); MatchSet(pcre * re, const char * data, int * ovector, int ovec_size);
std::string operator[](int index); std::string operator[](int index);
std::string operator[](const std::string & index); std::string operator[](const std::string & index);
protected: protected:
pcre * m_re;
const char * m_data; const char * m_data;
int * m_ovector; int * m_ovector;
int m_ovec_size; int m_ovec_size;