Gorgon Game Engine
Tokenizer.h
Go to the documentation of this file.
1 
3 #pragma once
4 
5 #include <string>
6 #include <iterator>
7 
8 
9 namespace Gorgon { namespace String {
10 
14  class Tokenizer : public std::iterator<std::forward_iterator_tag, std::string> {
15  public:
16 
18  Tokenizer() : position(text.npos) {}
19 
23  Tokenizer(const std::string &str, const std::string &delimeters) :
24  text(str), Delimeters(delimeters) {
25  position=0;
26 
27  Next();
28  }
29 
31  void operator ++() {
32  Next();
33  }
34 
36  void Next() {
37  if(position==text.length())
38  position=text.npos;
39 
40  if(position==text.npos)
41  return;
42 
43  auto ind=text.find_first_of(Delimeters, position);
44  if(ind==text.npos) {
45  token=text.substr(position);
46  position=text.length();
47  }
48  else {
49  token=text.substr(position, ind-position);
50  position=ind+1;
51  }
52  }
53 
55  std::string Current() const {
56  return token;
57  }
58 
60  std::string operator *() const {
61  return token;
62  }
63 
65  operator std::string() const {
66  return token;
67  }
68 
70  const std::string *operator ->() const {
71  return &token;
72  }
73 
75  bool IsValid() const {
76  return position!=text.npos;
77  }
78 
81  bool operator ==(const Tokenizer &st) const {
82  if(position==text.npos && st.position==text.npos)
83  return true;
84 
85  return st.position==position && st.token == token;
86  }
87 
90  bool operator !=(const Tokenizer &st) const {
91  if(position==text.npos && st.position==text.npos)
92  return false;
93 
94  return st.position!=position || st.token != token;
95  }
96 
97  const Tokenizer end() const { return endit; }
98 
100  std::string Delimeters;
101 
102  protected:
104  std::string text;
106  std::string token;
108  std::size_t position;
109 
110  private:
111  const static Tokenizer endit;
112  };
113 
114 }}
Gorgon::String::Tokenizer::position
std::size_t position
Position of the next token. std::string::npos denotes the iterator reached the end.
Definition: Tokenizer.h:108
Gorgon::String::Tokenizer::Current
std::string Current() const
Return the current token.
Definition: Tokenizer.h:55
Gorgon::String::Tokenizer::Delimeters
std::string Delimeters
Delimeters to be used in tokenization. Can be changed while tokenizing.
Definition: Tokenizer.h:100
Gorgon::String::Tokenizer
Tokenizer is a forward iterator that tokenizes a given string.
Definition: Tokenizer.h:14
Tokenizer.h
contains string tokenizer.
Gorgon::String::Tokenizer::token
std::string token
Current token.
Definition: Tokenizer.h:106
Gorgon::String::Tokenizer::text
std::string text
Current text.
Definition: Tokenizer.h:104
Gorgon::String::FixLineEndings
std::string FixLineEndings(const std::string &in, LineEnding type=LineEnding::Standard)
Fixes/changes line endings.
Definition: String.cpp:8
Gorgon
Root namespace for Gorgon Game Engine.
Definition: Any.h:19
Gorgon::String::Tokenizer::Next
void Next()
Move to the next token.
Definition: Tokenizer.h:36
Gorgon::String::Tokenizer::Tokenizer
Tokenizer(const std::string &str, const std::string &delimeters)
Creates a new tokenizer.
Definition: Tokenizer.h:23
Gorgon::String::LineEnding
LineEnding
Line ending types.
Definition: String.h:691
Gorgon::String::Tokenizer::operator==
bool operator==(const Tokenizer &st) const
Compare two iterators, does not check if two iterators are identical.
Definition: Tokenizer.h:81
Gorgon::String::Tokenizer::operator++
void operator++()
Move to the next token.
Definition: Tokenizer.h:31
Gorgon::String::LineEnding::None
@ None
None, no line endings.
Gorgon::String::Tokenizer::Tokenizer
Tokenizer()
Creates an empty tokenizer. Effectively creates an end iterator.
Definition: Tokenizer.h:18
Gorgon::String::Tokenizer::end
const Tokenizer end() const
Definition: Tokenizer.h:97
Gorgon::String::Tokenizer::operator->
const std::string * operator->() const
Return the current token.
Definition: Tokenizer.h:70
Gorgon::String::Tokenizer::operator*
std::string operator*() const
Return the current token.
Definition: Tokenizer.h:60
Gorgon::String::Tokenizer::IsValid
bool IsValid() const
Whether the iterator is valid (i.e. dereferencable)
Definition: Tokenizer.h:75
Gorgon::String::Tokenizer::operator!=
bool operator!=(const Tokenizer &st) const
Compare two iterators, does not check if two iterators are identical.
Definition: Tokenizer.h:90