+ Updated all the parsing code to use std::strings everywhere

instead of const char*'s to allow for rules with NULL characters
  embedded in them.
+ Updated Rule::Sniff() to actually return a useful value


git-svn-id: file:///srv/svn/repos/haiku/trunk/current@662 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Tyler Dauwalder
2002-08-09 10:30:38 +00:00
parent 10cde11f08
commit fe70cd16af
5 changed files with 493 additions and 486 deletions
+14 -14
View File
@@ -43,23 +43,24 @@ status_t parse(const char *rule, Rule *result, BString *parseError = NULL);
*/
class CharStream {
public:
CharStream(const char *string = NULL);
CharStream(const std::string &string);
CharStream();
~CharStream();
status_t SetTo(const char *string);
status_t SetTo(const std::string &string);
void Unset();
status_t InitCheck() const;
bool IsEmpty() const;
ssize_t Pos() const;
const char *String() const;
const std::string& String() const;
char Get();
void Unget();
private:
char *fString;
std::string fString;
ssize_t fPos;
ssize_t fLen;
// ssize_t fLen;
status_t fCStatus;
CharStream(const CharStream &ref);
@@ -95,9 +96,8 @@ const char* tokenTypeToString(TokenType type);
class Token {
public:
Token(TokenType type = EmptyToken, const ssize_t pos = -1);
virtual ~Token();
TokenType Type() const;
virtual const char* String() const;
virtual const std::string& String() const;
virtual int32 Int() const;
virtual double Float() const;
ssize_t Pos() const;
@@ -114,11 +114,10 @@ protected:
*/
class StringToken : public Token {
public:
StringToken(const char *string, const ssize_t pos);
virtual ~StringToken();
virtual const char* String() const;
StringToken(const std::string &str, const ssize_t pos);
virtual const std::string& String() const;
protected:
char *fString;
std::string fString;
};
//! Integer token class
@@ -157,10 +156,11 @@ protected:
*/
class TokenStream {
public:
TokenStream(const char *string = NULL);
TokenStream(const std::string &string);
TokenStream();
~TokenStream();
status_t SetTo(const char *string);
status_t SetTo(const std::string &string);
void Unset();
status_t InitCheck() const;
@@ -177,7 +177,7 @@ public:
private:
void AddToken(TokenType type, ssize_t pos);
void AddString(const char *str, ssize_t pos);
void AddString(const std::string &str, ssize_t pos);
void AddInt(const char *str, ssize_t pos);
void AddFloat(const char *str, ssize_t pos);
+3 -2
View File
@@ -23,7 +23,8 @@ class Err;
/*! The byte string and mask (if supplied) must be of the same length. */
class Pattern {
public:
Pattern(const char *string, const char *mask = NULL);
Pattern(const std::string &string, const std::string &mask);
Pattern(const std::string &string);
~Pattern();
status_t InitCheck() const;
@@ -31,7 +32,7 @@ public:
bool Sniff(Range range, BPositionIO *data) const;
status_t SetTo(const char *string, const char *mask = NULL);
status_t SetTo(const std::string &string, const std::string &mask);
private:
bool Sniff(off_t start, off_t size, BPositionIO *data) const;