| author | David Anderson <dvander@alliedmods.net> |
| Tue Feb 06 19:05:45 2007 +0000 (2007-02-06) | |
| changeset 441 | beba00d0a3e3 |
| child 455 | 6d3a8434ac65 |
| permissions | -rw-r--r-- |
| dvander@441 | 1 |
/** |
| dvander@441 | 2 |
* vim: set ts=4 : |
| dvander@441 | 3 |
* =============================================================== |
| dvander@441 | 4 |
* SourceMod, Copyright (C) 2004-2007 AlliedModders LLC. |
| dvander@441 | 5 |
* All rights reserved. |
| dvander@441 | 6 |
* =============================================================== |
| dvander@441 | 7 |
* |
| dvander@441 | 8 |
* This file is part of the SourceMod/SourcePawn SDK. This file may only be |
| dvander@441 | 9 |
* used or modified under the Terms and Conditions of its License Agreement, |
| dvander@441 | 10 |
* which is found in public/licenses/LICENSE.txt. As of this notice, derivative |
| dvander@441 | 11 |
* works must be licensed under the GNU General Public License (version 2 or |
| dvander@441 | 12 |
* greater). A copy of the GPL is included under public/licenses/GPL.txt. |
| dvander@441 | 13 |
* |
| dvander@441 | 14 |
* To view the latest information, see: http://www.sourcemod.net/license.php |
| dvander@441 | 15 |
* |
| dvander@441 | 16 |
* Version: $Id$ |
| dvander@441 | 17 |
*/ |
| dvander@441 | 18 |
|
| dvander@441 | 19 |
#ifndef _INCLUDE_SOURCEMOD_INTERFACE_DATAPACK_H_ |
| dvander@441 | 20 |
#define _INCLUDE_SOURCEMOD_INTERFACE_DATAPACK_H_ |
| dvander@441 | 21 |
|
| dvander@441 | 22 |
#include <sp_vm_api.h> |
| dvander@441 | 23 |
|
| dvander@441 | 24 |
/** |
| dvander@441 | 25 |
* @file IDataPack.h |
| dvander@441 | 26 |
* @brief Contains functions for packing data abstractly to/from plugins. The wrappers |
| dvander@441 | 27 |
* for creating these are contained in ISourceMod.h |
| dvander@441 | 28 |
*/ |
| dvander@441 | 29 |
|
| dvander@441 | 30 |
namespace SourceMod |
| dvander@441 | 31 |
{ |
| dvander@441 | 32 |
/** |
| dvander@441 | 33 |
* @brief Specifies a data pack that can only be read. |
| dvander@441 | 34 |
*/ |
| dvander@441 | 35 |
class IDataReader |
| dvander@441 | 36 |
{ |
| dvander@441 | 37 |
public: |
| dvander@441 | 38 |
/** |
| dvander@441 | 39 |
* @brief Resets the position in the data stream to the beginning. |
| dvander@441 | 40 |
*/ |
| dvander@441 | 41 |
virtual void Reset() const =0; |
| dvander@441 | 42 |
|
| dvander@441 | 43 |
/** |
| dvander@441 | 44 |
* @brief Retrieves the current stream position. |
| dvander@441 | 45 |
* |
| dvander@441 | 46 |
* @return Index into the stream. |
| dvander@441 | 47 |
*/ |
| dvander@441 | 48 |
virtual size_t GetPosition() const =0; |
| dvander@441 | 49 |
|
| dvander@441 | 50 |
/** |
| dvander@441 | 51 |
* @brief Sets the current stream position. |
| dvander@441 | 52 |
* |
| dvander@441 | 53 |
* @param pos Index to set the stream at. |
| dvander@441 | 54 |
* @return True if succeeded, false if out of bounds. |
| dvander@441 | 55 |
*/ |
| dvander@441 | 56 |
virtual bool SetPosition(size_t pos) const =0; |
| dvander@441 | 57 |
|
| dvander@441 | 58 |
/** |
| dvander@441 | 59 |
* @brief Reads one cell from the data stream. |
| dvander@441 | 60 |
* |
| dvander@441 | 61 |
* @return A cell read from the current position. |
| dvander@441 | 62 |
*/ |
| dvander@441 | 63 |
virtual cell_t ReadCell() const =0; |
| dvander@441 | 64 |
|
| dvander@441 | 65 |
/** |
| dvander@441 | 66 |
* @brief Reads one float from the data stream. |
| dvander@441 | 67 |
* |
| dvander@441 | 68 |
* @return A float read from the current position. |
| dvander@441 | 69 |
*/ |
| dvander@441 | 70 |
virtual float ReadFloat() const =0; |
| dvander@441 | 71 |
|
| dvander@441 | 72 |
/** |
| dvander@441 | 73 |
* @brief Returns whether or not a specified number of bytes can be read. |
| dvander@441 | 74 |
* |
| dvander@441 | 75 |
* @param bytes Number of bytes to simulate reading. |
| dvander@441 | 76 |
* @return True if can be read, false otherwise. |
| dvander@441 | 77 |
*/ |
| dvander@441 | 78 |
virtual bool IsReadable(size_t bytes) const =0; |
| dvander@441 | 79 |
|
| dvander@441 | 80 |
/** |
| dvander@441 | 81 |
* @brief Reads a string from the data stream. |
| dvander@441 | 82 |
* |
| dvander@441 | 83 |
* @param len Optional pointer to store the string length. |
| dvander@441 | 84 |
* @return Pointer to the string, or NULL if out of bounds. |
| dvander@441 | 85 |
*/ |
| dvander@441 | 86 |
virtual const char *ReadString(size_t *len) const =0; |
| dvander@441 | 87 |
|
| dvander@441 | 88 |
/** |
| dvander@441 | 89 |
* @brief Reads the current position as a generic address. |
| dvander@441 | 90 |
* |
| dvander@441 | 91 |
* @return Pointer to the memory. |
| dvander@441 | 92 |
*/ |
| dvander@441 | 93 |
virtual void *GetMemory() const =0; |
| dvander@441 | 94 |
}; |
| dvander@441 | 95 |
|
| dvander@441 | 96 |
/** |
| dvander@441 | 97 |
* @brief Specifices a data pack that can only be written. |
| dvander@441 | 98 |
*/ |
| dvander@441 | 99 |
class IDataPack : public IDataReader |
| dvander@441 | 100 |
{ |
| dvander@441 | 101 |
public: |
| dvander@441 | 102 |
/** |
| dvander@441 | 103 |
* @brief Packs one cell into the data stream. |
| dvander@441 | 104 |
* |
| dvander@441 | 105 |
* @param cell Cell value to write. |
| dvander@441 | 106 |
*/ |
| dvander@441 | 107 |
virtual void PackCell(cell_t cell) =0; |
| dvander@441 | 108 |
|
| dvander@441 | 109 |
/** |
| dvander@441 | 110 |
* @brief Packs one float into the data stream. |
| dvander@441 | 111 |
* |
| dvander@441 | 112 |
* @param val Float value to write. |
| dvander@441 | 113 |
*/ |
| dvander@441 | 114 |
virtual void PackFloat(float val) =0; |
| dvander@441 | 115 |
|
| dvander@441 | 116 |
/** |
| dvander@441 | 117 |
* @brief Packs one string into the data stream. |
| dvander@441 | 118 |
* The length is recorded as well for buffer overrun protection. |
| dvander@441 | 119 |
* |
| dvander@441 | 120 |
* @param string String to write. |
| dvander@441 | 121 |
*/ |
| dvander@441 | 122 |
virtual void PackString(const char *string) =0; |
| dvander@441 | 123 |
|
| dvander@441 | 124 |
/** |
| dvander@441 | 125 |
* @brief Creates a generic block of memory in the stream. |
| dvander@441 | 126 |
* |
| dvander@441 | 127 |
* Note that the pointer it returns can be invalidated on further |
| dvander@441 | 128 |
* writing, since the stream size may grow. You may need to double back |
| dvander@441 | 129 |
* and fetch the pointer again. |
| dvander@441 | 130 |
* |
| dvander@441 | 131 |
* @param size Size of the memory to create in the stream. |
| dvander@441 | 132 |
* @param addr Optional pointer to store the relocated memory address. |
| dvander@441 | 133 |
* @return Current position of the stream beforehand. |
| dvander@441 | 134 |
*/ |
| dvander@441 | 135 |
virtual size_t CreateMemory(size_t size, void **addr) =0; |
| dvander@441 | 136 |
}; |
| dvander@441 | 137 |
}; |
| dvander@441 | 138 |
|
| dvander@441 | 139 |
#endif //_INCLUDE_SOURCEMOD_INTERFACE_DATAPACK_H_ |