stl_set.h
来自「这是整套横扫千军3D版游戏的源码」· C头文件 代码 · 共 71 行
H
71 行
#ifndef CR_SET_TYPE_IMPL_H
#define CR_SET_TYPE_IMPL_H
#include <set>
// hash_set, defined in stdafx.h
#include "System/StdAfx.h"
#include SPRING_HASH_SET_H
namespace creg
{
// set/multiset - this template assumes the type is copyable
template<typename T>
class SetType : public IType
{
IType *elemType;
public:
typedef typename T::iterator iterator;
SetType (IType *elemType) : elemType (elemType) {}
~SetType () { delete elemType; }
void Serialize (ISerializer *s, void *instance)
{
T& ct = *(T*)instance;
if (s->IsWriting ()) {
int size=ct.size();
s->Serialize (&size, sizeof(int));
for (iterator i=ct.begin();i!=ct.end();++i)
elemType->Serialize (s, (void*) &*i);
} else {
int size;
s->Serialize (&size, sizeof(int));
for (int i=0;i<size;i++) {
typename T::value_type v;
elemType->Serialize (s, &v);
ct.insert (v);
}
}
}
std::string GetName() { return "set<" + elemType->GetName() + ">"; }
};
// Set type
template<typename T>
struct DeduceType < std::set<T> > {
IType* Get () {
DeduceType<T> elemtype;
return SAFE_NEW SetType < std::set <T> > (elemtype.Get());
}
};
// Multiset
template<typename T>
struct DeduceType < std::multiset<T> > {
IType* Get () {
DeduceType<T> elemtype;
return SAFE_NEW SetType < std::multiset<T> > (elemtype.Get());
}
};
// Hash set
template<typename T>
struct DeduceType < SPRING_HASH_SET<T> > {
IType* Get () {
DeduceType<T> elemtype;
return SAFE_NEW SetType < SPRING_HASH_SET<T> > (elemtype.Get());
}
};
};
#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?