Unverified Commit 6c41c2f6 authored by Richard Berger's avatar Richard Berger
Browse files

Make Tokenizers movable

parent d9345a16
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -37,6 +37,12 @@ Tokenizer::Tokenizer(const std::string & str, const std::string & seperators) {
    } while(end != std::string::npos);
}

Tokenizer::Tokenizer(const Tokenizer & rhs) : tokens(rhs.tokens) {
}

Tokenizer::Tokenizer(Tokenizer && rhs) : tokens(std::move(rhs.tokens)) {
}

Tokenizer::iterator Tokenizer::begin() {
    return tokens.begin();
}
@@ -66,6 +72,14 @@ ValueTokenizer::ValueTokenizer(const std::string & str, const std::string & sepe
    current  = tokens.begin();
}

ValueTokenizer::ValueTokenizer(const ValueTokenizer & rhs) : tokens(rhs.tokens) {
    current  = tokens.begin();
}

ValueTokenizer::ValueTokenizer(ValueTokenizer && rhs) : tokens(std::move(rhs.tokens)) {
    current  = tokens.begin();
}

bool ValueTokenizer::has_next() const {
    return current != tokens.cend();
}
+12 −2
Original line number Diff line number Diff line
@@ -25,13 +25,19 @@

namespace LAMMPS_NS {

#define TOKENIZER_DEFAULT_SEPERATORS " \t\r\n\f"

class Tokenizer {
    std::vector<std::string> tokens;
public:
    typedef std::vector<std::string>::iterator iterator;
    typedef std::vector<std::string>::const_iterator const_iterator;

    Tokenizer(const std::string & str, const std::string & seperators = " \t\r\n\f");
    Tokenizer(const std::string & str, const std::string & seperators = TOKENIZER_DEFAULT_SEPERATORS);
    Tokenizer(Tokenizer &&);
    Tokenizer(const Tokenizer &);
    Tokenizer& operator=(const Tokenizer&) = default;
    Tokenizer& operator=(Tokenizer&&) = default;

    iterator begin();
    iterator end();
@@ -72,7 +78,11 @@ class ValueTokenizer {
    Tokenizer tokens;
    Tokenizer::const_iterator current;
public:
    ValueTokenizer(const std::string & str, const std::string & seperators = " \t\r\n\f");
    ValueTokenizer(const std::string & str, const std::string & seperators = TOKENIZER_DEFAULT_SEPERATORS);
    ValueTokenizer(const ValueTokenizer &);
    ValueTokenizer(ValueTokenizer &&);
    ValueTokenizer& operator=(const ValueTokenizer&) = default;
    ValueTokenizer& operator=(ValueTokenizer&&) = default;

    std::string next_string();
    tagint next_tagint();