00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef KERNEL_TOKENIZER_H
00014 #define KERNEL_TOKENIZER_H
00015
00017 #include "GaudiKernel/Kernel.h"
00018 #include <string>
00019 #include <vector>
00020
00021
00024 class Tokenizer {
00025 public:
00028 class Token {
00030 long m_length;
00032 std::string m_tag;
00034 std::string m_value;
00035 public:
00037 Token(const Token& copy) : m_length(copy.m_length), m_tag(copy.m_tag), m_value(copy.m_value) {
00038 }
00040 Token() : m_length(0) {
00041 }
00042 void make(const std::string& s, long st, const char* delim, const char* tagBegin, const char* tagEnd, const char* eq, const char* valBegin, const char* valEnd);
00044 virtual ~Token() {
00045 }
00047 Token& operator=(const Token& copy);
00048
00049 bool operator==(const Token& copy) const {
00050 return m_tag == copy.m_tag, m_value == copy.m_value && m_length == copy.m_length;
00051 }
00053 long length() const {
00054 return m_length;
00055 }
00057 const std::string& tag() const {
00058 return m_tag;
00059 }
00061 const std::string& value() const {
00062 return m_value;
00063 }
00064 };
00065 typedef Token Item;
00066 typedef std::vector<Token> Items;
00067 protected:
00069 Items m_tokens;
00070 public:
00072 Tokenizer() {}
00074 virtual ~Tokenizer() {
00075 m_tokens.erase(m_tokens.begin(), m_tokens.end());
00076 }
00078 void analyse(const std::string& s, const char* delim, const char* tagBegin, const char* tagEnd, const char* eq, const char* valBegin, const char* valEnd);
00080 void analyse(const std::string& s, const char* delim, const char* tag, const char* eq, const char* val) {
00081 analyse(s, delim, tag, tag, eq, val, val);
00082 }
00084 void analyse(const std::string& s, const char* delim, const char* eq, const char* val) {
00085 analyse(s, delim, "", "", eq, val, val);
00086 }
00088 void analyse(const std::string& s, const char* delim=" ", const char* eq="=") {
00089 analyse(s, delim, "", "", eq, "", "");
00090 }
00092 Items& items() {
00093 return m_tokens;
00094 }
00096 const Items& items() const {
00097 return m_tokens;
00098 }
00099 };
00100 #endif // KERNEL_TOKENIZER_H