You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.2 KiB
43 lines
1.2 KiB
#pragma once
|
|
|
|
#include <database.hpp>
|
|
#include <utilities.hpp>
|
|
|
|
#include <boost/archive/binary_iarchive.hpp>
|
|
#include <boost/archive/binary_oarchive.hpp>
|
|
#include <boost/filesystem.hpp>
|
|
|
|
#include <iostream>
|
|
#include <fstream>
|
|
#include <string>
|
|
|
|
template <typename T>
|
|
auto read_database(std::string const & database_directory, bool output_files = false){
|
|
namespace fs = boost::filesystem;
|
|
namespace ar = boost::archive;
|
|
|
|
image_database<T> db;
|
|
auto const database_file = database_directory + "-" + db.fingerprint_name() + ".db";
|
|
|
|
if (!boost::filesystem::exists(database_file)){
|
|
fs::path const directory(database_directory);
|
|
fs::directory_iterator eod;
|
|
for(fs::directory_iterator it(directory); it != eod; ++it){
|
|
auto const path = it->path();
|
|
auto const ext = to_lower(path.extension().string());
|
|
if(ext != ".png" && ext != ".jpg" && ext != ".jpeg" && ext != ".gif") continue;
|
|
if(output_files) std::cout << path << std::endl;
|
|
db.add(path.string());
|
|
}
|
|
|
|
std::ofstream file(database_file);
|
|
ar::binary_oarchive archive(file);
|
|
archive << db;
|
|
} else {
|
|
std::ifstream file(database_file);
|
|
ar::binary_iarchive archive(file);
|
|
archive >> db;
|
|
}
|
|
|
|
return db;
|
|
}
|
|
|