- /** The default constructor initializes the BoolSet to all values unset.
- */
- BoolSet();
-
- /** This constructor copies the default bitmask from a char
- */
- BoolSet(char bitmask);
-
- /** The Set method sets one bool in the set.
- *
- * @param number The number of the item to set. This must be between 0 and 7.
- */
- void Set(int number);
-
- /** The Get method returns the value of one bool in the set
- *
- * @param number The number of the item to retrieve. This must be between 0 and 7.
- *
- * @return True if the item is set, false if it is unset.
- */
- bool Get(int number);
+/** The base class for inspircd classes that support reference counting.
+ * Any objects that do not have a well-defined lifetime should inherit from
+ * this, and should be assigned to a reference<type> object to establish their
+ * lifetime.
+ *
+ * Reference objects should not hold circular references back to themselves,
+ * even indirectly; this will cause a memory leak because the count will never
+ * drop to zero.
+ *
+ * Using a normal pointer for the object is recommended if you can assure that
+ * at least one reference<> will remain as long as that pointer is used; this
+ * will avoid the slight overhead of changing the reference count.
+ */
+class CoreExport refcountbase
+{
+ mutable unsigned int refcount;
+ public:
+ refcountbase();
+ virtual ~refcountbase();
+ inline unsigned int GetReferenceCount() const { return refcount; }
+ static inline void* operator new(size_t, void* m) { return m; }
+ static void* operator new(size_t);
+ static void operator delete(void*);
+ inline void refcount_inc() const { refcount++; }
+ inline bool refcount_dec() const { refcount--; return !refcount; }
+ private:
+ // uncopyable
+ refcountbase(const refcountbase&);
+ void operator=(const refcountbase&);
+};