/*** Copyright (C) 2022 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: StringToProvider.cpp Date: 2022-1-31 Author: Reece ***/ #include #include "StringToProvider.hpp" namespace Aurora::IO::Character { class CharacterProvider : public ICharacterProviderEx { public: CharacterProvider(const AuString &in, AuUInt offset = 0); CharacterProvider(const AuSPtr &in, AuUInt offset = 0); bool GetByte(AuUInt8 &val) override; AuUInt GetPosition() override; bool SetPosition(AuUInt offset) override; protected: AuUInt offset_ {}; AuSPtr string_; }; CharacterProvider::CharacterProvider(const AuString &in, AuUInt offset) : string_(AuMakeShared(in)), offset_(offset) {} CharacterProvider::CharacterProvider(const AuSPtr &in, AuUInt offset) : string_(in), offset_(offset) {} bool CharacterProvider::GetByte(AuUInt8 &val) { if (!string_) { return false; } auto offset = offset_++; if (offset >= string_->size()) { offset = string_->size(); return false; } val = string_->at(offset); return true; } AuUInt CharacterProvider::GetPosition() { return this->offset_; } bool CharacterProvider::SetPosition(AuUInt offset) { if (!this->string_) { return false; } this->offset_ = offset; return this->offset_ < this->string_->size(); } AUKN_SYM ICharacterProviderEx *ProviderFromSharedStringNew(const AuSPtr &str, AuUInt index) { return _new CharacterProvider(str, index); } AUKN_SYM void ProviderFromSharedStringRelease(ICharacterProviderEx *me) { AuSafeDelete(me); } AUKN_SYM ICharacterProviderEx *ProviderFromStringNew(const AuString &str, AuUInt index) { return _new CharacterProvider(str, index); } AUKN_SYM void ProviderFromStringRelease(ICharacterProviderEx *me) { AuSafeDelete(me); } }