void eval()

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);
  }
}