Mesen-SX/Utilities/FastString.h
2020-12-19 23:32:47 +03:00

105 lines
1.5 KiB
C++

#pragma once
#include "stdafx.h"
class FastString
{
private:
char _buffer[1000];
uint16_t _pos = 0;
bool _lowerCase = false;
void WriteAll()
{
}
public:
FastString(bool lowerCase = false) { _lowerCase = lowerCase; }
FastString(const char* str, int size) { Write(str, size); }
FastString(string& str) { Write(str); }
void Write(char c)
{
if (_lowerCase)
{
_buffer[_pos++] = ::tolower(c);
}
else
{
_buffer[_pos++] = c;
}
}
void Write(const char* str, int size)
{
if (_lowerCase)
{
for (int i = 0; i < size; i++)
{
_buffer[_pos + i] = ::tolower(str[i]);
}
}
else
{
memcpy(_buffer + _pos, str, size);
}
_pos += size;
}
void Delimiter(const char* str)
{
if (_pos > 0)
{
Write(str, (uint16_t)strlen(str));
}
}
void Write(const char* str)
{
Write(str, (uint16_t)strlen(str));
}
void Write(string& str, bool preserveCase = false)
{
if (_lowerCase && !preserveCase)
{
for (size_t i = 0; i < str.size(); i++)
{
_buffer[_pos + i] = ::tolower(str[i]);
}
}
else
{
memcpy(_buffer + _pos, str.c_str(), str.size());
}
_pos += (uint16_t)str.size();
}
void Write(FastString& str)
{
memcpy(_buffer + _pos, str._buffer, str._pos);
_pos += str._pos;
}
const char* ToString()
{
_buffer[_pos] = 0;
return _buffer;
}
uint16_t GetSize()
{
return _pos;
}
template <typename T, typename... Args>
void WriteAll(T first, Args ... args)
{
Write(first);
WriteAll(args...);
}
const char operator[](int idx)
{
return _buffer[idx];
}
};