in pwnables/raddest_db/raddest_db.cc [81:211]
void eval(std::vector<std::string> & tokens) {
if (tokens.size() < 1) return;
std::string command = tokens[0];
if (command == "create") {
if (tokens.size() != 2) return;
std::string db_name = tokens[1];
env[db_name] = new RaddestDBDatabase();
}
if (command == "destroy") {
if (tokens.size() != 2) return;
std::string db_name = tokens[1];
auto got = env.find(db_name);
if ( got == env.end() ) {
return;
}
delete got->second;
env.erase(db_name);
}
if (command == "list") {
if (tokens.size() != 2) return;
std::string identifier = tokens[1];
if (identifier == "databases") {
for (auto it = env.begin(); it != env.end(); ++it) {
std::cout << it->first << std::endl;
}
}
}
//get db string 0
if (command == "get") {
if (tokens.size() != 3) return;
std::string db_name = tokens[1];
uint32_t key = std::atoi(tokens[2].c_str());
auto got = env.find(db_name);
if ( got == env.end() ) {
return;
}
RaddestDBDatabase *raddest_db = got->second;
raddest_db->Get(key);
}
if (command == "store") {
if (tokens.size() != 5) return;
std::string db_name = tokens[1];
std::string type = tokens[2];
uint32_t key = std::atoi(tokens[3].c_str());
std::string value = tokens[4];
auto got = env.find(db_name);
if ( got == env.end() ) {
return;
}
RaddestDBDatabase *raddest_db = got->second;
raddest_db->Set(type, key, value);
}
if (command == "delete") {
if (tokens.size() != 3) return;
std::string db_name = tokens[1];
uint32_t key = std::atoi(tokens[2].c_str());
auto got = env.find(db_name);
if ( got == env.end() ) {
return;
}
RaddestDBDatabase *raddest_db = got->second;
raddest_db->Delete(key);
}
if (command == "print") {
if (tokens.size() != 2) return;
std::string db_name = tokens[1];
auto got = env.find(db_name);
if ( got == env.end() ) {
return;
}
RaddestDBDatabase *raddest_db = got->second;
raddest_db->Print();
}
if (command == "echo") {
if (tokens.size() != 2) return;
std::string str = tokens[1];
Echo(str);
}
if (command == "empty") {
if (tokens.size() != 2) return;
std::string db_name = tokens[1];
auto got = env.find(db_name);
if ( got == env.end() ) {
return;
}
RaddestDBDatabase *raddest_db = got->second;
raddest_db->Empty();
}
if (command == "getter") {
if (tokens.size() != 4) return;
std::string db_name = tokens[1];
uint32_t key = std::atoi(tokens[2].c_str());
uint32_t count = std::atoi(tokens[3].c_str());
auto got = env.find(db_name);
if ( got == env.end() ) {
return;
}
RaddestDBDatabase *raddest_db = got->second;
getter_repl("[getter]: ", raddest_db, key, count);
}
}