158 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			SourcePawn
		
	
	
	
	
	
			
		
		
	
	
			158 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			SourcePawn
		
	
	
	
	
	
| #if defined _entitylump_included
 | |
| 	#endinput
 | |
| #endif
 | |
| 
 | |
| #define _entitylump_included
 | |
| 
 | |
| /**
 | |
|  * An ordered list of key / value pairs for a map entity.
 | |
|  * If the entry in the EntityLump is removed, the handle will error on all operations.
 | |
|  * (The handle will remain valid on the scripting side, and will still need to be deleted.)
 | |
|  *
 | |
|  * Write operations (update, insert, erase, append) are only allowed during OnMapInit.
 | |
|  */
 | |
| methodmap EntityLumpEntry < Handle {
 | |
| 	/**
 | |
| 	 * Copies the key / value at the given index into buffers.
 | |
| 	 *
 | |
| 	 * @param index     Position, starting from 0.
 | |
| 	 * @param keybuf    Key name buffer.
 | |
| 	 * @param keylen    Maximum length of the key name buffer.
 | |
| 	 * @param valbuf    Value buffer.
 | |
| 	 * @param vallen    Maximum length of the value buffer.
 | |
| 	 * @error           Index is out of bounds.
 | |
| 	 */
 | |
| 	public native void Get(int index, char[] keybuf = "", int keylen = 0, char[] valbuf = "", int vallen = 0);
 | |
| 	
 | |
| 	/**
 | |
| 	 * Updates the key / value pair at the given index.
 | |
| 	 *
 | |
| 	 * @param index    Position, starting from 0.
 | |
| 	 * @param key      New key name, or NULL_STRING to preserve the existing key name.
 | |
| 	 * @param value    New value, or NULL_STRING to preserve the existing value.
 | |
| 	 * @error          Index is out of bounds or entity lump is read-only.
 | |
| 	 */
 | |
| 	public native void Update(int index, const char[] key = NULL_STRING, const char[] value = NULL_STRING);
 | |
| 	
 | |
| 	/**
 | |
| 	 * Inserts a new key / value pair at the given index, shifting the pair at that index and beyond up.
 | |
| 	 * If EntityLumpEntry.Length is passed in, this is an append operation.
 | |
| 	 *
 | |
| 	 * @param index    Position, starting from 0.
 | |
| 	 * @param key      New key name.
 | |
| 	 * @param value    New value.
 | |
| 	 * @error          Index is out of bounds or entity lump is read-only.
 | |
| 	 */
 | |
| 	public native void Insert(int index, const char[] key, const char[] value);
 | |
| 	
 | |
| 	/**
 | |
| 	 * Removes the key / value pair at the given index, shifting all entries past it down.
 | |
| 	 *
 | |
| 	 * @param index    Position, starting from 0.
 | |
| 	 * @error          Index is out of bounds or entity lump is read-only.
 | |
| 	 */
 | |
| 	public native void Erase(int index);
 | |
| 	
 | |
| 	/**
 | |
| 	 * Inserts a new key / value pair at the end of the entry's list.
 | |
| 	 *
 | |
| 	 * @param key      New key name.
 | |
| 	 * @param value    New value.
 | |
| 	 * @error          Index is out of bounds or entity lump is read-only.
 | |
| 	 */
 | |
| 	public native void Append(const char[] key, const char[] value);
 | |
| 	
 | |
| 	/**
 | |
| 	 * Searches the entry list for an index matching a key starting from a position.
 | |
| 	 *
 | |
| 	 * @param key      Key name to search.
 | |
| 	 * @param start    A position after which to begin searching from.  Use -1 to start from the
 | |
| 	 *                 first entry.
 | |
| 	 * @return         Position after start with an entry matching the given key, or -1 if no
 | |
| 	 *                 match was found.
 | |
| 	 * @error          Invalid start position; must be a value between -1 and one less than the
 | |
| 	 *                 length of the entry.
 | |
| 	 */
 | |
| 	public native int FindKey(const char[] key, int start = -1);
 | |
| 	
 | |
| 	/**
 | |
| 	 * Searches the entry list for an index matching a key starting from a position.
 | |
| 	 * This also copies the value from that index into the given buffer.
 | |
| 	 *
 | |
| 	 * This can be used to find the first / only value matching a key, or to iterate over all
 | |
| 	 * the values that match said key.
 | |
| 	 *
 | |
| 	 * @param key       Key name to search.
 | |
| 	 * @param buffer    Value buffer.  This will contain the result of the next match, or empty
 | |
| 	 *                  if no match was found.
 | |
| 	 * @param maxlen    Maximum length of the value buffer.
 | |
| 	 * @param start     An index after which to begin searching from.  Use -1 to start from the
 | |
| 	 *                  first entry.
 | |
| 	 * @return          Position after start with an entry matching the given key, or -1 if no
 | |
| 	 *                  match was found.
 | |
| 	 * @error           Invalid start position; must be a value between -1 and one less than the
 | |
| 	 *                  length of the entry.
 | |
| 	 */
 | |
| 	public int GetNextKey(const char[] key, char[] buffer, int maxlen, int start = -1) {
 | |
| 		int result = this.FindKey(key, start);
 | |
| 		if (result != -1) {
 | |
| 			this.Get(result, .valbuf = buffer, .vallen = maxlen);
 | |
| 		} else {
 | |
| 			buffer[0] = '\0';
 | |
| 		}
 | |
| 		return result;
 | |
| 	}
 | |
| 	
 | |
| 	/**
 | |
| 	 * Retrieves the number of key / value pairs in the entry.
 | |
| 	 */
 | |
| 	property int Length {
 | |
| 		public native get();
 | |
| 	}
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * A group of natives for a singleton entity lump, representing all the entities defined in the map.
 | |
|  *
 | |
|  * Write operations (insert, erase, append) are only allowed during OnMapInit.
 | |
|  */
 | |
| methodmap EntityLump {
 | |
| 	/**
 | |
| 	 * Returns the EntityLumpEntry at the given index.
 | |
| 	 * This handle should be freed by the calling plugin.
 | |
| 	 *
 | |
| 	 * @param index    Position, starting from 0.
 | |
| 	 * @error          Index is out of bounds.
 | |
| 	 */
 | |
| 	public static native EntityLumpEntry Get(int index);
 | |
| 	
 | |
| 	/**
 | |
| 	 * Erases an EntityLumpEntry at the given index, shifting all entries past it down.
 | |
| 	 * Any handles referencing the erased EntityLumpEntry will throw on any operations aside from delete.
 | |
| 	 *
 | |
| 	 * @param index    Position, starting from 0.
 | |
| 	 * @error          Index is out of bounds or entity lump is read-only.
 | |
| 	 */
 | |
| 	public static native void Erase(int index);
 | |
| 	
 | |
| 	/**
 | |
| 	 * Inserts an empty EntityLumpEntry at the given index, shifting the existing entry and ones past it up.
 | |
| 	 *
 | |
| 	 * @param index    Position, starting from 0.
 | |
| 	 * @error          Index is out of bounds or entity lump is read-only.
 | |
| 	 */
 | |
| 	public static native void Insert(int index);
 | |
| 	
 | |
| 	/**
 | |
| 	 * Creates an empty EntityLumpEntry, returning its index.
 | |
| 	 *
 | |
| 	 * @error    Entity lump is read-only.
 | |
| 	 */
 | |
| 	public static native int Append();
 | |
| 	
 | |
| 	/**
 | |
| 	 * Returns the number of entities currently in the lump.
 | |
| 	 */
 | |
| 	public static native int Length();
 | |
| };
 |