Serializable unordered set
Serializable unordered set 可序列化哈希set
#include <boost/algorithm/string/predicate.hpp>
#include <boost/exception/diagnostic_information.hpp>
#include <boost/exception_ptr.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/config.hpp>
#include <boost/unordered_set.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/serialization/string.hpp>
#include <boost/serialization/version.hpp>
#include <boost/serialization/split_member.hpp>
#include <boost/serialization/collections_save_imp.hpp>
#include <boost/serialization/collections_load_imp.hpp>
#include <boost/serialization/utility.hpp>
#include <boost/serialization/split_free.hpp>
#include <boost/thread/shared_mutex.hpp>
#include <boost/thread/locks.hpp>
namespace boost {
namespace serialization {
template<class Archive, typename TArgs >
inline void save(Archive & ar, boost::unordered_set<TArgs> const&t, unsigned) {
boost::serialization::stl::save_collection<Archive, boost::unordered_set<TArgs> >(ar, t);
};
template<class Archive, typename TArgs >
inline void load(Archive & ar, boost::unordered_set<TArgs> &t, unsigned) {
boost::serialization::stl::load_collection<Archive,
boost::unordered_set<TArgs>,
boost::serialization::stl::archive_input_set<Archive, boost::unordered_set<TArgs> >,
boost::serialization::stl::no_reserve_imp<boost::unordered_set<TArgs> >
>(ar, t);
};
// split non-intrusive serialization function member into separate
// non intrusive save/load member functions
template <class Archive, typename TArgs>
inline void serialize(Archive & ar, boost::unordered_set<TArgs> &t, unsigned file_version) {
boost::serialization::split_free(ar, t, file_version);
};
}
};
template<typename DataType>
class Serializable_unordered_set : boost::noncopyable
{
friend class boost::serialization::access;
// When the class Archive corresponds to an output archive, the
// & operator is defined similar to <<. Likewise, when the class Archive
// is a type of input archive the & operator is defined similar to >>.
template<class Archive>
void serialize(Archive & ar, const unsigned int version) {
ar & m_unordered_set;
}
private:
boost::unordered_set<DataType > m_unordered_set;
mutable boost::shared_mutex m_mtx_protect;
public:
Serializable_unordered_set()
{
}
void SetMap(boost::unordered_set<DataType>& newset)
{
m_unordered_set = newset;
}
void insert(DataType t) {
boost::unique_lock< boost::shared_mutex > lock(m_mtx_protect);
m_unordered_set.insert(t);
}
bool exist(DataType ky)
{
boost::shared_lock< boost::shared_mutex > lock(m_mtx_protect);
if (m_unordered_set.find(ky) != m_unordered_set.end())
return true;
return false;
}
void serialize_to(string file_path) {
boost::shared_lock< boost::shared_mutex > lock(m_mtx_protect);
std::ofstream fout(file_path.c_str());
boost::archive::text_oarchive oa(fout);
oa << m_unordered_set;
fout.close();
}
void deserialize_from(std::string file_path) {
boost::unique_lock< boost::shared_mutex > lock(m_mtx_protect);
std::ifstream file_in(file_path.c_str());
boost::archive::text_iarchive ia(file_in);
ia >> m_unordered_set; //recover from file
file_in.close();
}
};
typedef std::shared_ptr<Serializable_unordered_set<int>> hashset_int_SPtr;
Serializable unordered set的更多相关文章
- 对 Serializable和Parcelable理解
1.首先他们两个接口都是为了实现对象的序列化,使之可以传递,所谓序列化就是将对象信息装换成可以存储的介质的过程. 2.Serializable是jdk所提供的序列化接口,该接口存在于io包下,可想用于 ...
- java.io.Serializable 序列化接口
什么是序列化.反序列化? Serialization(序列化)是一种将对象以一连串的字节描述的过程: 反序列化deserialization是一种将这些字节重建成一个对象的过程. 序列化通俗一点说就是 ...
- serialVersionUID, ObjectInputStream与ObjectOutputStream类,Serializable接口,serialVersionUID的作用和用法
ObjectInputStream与ObjectOutputStream类所读写的对象必须实现Serializable接口,对象中的transient和static类型成员变量不会被读取和写入 Ser ...
- Bitset<>用于unordered container时的默认hash函数
自从c++11起,bitset用于unordered container,将会提供默认的hash函数. 在gcc中,相关代码如下: // DR 1182. /// std::hash speciali ...
- Java Serializable系列化与反系列化
[引言] 将 Java 对象序列化为二进制文件的 Java 序列化技术是 Java 系列技术中一个较为重要的技术点,在大部分情况下,开发人员只需要了解被序列化的类需要实现 Serializable 接 ...
- 在Activity之间传递参数(三)——serializable和parcelable的区别
传递值对象: 一.serializable实现:简单易用 serializable的迷人之处在于你只需要对某个类以及它的属性实现Serializable 接口即可.Serializable 接口是一种 ...
- Java中的Serializable接口transient关键字,及字节、字符、对象IO
1.什么是序列化和反序列化Serialization是一种将对象转为为字节流的过程:deserialization是将字节流恢复为对象的过程. 2.什么情况下需要序列化a)当你想把的内存中的对象保存到 ...
- Hibernate的实体类为什么要实现Serializable序列化接口?
Hibernate的实体类中为什么要继承Serializable? hibernate有二级缓存,缓存会将对象写进硬盘,就必须序列化,以及兼容对象在网络中的传输 等等. java中常见的几个类(如 ...
- Java 序列化Serializable详解
Java 序列化Serializable详解(附详细例子) Java 序列化Serializable详解(附详细例子) 1.什么是序列化和反序列化Serialization(序列化)是一种将对象以一连 ...
随机推荐
- java之DatagramSocket、DatagramPackage丶MulticastSocket 广播学习
1.基本概念: a.DatagramPacket与DatagramSocket位于java.net包中 b.DatagramPacket表示存放数据的数据报,DatagramSocket表示接受或发送 ...
- ObjectiveC-MQTT初次接触
首先iOS与mac端用的框架是:https://github.com/ckrey/MQTT-Client-Framework 使用CocoaPods导入 pod 'MQTTClient/Websock ...
- (转)Web性能优化方案
第一章 打开网站慢现状分析 在公司访问部署在IDC机房的VIP网站时会感觉很慢.是什么原因造成的?为了缩短页面的响应时间,改进我们的用户体验,我们需要知道用户的时间花在等待什么东西上. 可以跟踪一下我 ...
- Centos配置国内yum源
网易(163)yum源是国内最好的yum源之一 ,无论是速度还是软件版本,都非常的不错,将yum源设置为163yum,可以提升软件包安装和更新的速度,同时避免一些常见软件版本无法找到.具体设置方法如下 ...
- C语言程序设计第二次作业
一.学习内容 掌握关系运算符.逻辑运算符.条件运算符 掌握常用数学函数的用法 if语句(单分支,双分支和多分支) 用switch语句实现多分支 理解多个if语句,if...else if... 和if ...
- JSP 甜点
JSP cookies Cookies是存储在客户机的文本文件,它们保存了大量轨迹信息.在servlet技术基础上,JSP显然能够提供对HTTP cookies的支持. 通常有三个步骤来识别回头客: ...
- 用Java编程找到两个字符串中共有的字符
这道题的算法思想是把字符串1中的每个字符与字符串2中的每个字符进行比较,遇到共同拥有的字符,放入另一个数组中,最后顺序输出即可 但是这道题的难点在于怎么排除重复的字符 public class bot ...
- cocos2dx 之 android java 与 c++ 互相调用 代码(以百度定位为例子)
在作cocosdx项目移植到android上时,预见各种头痛问题,今天首先就说说如何在 java 中调用c++ 代码. 这里就用百度定位为例吧,也是我项目中的一小块内容.首先,先百度一下 “百度定位s ...
- System.Collections.Generic的各容器类的用法
演示System.Collections.Generic的各容器类的用法. 包括:Dictionary,KeyValuePair,SortedDic tionary,SortedList,HashSe ...
- HttpFox插件安装和打开教程
HttpFox插件安装教程 1.打开火狐浏览器,选择右上角的打开菜单 2.选择附加组件,在获取附件组件栏中搜索HttpFox插件 3.找到HttpFox插件选择安装 4.安装完成后选择左边的扩展栏确认 ...