1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-12-11 15:49:38 +00:00
CLK/Machines/Utility/StringSerialiser.cpp
2018-05-13 15:19:52 -04:00

47 lines
1.1 KiB
C++

//
// StringSerialiser.cpp
// Clock Signal
//
// Created by Thomas Harte on 13/05/2018.
// Copyright 2018 Thomas Harte. All rights reserved.
//
#include "StringSerialiser.hpp"
using namespace Utility;
StringSerialiser::StringSerialiser(const std::string &source, bool use_linefeed_only) {
if(!use_linefeed_only) {
input_string_ = source;
} else {
input_string_.reserve(source.size());
// Commute any \ns that are not immediately after \rs to \rs; remove the rest.
bool saw_carriage_return = false;
for(auto character: source) {
if(character != '\n') {
input_string_.push_back(character);
} else {
if(!saw_carriage_return) {
input_string_.push_back('\r');
}
}
saw_carriage_return = character == '\r';
}
}
}
uint8_t StringSerialiser::head() {
if(input_string_pointer_ == input_string_.size())
return '\0';
return static_cast<uint8_t>(input_string_[input_string_pointer_]);
}
bool StringSerialiser::advance() {
if(input_string_pointer_ != input_string_.size()) {
++input_string_pointer_;
return input_string_pointer_ != input_string_.size();
}
return false;
}