1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
|
#ifndef CHARACTER_MATCH_H
#define CHARACTER_MATCH_H
//=====================================================
// Includes
//=====================================================
#include <string>
#include <array>
#include <algorithm>
#include <iostream>
// Used to loop in the parser. This is the max length of either
// the input or output strings.
const int STR_LEN = 8;
template<size_t N, class V>
std::array<wchar_t, N> toArray(const V& v)
{
std::array<wchar_t, N> d = std::array<wchar_t, N>();
copy(std::begin(v), std::end(v), std::begin(d));
return d;
}
class CharacterMatch
{
public:
static const size_t N = 8;
// Constructor(s)
CharacterMatch()
: m_Input(std::array<wchar_t, N>()), m_Output(std::array<wchar_t, N>()) {}
CharacterMatch(const std::wstring& input, const std::wstring& output)
: m_Input(toArray<N>(input)), m_Output(toArray<N>(output)) {}
// Copy constructor?
CharacterMatch(const CharacterMatch& that)
: m_Input(that.m_Input), m_Output(that.m_Output) {}
// Destructor
~CharacterMatch() {}
// Overloaded = operator
CharacterMatch& operator=(const CharacterMatch& that)
{
m_Input = that.m_Input;
m_Output = that.m_Output;
//m_Input = that.m_Output;
//m_Input = that.m_Output;
return *this;
}
// Accessor functions
const wchar_t* GetInput() const
{
return &m_Input[0];
}
const wchar_t* GetOutput() const
{
return &m_Output[0];
}
std::wstring GetName() const
{
std::wstring name = &m_Input[0];
name += L" - ";
name += &m_Output[0];
return name;
}
private:
// Members
std::array<wchar_t, N> m_Input;
std::array<wchar_t, N> m_Output;
};
inline std::wostream& operator<<(std::wostream& wos, const CharacterMatch& chmatch)
{
wos << chmatch.GetInput() << L"/" << chmatch.GetOutput();
return wos;
}
inline bool parseStr(const std::wstring& str, CharacterMatch& chmatch)
{
size_t pos = str.find(L'/');
if(pos == str.npos)
return false;
std::wstring input = str.substr(0, pos);
std::wstring output = str.substr(pos + 1);
chmatch = CharacterMatch(input, output);
return true;
}
#endif // CHARACTER_MATCH_H
|