From e0bd4f9782f9547e5d2f22bec0ba803534b4aee6 Mon Sep 17 00:00:00 2001 From: David Anderson Date: Sat, 16 Dec 2006 01:51:45 +0000 Subject: [PATCH] i have changed some letters in these files --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%40220 --- core/interfaces/IHandleSys.h | 178 +++++++++++++++++++++++++++++++++++ core/interfaces/IShareSys.h | 2 + 2 files changed, 180 insertions(+) create mode 100644 core/interfaces/IHandleSys.h diff --git a/core/interfaces/IHandleSys.h b/core/interfaces/IHandleSys.h new file mode 100644 index 00000000..a1eeb4a9 --- /dev/null +++ b/core/interfaces/IHandleSys.h @@ -0,0 +1,178 @@ +#ifndef _INCLUDE_SOURCEMOD_HANDLESYSTEM_INTERFACE_H_ +#define _INCLUDE_SOURCEMOD_HANDLESYSTEM_INTERFACE_H_ + +#include +#include + +#define SMINTERFACE_HANDLESYSTEM_NAME "IHandleSys" +#define SMINTERFACE_HANDLESYSTEM_VERSION 1 + +namespace SourceMod +{ + /** + * Both of these types have invalid values of '0' for error checking. + */ + typedef unsigned int HandleType_t; + typedef unsigned int Handle_t; + + enum HandleError + { + HandleError_None = 0, /* No error */ + HandleError_Changed, /* The handle has been freed and reassigned */ + HandleError_Type, /* The handle has a different type registered */ + HandleError_Freed, /* The handle has been freed */ + HandleError_Index, /* generic internal indexing error */ + HandleError_Access, /* No access permitted to free this handle */ + }; + + struct HandleAccess + { + HandleAccess() : canRead(true), canDelete(true), canInherit(true) + { + } + bool canCreate; /* Instances can be created by other objects */ + bool canRead; /* Handle and type can be read by other objects */ + bool canDelete; /* Handle can be deleted by other objects */ + bool canInherit; /* Handle type can be inherited */ + }; + + struct HandleSecurity + { + IdentityToken_t owner; /* Owner of the handle */ + HandleAccess all; /* Access permissions of everyone */ + }; + + class IHandleTypeDispatch + { + public: + virtual unsigned int GetInterfaceVersion() + { + return SMINTERFACE_HANDLESYSTEM_VERSION; + } + public: + /** + * @brief Called when destroying a handle. Must be implemented. + */ + virtual void OnHandleDestroy(HandleType_t type, void *object) =0; + }; + + class IHandleSys : public SMInterface + { + public: + virtual unsigned int GetInterfaceVersion() + { + return SMINTERFACE_HANDLESYSTEM_VERSION; + } + virtual const char *GetInterfaceName() + { + return SMINTERFACE_HANDLESYSTEM_NAME; + } + public: + /** + * @brief Creates a new Handle type. + * NOTE: Handle names must be unique if not private. + * + * @param name Name of handle type (NULL or "" to be anonymous) + * @param dispatch Pointer to a valid IHandleTypeDispatch object. + * @return A new HandleType_t unique ID. + */ + virtual HandleType_t CreateType(const char *name, + IHandleTypeDispatch *dispatch) =0; + + /** + * @brief Creates a new Handle type. + * NOTE: Currently, a child type may not have its own children. + * NOTE: Handle names must be unique if not private. + * + * @param name Name of handle type (NULL or "" to be anonymous) + * @param dispatch Pointer to a valid IHandleTypeDispatch object. + * @param parent Parent handle to inherit from, 0 for none. + * @param security Pointer to a temporary HandleSecurity object, NULL to use defaults. + * @return A new HandleType_t unique ID. + */ + virtual HandleType_t CreateTypeEx(const char *name, + IHandleTypeDispatch *dispatch, + HandleType_t parent, + const HandleSecurity *security) =0; + + + /** + * @brief Creates a sub-type for a Handle. + * NOTE: Currently, a child type may not have its own children. + * NOTE: Handle names must be unique if not private. + * NOTE: This is a wrapper around the above. + * + * @param name Name of a handle. + * @param parent Parent handle type. + * @param dispatch Pointer to a valid IHandleTypeDispatch object. + * @return A new HandleType_t unique ID. + */ + virtual HandleType_t CreateChildType(const char *name, + HandleType_t parent, + IHandleTypeDispatch *dispatch) =0; + + /** + * @brief Removes a handle type. + * NOTE: This removes all child types. + * + * @param token Identity token. Removal fails if the token does not match. + * @param type Type chain to remove. + * @return True on success, false on failure. + */ + virtual bool RemoveType(HandleType_t type, IdentityToken_t ident) =0; + + /** + * @brief Finds a handle type by name. + * + * @param name Name of handle type to find (anonymous not allowed). + * @param type Address to store found handle in (if not found, undefined). + * @return True if found, false otherwise. + */ + virtual bool FindHandleType(const char *name, HandleType_t *type) =0; + + /** + * @brief Creates a new handle. + * + * @param type Type to use on the handle. + * @param object Object to bind to the handle. + * @param owner Identity token for object using this handle. + * @param ident Identity token if any security rights are needed. + * @return A new Handle_t, or 0 on failure. + */ + virtual Handle_t CreateHandleEx(HandleType_t type, + void *object, + IdentityToken_t owner, + IdentityToken_t ident) =0; + + /** + * @brief Creates a new handle. + * NOTE: This is a wrapper around the above function. + * + * @param type Type to use on the handle. + * @param object Object to bind to the handle. + * @param ctx Plugin context that will own this handle. NULL for none. + * @return A new Handle_t. + */ + virtual Handle_t CreateScriptHandle(HandleType_t type, void *object, sp_context_t *ctx) =0; + + /** + * @brief Destroys a handle. + * + * @param type Handle_t identifier to destroy. + * @return A HandleError error code. + */ + virtual HandleError DestroyHandle(Handle_t handle) =0; + + /** + * @brief Retrieves the contents of a handle. + * + * @param handle Handle_t from which to retrieve contents. + * @param type Expected type to read as. + * @param object Address to store object in. + * @return HandleError error code. + */ + virtual HandleError ReadHandle(Handle_t handle, HandleType_t type, void **object) =0; + }; +}; + +#endif //_INCLUDE_SOURCEMOD_HANDLESYSTEM_INTERFACE_H_ diff --git a/core/interfaces/IShareSys.h b/core/interfaces/IShareSys.h index d81a0fee..156d0470 100644 --- a/core/interfaces/IShareSys.h +++ b/core/interfaces/IShareSys.h @@ -3,6 +3,8 @@ #include +#define DEFAULT_IDENTITY 0 + namespace SourceMod { typedef unsigned int IdentityToken_t;