diff options
Diffstat (limited to 'src/labeller.cc')
-rw-r--r-- | src/labeller.cc | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/src/labeller.cc b/src/labeller.cc index 64da2d7..32f69c9 100644 --- a/src/labeller.cc +++ b/src/labeller.cc @@ -1,7 +1,7 @@ #include "labeller.h" #include "settings.h" #include <fstream> - +#include <iostream> namespace backend { struct labeller_impl { @@ -13,10 +13,27 @@ namespace backend { std::filesystem::path savepath; }; + void load(const std::filesystem::path& savepath, labeller_impl& data) { + std::ifstream in(savepath); + std::string line; + const char delim = ','; + while(std::getline(in, line)) { + std::size_t split = line.find(delim); + if(split == std::string::npos) { + std::cerr << "Error reading " << savepath << std::endl; + throw std::runtime_error(savepath.string()); + } + data.annotations.push_back(label(line.substr(0, split), std::stod(line.substr(split+1)))); + } + } + labeller::labeller(const std::filesystem::path& savepath) { data = std::shared_ptr<labeller_impl>(new labeller_impl); data->labels = settings::getLabels(); data->savepath = savepath; + if(std::filesystem::directory_entry(savepath).exists()) { + load(savepath, *data); + } } std::pair<label, label> labeller::getSurrounding(double time) const { @@ -105,6 +122,7 @@ namespace backend { void labeller::save() const { std::ofstream out; + std::filesystem::create_directories(data->savepath.parent_path()); out.open(data->savepath); std::vector<label> a(data->annotations); std::sort(a.begin(), a.end(), compareLabels); @@ -113,4 +131,5 @@ namespace backend { } out.close(); } + } |