summaryrefslogtreecommitdiff
path: root/include/serialize.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/serialize.h')
-rw-r--r--include/serialize.h24
1 files changed, 19 insertions, 5 deletions
diff --git a/include/serialize.h b/include/serialize.h
index 67eb6b8ce..fd8e925ab 100644
--- a/include/serialize.h
+++ b/include/serialize.h
@@ -62,18 +62,22 @@ namespace Serialize
extern void RegisterTypes();
+class SerializeType;
+
class CoreExport Serializable : public virtual Base
{
private:
static std::list<Serializable *> *serializable_items;
-
+ SerializeType *s_type;
private:
- std::list<Serializable *>::iterator s_iter;
+ std::list<Serializable *>::iterator s_iter; // Iterator into serializable_items
+
Serialize::Data last_commit;
time_t last_commit_time;
- protected:
Serializable();
+ protected:
+ Serializable(const Anope::string &serialize_type);
Serializable(const Serializable &);
virtual ~Serializable();
@@ -93,7 +97,8 @@ class CoreExport Serializable : public virtual Base
bool IsTSCached();
void UpdateTS();
- virtual const Anope::string serialize_name() const = 0;
+ SerializeType* GetSerializableType() const;
+
virtual Serialize::Data serialize() const = 0;
static const std::list<Serializable *> &GetItems();
@@ -108,12 +113,19 @@ class CoreExport SerializeType
Anope::string name;
unserialize_func unserialize;
+ Module *owner;
+
time_t timestamp;
public:
std::map<unsigned int, Serializable *> objects;
- SerializeType(const Anope::string &n, unserialize_func f);
+ /** Creates a new serializable type
+ * @param n Type name
+ * @param f Func to unserialize objects
+ * @param owner Owner of this type. Leave NULL for the core.
+ */
+ SerializeType(const Anope::string &n, unserialize_func f, Module *owner = NULL);
~SerializeType();
const Anope::string &GetName();
@@ -125,6 +137,8 @@ class CoreExport SerializeType
time_t GetTimestamp() const;
void UpdateTimestamp();
+ Module* GetOwner() const;
+
static SerializeType *Find(const Anope::string &name);
static const std::vector<Anope::string> &GetTypeOrder();