LeechCraft  0.6.70-15082-g543737046d
Modular cross-platform feature rich live environment.
idpool.h
Go to the documentation of this file.
1 /**********************************************************************
2  * LeechCraft - modular cross-platform feature rich internet client.
3  * Copyright (C) 2006-2014 Georg Rudoy
4  *
5  * Distributed under the Boost Software License, Version 1.0.
6  * (See accompanying file LICENSE or copy at https://www.boost.org/LICENSE_1_0.txt)
7  **********************************************************************/
8 
9 #pragma once
10 
11 #include "utilconfig.h"
12 #include <QByteArray>
13 #include <QSet>
14 #include <QDataStream>
15 #include <QtDebug>
16 
17 namespace LC::Util
18 {
25  template<typename T>
26  class IDPool final
27  {
28  T CurrentID_;
29  public:
34  explicit IDPool (const T& id = T ())
35  : CurrentID_ { id }
36  {
37  }
38 
43  T GetID ()
44  {
45  return ++CurrentID_;
46  }
47 
52  void SetID (T id)
53  {
54  CurrentID_ = id;
55  }
56 
61  void FreeID (T id)
62  {
63  Q_UNUSED (id)
64  }
65 
70  QByteArray SaveState () const
71  {
72  QByteArray result;
73  {
74  QDataStream ostr (&result, QIODevice::WriteOnly);
75  quint8 ver = 1;
76  ostr << ver;
77  ostr << CurrentID_;
78  }
79  return result;
80  }
81 
87  void LoadState (const QByteArray& state)
88  {
89  if (state.isEmpty ())
90  return;
91 
92  QDataStream istr (state);
93  quint8 ver;
94  istr >> ver;
95  if (ver == 1)
96  istr >> CurrentID_;
97  else
98  qWarning () << Q_FUNC_INFO
99  << "unknown version"
100  << ver
101  << ", not restoring state.";
102  }
103  };
104 }
LC::Util
Definition: icoreproxy.h:33
utilconfig.h
LC::Util::IDPool::SaveState
QByteArray SaveState() const
Saves the state of this pool.
Definition: idpool.h:82
LC::Util::IDPool::LoadState
void LoadState(const QByteArray &state)
Recovers the state of this pool.
Definition: idpool.h:99
LC::Util::IDPool::GetID
T GetID()
Returns next ID.
Definition: idpool.h:55
LC::Util::IDPool::IDPool
IDPool(const T &id=T())
Creates a pool with the given initial value.
Definition: idpool.h:46
LC::Util::IDPool::FreeID
void FreeID(T id)
Frees the id.
Definition: idpool.h:73
LC::Util::IDPool::SetID
void SetID(T id)
Forcefully sets the current ID.
Definition: idpool.h:64