2012-04-19 20:58:29 +02:00
|
|
|
/*
|
|
|
|
* InspIRCd -- Internet Relay Chat Daemon
|
|
|
|
*
|
2020-04-24 10:23:47 +01:00
|
|
|
* Copyright (C) 2013, 2017-2020 Sadie Powell <sadie@witchery.services>
|
2020-01-11 22:02:47 +00:00
|
|
|
* Copyright (C) 2012, 2014-2015 Attila Molnar <attilamolnar@hush.com>
|
|
|
|
* Copyright (C) 2012 Robby <robby@chatbelgie.be>
|
2012-04-19 20:58:29 +02:00
|
|
|
* Copyright (C) 2009 Daniel De Graaf <danieldg@inspircd.org>
|
|
|
|
*
|
|
|
|
* This file is part of InspIRCd. InspIRCd is free software: you can
|
|
|
|
* redistribute it and/or modify it under the terms of the GNU General Public
|
|
|
|
* License as published by the Free Software Foundation, version 2.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
|
|
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
|
|
|
* details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
2013-04-02 20:12:15 +01:00
|
|
|
#pragma once
|
2012-07-06 20:25:21 +02:00
|
|
|
|
2019-08-07 11:27:11 +01:00
|
|
|
/** Base class for logic that extends an Extensible object. */
|
2020-07-20 11:58:28 +01:00
|
|
|
class CoreExport ExtensionItem
|
|
|
|
: public ServiceProvider
|
2009-09-13 20:30:25 +00:00
|
|
|
{
|
|
|
|
public:
|
2019-08-07 11:27:11 +01:00
|
|
|
/** Types of Extensible that an ExtensionItem can apply to. */
|
2015-01-18 10:40:33 +01:00
|
|
|
enum ExtensibleType
|
|
|
|
{
|
2019-08-07 11:27:11 +01:00
|
|
|
/** The ExtensionItem applies to a User object. */
|
2015-01-18 10:40:33 +01:00
|
|
|
EXT_USER,
|
2019-08-07 11:27:11 +01:00
|
|
|
|
|
|
|
/** The ExtensionItem applies to a Channel object. */
|
2015-01-18 10:40:33 +01:00
|
|
|
EXT_CHANNEL,
|
2019-08-07 11:27:11 +01:00
|
|
|
|
|
|
|
/** The ExtensionItem applies to a Membership object. */
|
2015-01-18 10:40:33 +01:00
|
|
|
EXT_MEMBERSHIP
|
|
|
|
};
|
|
|
|
|
2019-08-07 11:27:11 +01:00
|
|
|
/** The type of Extensible that this ExtensionItem applies to. */
|
2015-01-18 10:40:33 +01:00
|
|
|
const ExtensibleType type;
|
|
|
|
|
2019-08-07 11:27:11 +01:00
|
|
|
/** Initializes an instance of the ExtensionItem class.
|
2019-08-13 17:01:25 +01:00
|
|
|
* @param owner The module which created this ExtensionItem.
|
2021-12-08 12:32:29 +00:00
|
|
|
* @param key The name of the extension item (e.g. foo_bar).
|
2019-08-07 11:27:11 +01:00
|
|
|
* @param exttype The type of Extensible that this ExtensionItem applies to.
|
|
|
|
*/
|
2019-08-13 17:01:25 +01:00
|
|
|
ExtensionItem(Module* owner, const std::string& key, ExtensibleType exttype);
|
2019-08-07 11:27:11 +01:00
|
|
|
|
2019-08-07 13:40:01 +01:00
|
|
|
/** Sets an ExtensionItem using a value in the internal format.
|
|
|
|
* @param container A container the ExtensionItem should be set on.
|
|
|
|
* @param value A value in the internal format.
|
2009-09-13 20:32:03 +00:00
|
|
|
*/
|
2021-03-17 13:34:43 +00:00
|
|
|
virtual void FromInternal(Extensible* container, const std::string& value) noexcept;
|
2019-08-07 11:27:11 +01:00
|
|
|
|
2019-08-07 13:40:01 +01:00
|
|
|
/** Sets an ExtensionItem using a value in the network format.
|
|
|
|
* @param container A container the ExtensionItem should be set on.
|
|
|
|
* @param value A value in the network format.
|
2009-09-13 20:32:03 +00:00
|
|
|
*/
|
2021-03-17 13:34:43 +00:00
|
|
|
virtual void FromNetwork(Extensible* container, const std::string& value) noexcept;
|
2019-08-07 13:40:01 +01:00
|
|
|
|
|
|
|
/** Gets an ExtensionItem's value in a human-readable format.
|
|
|
|
* @param container The container the ExtensionItem is set on.
|
|
|
|
* @param item The value to convert to a human-readable format.
|
|
|
|
* @return The value specified in \p item in a human readable format.
|
2009-09-13 20:32:03 +00:00
|
|
|
*/
|
2021-03-17 13:34:43 +00:00
|
|
|
virtual std::string ToHuman(const Extensible* container, void* item) const noexcept;
|
2009-09-13 20:30:25 +00:00
|
|
|
|
2019-08-07 13:40:01 +01:00
|
|
|
/** Gets an ExtensionItem's value in the internal format.
|
|
|
|
* @param container The container the ExtensionItem is set on.
|
|
|
|
* @param item The value to convert to the internal format.
|
|
|
|
* @return The value specified in \p item in the internal format.
|
2015-11-23 12:52:03 +01:00
|
|
|
*/
|
2021-03-17 13:34:43 +00:00
|
|
|
virtual std::string ToInternal(const Extensible* container, void* item) const noexcept;
|
2019-08-07 13:40:01 +01:00
|
|
|
|
|
|
|
/** Gets an ExtensionItem's value in the network format.
|
|
|
|
* @param container The container the ExtensionItem is set on.
|
|
|
|
* @param item The value to convert to the network format.
|
|
|
|
* @return The value specified in \p item in the network format.
|
|
|
|
*/
|
2021-03-17 13:34:43 +00:00
|
|
|
virtual std::string ToNetwork(const Extensible* container, void* item) const noexcept;
|
2009-09-13 20:30:25 +00:00
|
|
|
|
2019-08-07 11:27:11 +01:00
|
|
|
/** Deallocates the specified ExtensionItem value.
|
|
|
|
* @param container The container that the ExtensionItem is set on.
|
|
|
|
* @param item The item to deallocate.
|
2015-11-23 12:52:03 +01:00
|
|
|
*/
|
2019-08-13 16:05:57 +01:00
|
|
|
virtual void Delete(Extensible* container, void* item) = 0;
|
2019-08-07 11:27:11 +01:00
|
|
|
|
|
|
|
/** Registers this object with the ExtensionManager. */
|
2019-01-25 02:52:11 +00:00
|
|
|
void RegisterService() override;
|
2015-11-23 12:52:03 +01:00
|
|
|
|
2009-09-13 20:30:25 +00:00
|
|
|
protected:
|
2019-08-07 11:27:11 +01:00
|
|
|
/** Retrieves the value for this ExtensionItem from the internal map.
|
|
|
|
* @param container The container that the ExtensionItem is set on.
|
|
|
|
* @return Either the value of this ExtensionItem or NULL if it is not set.
|
|
|
|
*/
|
2020-07-20 11:58:28 +01:00
|
|
|
void* GetRaw(const Extensible* container) const;
|
2019-08-07 11:27:11 +01:00
|
|
|
|
|
|
|
/** Stores a value for this ExtensionItem in the internal map and returns the old value if one was set.
|
|
|
|
* @param container A container the ExtensionItem should be set on.
|
|
|
|
* @param value The value to set on the specified container.
|
|
|
|
* @return Either the old value or NULL if one is not set.
|
|
|
|
*/
|
2020-07-20 11:58:28 +01:00
|
|
|
void* SetRaw(Extensible* container, void* value);
|
2019-08-07 11:27:11 +01:00
|
|
|
|
|
|
|
/** Removes the value for this ExtensionItem from the internal map and returns it.
|
|
|
|
* @param container A container the ExtensionItem should be removed from.
|
|
|
|
* @return Either the old value or NULL if one is not set.
|
|
|
|
*/
|
2020-07-20 11:58:28 +01:00
|
|
|
void* UnsetRaw(Extensible* container);
|
2021-03-17 16:07:33 +00:00
|
|
|
|
|
|
|
/** Syncs the value of this ExtensionItem across the network.
|
|
|
|
* @param container The container this ExtensionItem is set on.
|
|
|
|
* @param item The value of this ExtensionItem.
|
|
|
|
*/
|
|
|
|
void Sync(const Extensible* container, void* item);
|
2009-09-13 20:30:25 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
/** class Extensible is the parent class of many classes such as User and Channel.
|
|
|
|
* class Extensible implements a system which allows modules to 'extend' the class by attaching data within
|
|
|
|
* a map associated with the object. In this way modules can store their own custom information within user
|
|
|
|
* objects, channel objects and server objects, without breaking other modules (this is more sensible than using
|
|
|
|
* a flags variable, and each module defining bits within the flag as 'theirs' as it is less prone to conflict and
|
2020-04-21 06:34:17 +00:00
|
|
|
* supports arbitrary data storage).
|
2009-09-13 20:30:25 +00:00
|
|
|
*/
|
2019-05-13 17:24:25 +01:00
|
|
|
class CoreExport Extensible
|
2021-03-02 05:39:12 +00:00
|
|
|
: public Cullable
|
2019-05-13 17:24:25 +01:00
|
|
|
, public Serializable
|
2009-09-13 20:30:25 +00:00
|
|
|
{
|
2009-10-14 18:39:38 +00:00
|
|
|
public:
|
2021-04-08 23:58:23 +01:00
|
|
|
typedef insp::flat_map<ExtensionItem*, void*> ExtensibleStore;
|
2009-10-14 18:39:38 +00:00
|
|
|
|
|
|
|
// Friend access for the protected getter/setter
|
|
|
|
friend class ExtensionItem;
|
|
|
|
private:
|
2009-09-13 20:30:25 +00:00
|
|
|
/** Private data store.
|
|
|
|
* Holds all extensible metadata for the class.
|
|
|
|
*/
|
|
|
|
ExtensibleStore extensions;
|
2014-02-10 13:56:14 +01:00
|
|
|
|
|
|
|
/** True if this Extensible has been culled.
|
|
|
|
* A warning is generated if false on destruction.
|
|
|
|
*/
|
|
|
|
unsigned int culled:1;
|
2009-09-13 20:30:25 +00:00
|
|
|
public:
|
|
|
|
/**
|
2021-06-21 16:47:06 -04:00
|
|
|
* Get the extension items for iteration (i.e. for metadata sync during netburst)
|
2009-09-13 20:30:25 +00:00
|
|
|
*/
|
|
|
|
inline const ExtensibleStore& GetExtList() const { return extensions; }
|
|
|
|
|
2009-10-18 02:57:46 +00:00
|
|
|
Extensible();
|
2021-03-02 05:39:12 +00:00
|
|
|
Cullable::Result Cull() override;
|
2021-04-04 23:42:15 +01:00
|
|
|
~Extensible() override;
|
2021-04-08 23:58:23 +01:00
|
|
|
void UnhookExtensions(const std::vector<ExtensionItem*>& toRemove);
|
2014-01-06 13:29:10 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Free all extension items attached to this Extensible
|
|
|
|
*/
|
|
|
|
void FreeAllExtItems();
|
2019-05-13 17:24:25 +01:00
|
|
|
|
2020-03-30 17:24:12 +01:00
|
|
|
/** @copydoc Serializable::Deserialize */
|
2019-11-13 15:24:45 +00:00
|
|
|
bool Deserialize(Data& data) override;
|
2019-05-13 17:24:25 +01:00
|
|
|
|
2020-03-30 17:24:12 +01:00
|
|
|
/** @copydoc Serializable::Deserialize */
|
2019-11-13 15:24:45 +00:00
|
|
|
bool Serialize(Serializable::Data& data) override;
|
2009-10-14 18:39:38 +00:00
|
|
|
};
|
2009-09-28 00:55:42 +00:00
|
|
|
|
2021-12-20 20:00:03 +00:00
|
|
|
class CoreExport ExtensionManager final
|
2009-10-14 18:39:38 +00:00
|
|
|
{
|
|
|
|
public:
|
2021-04-08 23:58:23 +01:00
|
|
|
typedef std::map<std::string, ExtensionItem*> ExtMap;
|
2015-11-26 13:39:56 +01:00
|
|
|
|
2012-12-02 19:40:33 +01:00
|
|
|
bool Register(ExtensionItem* item);
|
2021-04-08 23:58:23 +01:00
|
|
|
void BeginUnregister(Module* module, std::vector<ExtensionItem*>& list);
|
2009-10-14 18:39:38 +00:00
|
|
|
ExtensionItem* GetItem(const std::string& name);
|
2015-11-26 13:39:56 +01:00
|
|
|
|
2015-11-26 13:40:44 +01:00
|
|
|
/** Get all registered extensions keyed by their names
|
|
|
|
* @return Const map of ExtensionItem pointers keyed by their names
|
|
|
|
*/
|
|
|
|
const ExtMap& GetExts() const { return types; }
|
|
|
|
|
2015-11-26 13:39:56 +01:00
|
|
|
private:
|
|
|
|
ExtMap types;
|
2009-09-13 20:30:25 +00:00
|
|
|
};
|
|
|
|
|
2019-08-13 17:01:25 +01:00
|
|
|
/** Represents a simple ExtensionItem. */
|
2021-01-30 19:53:36 +00:00
|
|
|
template <typename T, typename Del = std::default_delete<T>>
|
2021-12-20 20:00:03 +00:00
|
|
|
class SimpleExtItem
|
|
|
|
: public ExtensionItem
|
2009-09-13 20:30:25 +00:00
|
|
|
{
|
|
|
|
public:
|
2019-08-13 17:01:25 +01:00
|
|
|
/** Initializes an instance of the SimpleExtItem class.
|
|
|
|
* @param parent The module which created this SimpleExtItem.
|
2021-12-08 12:32:29 +00:00
|
|
|
* @param Key The name of the extension item (e.g. foo_bar).
|
2019-08-13 17:01:25 +01:00
|
|
|
* @param exttype The type of Extensible that this SimpleExtItem applies to.
|
|
|
|
*/
|
|
|
|
SimpleExtItem(Module* parent, const std::string& Key, ExtensibleType exttype)
|
|
|
|
: ExtensionItem(parent, Key, exttype)
|
2009-09-13 20:30:25 +00:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2021-03-17 05:58:47 +00:00
|
|
|
inline T* Get(const Extensible* container) const
|
2009-09-13 20:30:25 +00:00
|
|
|
{
|
2020-07-20 11:58:28 +01:00
|
|
|
return static_cast<T*>(GetRaw(container));
|
2009-09-13 20:30:25 +00:00
|
|
|
}
|
|
|
|
|
2021-03-17 16:07:33 +00:00
|
|
|
inline void Set(Extensible* container, T* value, bool sync = true)
|
2009-09-13 20:30:25 +00:00
|
|
|
{
|
2021-03-17 13:12:24 +00:00
|
|
|
T* old = static_cast<T*>(SetRaw(container, value));
|
2019-08-13 16:05:57 +01:00
|
|
|
Delete(container, old);
|
2021-03-17 16:07:33 +00:00
|
|
|
if (sync)
|
|
|
|
Sync(container, value);
|
2009-09-13 20:30:25 +00:00
|
|
|
}
|
|
|
|
|
2021-03-17 13:12:24 +00:00
|
|
|
template <typename... Args>
|
|
|
|
inline void Set(Extensible* container, Args&&... args)
|
2009-09-13 20:30:25 +00:00
|
|
|
{
|
2021-03-17 13:12:24 +00:00
|
|
|
Set(container, new T(std::forward<Args>(args)...));
|
2009-09-13 20:30:25 +00:00
|
|
|
}
|
|
|
|
|
2021-03-17 16:07:33 +00:00
|
|
|
inline void Unset(Extensible* container, bool sync = true)
|
2009-09-13 20:30:25 +00:00
|
|
|
{
|
2021-03-17 16:07:33 +00:00
|
|
|
Delete(container, UnsetRaw(container));
|
|
|
|
if (sync)
|
|
|
|
Sync(container, nullptr);
|
2009-09-13 20:30:25 +00:00
|
|
|
}
|
|
|
|
|
2019-08-13 16:05:57 +01:00
|
|
|
void Delete(Extensible* container, void* item) override
|
2009-09-13 20:30:25 +00:00
|
|
|
{
|
2014-03-24 16:39:20 +01:00
|
|
|
Del del;
|
|
|
|
del(static_cast<T*>(item));
|
2009-09-13 20:30:25 +00:00
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2019-08-13 18:06:19 +01:00
|
|
|
/** Encapsulates an ExtensionItem which has a string value. */
|
2021-12-20 20:00:03 +00:00
|
|
|
class CoreExport StringExtItem
|
|
|
|
: public SimpleExtItem<std::string>
|
2009-09-13 20:32:03 +00:00
|
|
|
{
|
2019-08-13 18:06:19 +01:00
|
|
|
protected:
|
|
|
|
/** Whether to sync this StringExtItem across the network. */
|
|
|
|
bool synced;
|
|
|
|
|
2009-09-13 20:32:03 +00:00
|
|
|
public:
|
2019-08-13 18:06:19 +01:00
|
|
|
/** Initializes an instance of the StringExtItem class.
|
|
|
|
* @param owner The module which created this StringExtItem.
|
2021-12-08 12:32:29 +00:00
|
|
|
* @param key The name of the extension item (e.g. foo_bar).
|
2019-08-13 18:06:19 +01:00
|
|
|
* @param exttype The type of Extensible that this IntExtItem applies to.
|
|
|
|
* @param sync Whether this StringExtItem should be broadcast to other servers.
|
|
|
|
*/
|
|
|
|
StringExtItem(Module* owner, const std::string& key, ExtensibleType exttype, bool sync = false);
|
|
|
|
|
|
|
|
/** @copydoc ExtensionItem::FromInternal */
|
2021-03-17 13:34:43 +00:00
|
|
|
void FromInternal(Extensible* container, const std::string& value) noexcept override;
|
2019-08-13 18:06:19 +01:00
|
|
|
|
|
|
|
/** @copydoc ExtensionItem::FromNetwork */
|
2021-03-17 13:34:43 +00:00
|
|
|
void FromNetwork(Extensible* container, const std::string& value) noexcept override;
|
2019-08-13 18:06:19 +01:00
|
|
|
|
|
|
|
/** @copydoc ExtensionItem::ToInternal */
|
2021-03-17 13:34:43 +00:00
|
|
|
std::string ToInternal(const Extensible* container, void* item) const noexcept override;
|
2019-08-13 18:06:19 +01:00
|
|
|
|
|
|
|
/** @copydoc ExtensionItem::ToNetwork */
|
2021-03-17 13:34:43 +00:00
|
|
|
std::string ToNetwork(const Extensible* container, void* item) const noexcept override;
|
2009-09-13 20:32:03 +00:00
|
|
|
};
|
2009-09-13 20:30:25 +00:00
|
|
|
|
2019-08-13 18:59:24 +01:00
|
|
|
/** Encapsulates an ExtensionItem which has a integer value. */
|
2021-12-20 20:00:03 +00:00
|
|
|
class CoreExport IntExtItem
|
|
|
|
: public ExtensionItem
|
2009-09-13 20:30:25 +00:00
|
|
|
{
|
2019-08-13 18:59:24 +01:00
|
|
|
protected:
|
|
|
|
/** Whether to sync this IntExtItem across the network. */
|
|
|
|
bool synced;
|
|
|
|
|
2009-09-13 20:30:25 +00:00
|
|
|
public:
|
2019-08-13 18:59:24 +01:00
|
|
|
/** Initializes an instance of the IntExtItem class.
|
|
|
|
* @param owner The module which created this IntExtItem.
|
2021-12-08 12:32:29 +00:00
|
|
|
* @param key The name of the extension item (e.g. foo_bar).
|
2019-08-13 18:59:24 +01:00
|
|
|
* @param exttype The type of Extensible that this IntExtItem applies to.
|
|
|
|
* @param sync Whether this IntExtItem should be broadcast to other servers.
|
|
|
|
*/
|
|
|
|
IntExtItem(Module* owner, const std::string& key, ExtensibleType exttype, bool sync = false);
|
|
|
|
|
|
|
|
/** @copydoc ExtensionItem::Delete */
|
2019-08-13 16:05:57 +01:00
|
|
|
void Delete(Extensible* container, void* item) override;
|
2019-08-13 18:59:24 +01:00
|
|
|
|
|
|
|
/** Retrieves the value for this IntExtItem.
|
|
|
|
* @param container The container that the IntExtItem is set on.
|
|
|
|
* @return Either the value of this IntExtItem or NULL if it is not set.
|
|
|
|
*/
|
2021-03-17 05:58:47 +00:00
|
|
|
intptr_t Get(const Extensible* container) const;
|
2019-08-13 18:59:24 +01:00
|
|
|
|
|
|
|
/** @copydoc ExtensionItem::FromInternal */
|
2021-03-17 13:34:43 +00:00
|
|
|
void FromInternal(Extensible* container, const std::string& value) noexcept override;
|
2019-08-13 18:59:24 +01:00
|
|
|
|
|
|
|
/** @copydoc ExtensionItem::FromNetwork */
|
2021-03-17 13:34:43 +00:00
|
|
|
void FromNetwork(Extensible* container, const std::string& value) noexcept override;
|
2019-08-13 18:59:24 +01:00
|
|
|
|
2020-07-20 11:58:28 +01:00
|
|
|
/** Sets a value for this IntExtItem.
|
2019-08-13 18:59:24 +01:00
|
|
|
* @param container A container that the IntExtItem should be set on.
|
2021-03-17 16:07:33 +00:00
|
|
|
* @param value The new value for this IntExtItem.
|
|
|
|
* @param sync Whether to sync this value to other servers.
|
2019-08-13 18:59:24 +01:00
|
|
|
*/
|
2021-03-17 16:07:33 +00:00
|
|
|
void Set(Extensible* container, intptr_t value, bool sync = true);
|
2019-08-13 18:59:24 +01:00
|
|
|
|
|
|
|
/** @copydoc ExtensionItem::ToInternal */
|
2021-03-17 13:34:43 +00:00
|
|
|
std::string ToInternal(const Extensible* container, void* item) const noexcept override;
|
2019-08-13 18:59:24 +01:00
|
|
|
|
|
|
|
/** @copydoc ExtensionItem::ToNetwork */
|
2021-03-17 13:34:43 +00:00
|
|
|
std::string ToNetwork(const Extensible* container, void* item) const noexcept override;
|
2019-08-13 18:59:24 +01:00
|
|
|
|
|
|
|
/** Removes the value for this IntExtItem.
|
|
|
|
* @param container A container the ExtensionItem should be removed from.
|
2021-03-17 16:07:33 +00:00
|
|
|
* @param sync Whether to sync this unset to the network.
|
2019-08-13 18:59:24 +01:00
|
|
|
*/
|
2021-03-17 16:07:33 +00:00
|
|
|
void Unset(Extensible* container, bool sync = true);
|
2009-09-13 20:30:25 +00:00
|
|
|
};
|
2021-03-17 17:26:55 +00:00
|
|
|
|
|
|
|
/** Encapsulates an ExtensionItem which has a boolean value. */
|
2021-12-20 20:00:03 +00:00
|
|
|
class CoreExport BoolExtItem
|
|
|
|
: public ExtensionItem
|
2021-03-17 17:26:55 +00:00
|
|
|
{
|
|
|
|
protected:
|
|
|
|
/** Whether to sync this BoolExtItem across the network. */
|
|
|
|
bool synced;
|
|
|
|
|
|
|
|
public:
|
|
|
|
/** Initializes an instance of the BoolExtItem class.
|
|
|
|
* @param owner The module which created this BoolExtItem.
|
2021-12-08 12:32:29 +00:00
|
|
|
* @param key The name of the extension item (e.g. foo_bar).
|
2021-03-17 17:26:55 +00:00
|
|
|
* @param exttype The type of Extensible that this BoolExtItem applies to.
|
|
|
|
* @param sync Whether this BoolExtItem should be broadcast to other servers.
|
|
|
|
*/
|
|
|
|
BoolExtItem(Module* owner, const std::string& key, ExtensibleType exttype, bool sync = false);
|
|
|
|
|
|
|
|
/** @copydoc ExtensionItem::Delete */
|
|
|
|
void Delete(Extensible* container, void* item) override;
|
|
|
|
|
|
|
|
/** @copydoc ExtensionItem::FromInternal */
|
|
|
|
void FromInternal(Extensible* container, const std::string& value) noexcept override;
|
|
|
|
|
|
|
|
/** @copydoc ExtensionItem::FromNetwork */
|
|
|
|
void FromNetwork(Extensible* container, const std::string& value) noexcept override;
|
|
|
|
|
|
|
|
/** @copydoc ExtensionItem::ToHuman */
|
|
|
|
std::string ToHuman(const Extensible* container, void* item) const noexcept override;
|
|
|
|
|
|
|
|
/** @copydoc ExtensionItem::ToInternal */
|
|
|
|
std::string ToInternal(const Extensible* container, void* item) const noexcept override;
|
|
|
|
|
|
|
|
/** @copydoc ExtensionItem::ToNetwork */
|
|
|
|
std::string ToNetwork(const Extensible* container, void* item) const noexcept override;
|
|
|
|
|
|
|
|
/** Retrieves the value for this BoolExtItem.
|
|
|
|
* @param container The container that the BoolExtItem is set on.
|
|
|
|
* @return Either the value of this BoolExtItem or NULL if it is not set.
|
|
|
|
*/
|
|
|
|
bool Get(const Extensible* container) const;
|
|
|
|
|
|
|
|
/** Sets a value for this BoolExtItem.
|
|
|
|
* @param container A container that the BoolExtItem should be set on.
|
|
|
|
* @param sync Whether to sync this set to the network.
|
|
|
|
*/
|
|
|
|
void Set(Extensible* container, bool sync = true);
|
|
|
|
|
|
|
|
/** Removes the value for this BoolExtItem.
|
|
|
|
* @param container A container the ExtensionItem should be removed from.
|
|
|
|
* @param sync Whether to sync this unset to the network.
|
|
|
|
*/
|
|
|
|
void Unset(Extensible* container, bool sync = true);
|
|
|
|
};
|