/*! ** main this is the main fucntion of the progamm learn ** ** @param argc ** @param argv ** ** @return */ int main(int argc, char **argv) { s_ppm *input = NULL; if ((argc < 1) && !strcmp(argv[1], "--help")) { usage(); return (0); } if (argc < 4) { usage(); return (1); } if (!strcmp(argv[1], "--create")) { input = load_ppm(argv[2]); create(input, argv[3]); free_ppm(input); } if (!strcmp(argv[1], "--merge")) opt_merge(argv); if (!strcmp(argv[1], "--dir")) learn_dir(argv[2], argv[3]); return (0); }
int simple_kv_service_impl::apply_learn_state(learn_state& state) { blob bb((const char*)state.meta[0].data(), 0, state.meta[0].length()); binary_reader reader(bb); zauto_lock l(_lock); _store.clear(); int magic; reader.read(magic); dassert(magic == 0xdeadbeef, ""); decree decree; reader.read(decree); dassert(decree >= 0, ""); uint64_t count; reader.read(count); for (uint64_t i = 0; i < count; i++) { std::string key, value; reader.read(key); reader.read(value); _store[key] = value; } _last_committed_decree = decree; _last_durable_decree = 0; flush(true); bool ret = true; if (_test_file_learning) { dassert(state.files.size() == 1, ""); std::string fn = learn_dir() + "/" + state.files[0]; ret = boost::filesystem::exists(fn); if (ret) { std::string s; std::ifstream fin(fn.c_str()); getline(fin, s); fin.close(); ret = (s == "DEADBEEF"); } else { dassert(false, "learning file is missing"); } } if (ret) return 0; else return ERR_LEARN_FILE_FALED.get(); }