提交 01ba4838 编写于 作者: S superjom

add implementation of storage

上级 b0465ebf
cmake_minimum_required(VERSION 3.8)
project(VisualDL)
set(CMAKE_CXX_STANDARD 11)
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
include_directories(thirdparty/local/include)
link_directories(thirdparty/local/lib)
add_subdirectory(thirdparty/pybind11-2.2.1)
set(SOURCE_FILES
visualdl/backend/storage/storage.cc visualdl/backend/storage/storage.h
visualdl/backend/storage/storage.pb.h
visualdl/backend/storage/storage.pb.cc
)
add_library(storage visualdl/backend/storage/storage.cc
visualdl/backend/storage/storage.pb.cc)
add_executable(VisualDL ${SOURCE_FILES})
\ No newline at end of file
#include <fstream>
#include <glog/logging.h>
#include "visualdl/backend/storage/storage.h"
namespace visualdl {
storage::Tablet *Storage::Add(const std::string &tag) {
return &proto_.mutable_tablets()->at(tag);
}
const storage::Tablet *Storage::Find(const std::string &tag) const {
auto it = proto_.tablets().find(tag);
if (it != proto_.tablets().end()) {
return &it->second;
}
return nullptr;
}
void Storage::Save(const std::string &path) const {
std::ofstream file(path, file.binary | file.out);
CHECK(file.is_open()) << "can't open path " << path;
auto str = Serialize();
file.write(str.c_str(), str.size());
}
void Storage::Load(const std::string &path) {
std::ifstream file(path, file.binary);
CHECK(file.is_open()) << "can't open path " << path;
size_t size = file.tellg();
std::string buffer(size, ' ');
file.seekg(0);
file.read(&buffer[0], size);
DeSerialize(buffer);
}
std::string Storage::Serialize() const {
return proto_.SerializeAsString();
}
void Storage::DeSerialize(const std::string &data) {
proto_.ParseFromString(data);
}
} // namespace visualdl
//
// Created by superjom on 17-11-16.
//
#include "storage.h"
#ifndef VISUALDL_STORAGE_H
#define VISUALDL_STORAGE_H
class Storage {
#include <string>
#include <time.h>
#include "visualdl/backend/storage/storage.pb.h"
namespace visualdl {
class Storage final {
public:
Storage& Global() {
static Storage* instance = new Storage();
/*
* There should be only one Storage instance in memory.
*/
Storage &Global() {
static Storage *instance = new Storage();
return *instance;
}
/*
* Add a new tablet named `tag`, the newly added instance will be returned.
*/
storage::Tablet *Add(const std::string &tag);
/*
* Search the tablet named `tag`, if not exist, return nullptr.
*/
const storage::Tablet *Find(const std::string &tag) const;
/*
* Serialize this object to string and save it to a file.
*/
void Save(const std::string &path) const;
/*
* Load the Protobuf message from a file.
*/
void Load(const std::string &path);
protected:
/*
* Serialize the Storage instance to string.
*/
std::string Serialize() const;
/*
* De-serialize from a string and update this Storage instance.
*/
void DeSerialize(const std::string &data);
Storage() {
// set time stamp
time_t time0;
time(&time0);
proto_.set_timestamp(time0);
}
private:
storage::Storage proto_;
};
} // namespace visualdl
#endif //VISUALDL_STORAGE_H
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册