mirror of https://github.com/bsnes-emu/bsnes.git
76 lines
1.7 KiB
C++
Executable File
76 lines
1.7 KiB
C++
Executable File
#ifndef NALL_DICTIONARY_HPP
|
|
#define NALL_DICTIONARY_HPP
|
|
|
|
#include <nall/array.hpp>
|
|
#include <nall/string.hpp>
|
|
#include <nall/utility.hpp>
|
|
|
|
namespace nall {
|
|
class dictionary {
|
|
public:
|
|
string operator[](const char *input) {
|
|
for(unsigned i = 0; i < index_input.size(); i++) {
|
|
if(index_input[i] == input) return index_output[i];
|
|
}
|
|
|
|
//no match, use input; remove input identifier, if one exists
|
|
if(strbegin(input, "{{")) {
|
|
if(auto pos = strpos(input, "}}")) {
|
|
string temp = substr(input, pos() + 2);
|
|
return temp;
|
|
}
|
|
}
|
|
|
|
return input;
|
|
}
|
|
|
|
bool import(const char *filename) {
|
|
string data;
|
|
if(data.readfile(filename) == false) return false;
|
|
ltrim_once(data, "\xef\xbb\xbf"); //remove UTF-8 marker, if it exists
|
|
data.replace("\r", "");
|
|
|
|
lstring line;
|
|
line.split("\n", data);
|
|
for(unsigned i = 0; i < line.size(); i++) {
|
|
lstring part;
|
|
//format: "Input" = "Output"
|
|
part.qsplit("=", line[i]);
|
|
if(part.size() != 2) continue;
|
|
|
|
//remove whitespace
|
|
trim(part[0]);
|
|
trim(part[1]);
|
|
|
|
//remove quotes
|
|
trim_once(part[0], "\"");
|
|
trim_once(part[1], "\"");
|
|
|
|
unsigned n = index_input.size();
|
|
index_input[n] = part[0];
|
|
index_output[n] = part[1];
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
void reset() {
|
|
index_input.reset();
|
|
index_output.reset();
|
|
}
|
|
|
|
~dictionary() {
|
|
reset();
|
|
}
|
|
|
|
dictionary& operator=(const dictionary&) = delete;
|
|
dictionary(const dictionary&) = delete;
|
|
|
|
protected:
|
|
lstring index_input;
|
|
lstring index_output;
|
|
};
|
|
}
|
|
|
|
#endif
|