diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..f42e096 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,24 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "Start Arma 3 Server", + "type": "process", + "command": "wscript.exe", + "args": [ + "D:\\SteamLibrary\\steamapps\\common\\Arma 3\\start_serverhub_hidden.vbs" + ], + "presentation": { + "reveal": "silent", + "panel": "shared", + "showReuseMessage": false, + "clear": true + }, + "problemMatcher": [], + "group": { + "kind": "build", + "isDefault": true + } + } + ] +} \ No newline at end of file diff --git a/api.7z b/api.7z new file mode 100644 index 0000000..657d0f9 Binary files /dev/null and b/api.7z differ diff --git a/api/docbook/d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.xml b/api/docbook/d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.xml new file mode 100644 index 0000000..23ffc16 --- /dev/null +++ b/api/docbook/d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.xml @@ -0,0 +1,84 @@ + +
+processQueue +processQueue +
+autotoc_md119 +title: ArmaDragonflyClient - Process Queue icon: mdi:file-text-outline +
+
+excerpt: Processes a queue of tasks to be executed.
+
+dragonfly_db_fnc_processQueue
+Description +Processes the queue of pending database tasks sequentially. This function executes each task in the queue one by one, handling various database operations based on the task type. It continues processing until the queue is empty. +
+
+Syntax +[] spawn dragonfly_db_fnc_processQueue + +
+
+Parameters +None. This function does not require any parameters. +
+
+Return Value +None. The function processes tasks in the queue and updates the processing state. +
+
+Examples
+Start processing the queue manually: +[] spawn dragonfly_db_fnc_processQueue; + +
+
+Trigger queue processing from a client: +[] remoteExec ["dragonfly_db_fnc_processQueue", 2, false]; + +
+
+
+Notes + + +Sets GVAR(isProcessing) to true while running and false when complete + +Processes one task per second to prevent overloading + +Handles a wide range of database operations including: + +Key-value operations (get, set, delete) + +Hash table operations (hget, hset, hgetall, etc.) + +List operations (listadd, listrng, listset, etc.) + + + +Automatically started by dragonfly_db_fnc_addTask when new tasks are added + +Each task execution is logged for debugging purposes + +Should typically be spawned rather than called to avoid blocking + + +
+
+Related Functions + + +dragonfly_db_fnc_addTask: Adds tasks to the queue for processing + +dragonfly_db_fnc_handler: Handles data returned from database operations + +dragonfly_db_fnc_scheduler: Manages callback responses from the database + + +
+
+Links +Add Task | Handler | Init | Print Addon Name | Process Queue | Scheduler | Test +
+
+
diff --git a/api/docbook/d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.xml b/api/docbook/d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.xml new file mode 100644 index 0000000..cf52c4a --- /dev/null +++ b/api/docbook/d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.xml @@ -0,0 +1,130 @@ + +
+hashSet +hashSet +
+autotoc_md219 +title: ArmaDragonflyClient - Hash Set icon: mdi:file-text-outline +
+
+excerpt: Set a field value in the current client's hash table in DragonflyClient.
+
+dragonfly_db_fnc_hashSet
+Description +Sets the value of a specified field in the hash table associated with the current client/player. This function automatically determines the appropriate hash ID based on the caller's identity, making it more convenient than hashSetId which requires manually specifying an ID. It allows storing various data types (arrays, strings, numbers, or booleans) in a field of the client-specific hash structure. +
+
+Syntax +[_keyField, _data] call dragonfly_db_fnc_hashSet + +
+
+Parameters + + + + + + + + + +Parameter + +Type + +Description + +Default + + + + +_keyField + +String + +Name of the field in the hash to set + +"" + + + +_data + +Array, String, Number, or Boolean + +The value to store in the hash field + +[] + + + + + +
+
+Return Value +None. The operation runs synchronously to store the data. +
+
+Examples
+Store a player's loadout: +["loadout", [getUnitLoadout player]] call dragonfly_db_fnc_hashSet; + +
+
+Store player preferences: +["settings", [true, 30, "normal"]] call dragonfly_db_fnc_hashSet; + +
+
+Store data from a client: +["clientInfo", [name player, getPlayerUID player]] remoteExecCall ["dragonfly_db_fnc_hashSet", 2, false]; + +
+
+
+Notes + + +Stores a single field-value pair in the current client's hash table + +Both the field name and data parameters are required and validated + +If the field already exists, its value will be overwritten + +Supports various data types: arrays, strings, numbers, and booleans + +This function automatically determines which hash table to use based on the caller's identity + +Use hashSetId when you need to specify a particular hash table by ID + +Complex data structures should be serialized into arrays + +The operation is executed immediately and synchronously + +All operations are logged for debugging purposes + + +
+
+Related Functions + + +dragonfly_db_fnc_hashSetId: Sets a field value in a specific hash table (when you need to specify the ID) + +dragonfly_db_fnc_hashGet: Retrieves a field value from the current client's hash table + +dragonfly_db_fnc_hashGetAll: Retrieves all fields from the current client's hash table + +dragonfly_db_fnc_hashSetBulk: Sets multiple fields in the current client's hash table + + +
+
+Links +Hash Get | Hash Get All | Hash Get All ID | Hash Get ID | Hash Set | Hash Set Bulk | Hash Set ID | Hash Set ID Bulk +
+
+
diff --git a/api/docbook/d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.xml b/api/docbook/d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.xml new file mode 100644 index 0000000..21c89bf --- /dev/null +++ b/api/docbook/d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.xml @@ -0,0 +1,109 @@ + +
+scheduler +scheduler +
+autotoc_md136 +title: ArmaDragonflyClient - Scheduler icon: mdi:file-text-outline +
+
+excerpt: Scheduled Environment for extension.
+
+dragonfly_db_fnc_scheduler
+Description +Manages the callback system for the ArmaDragonflyClient extension. This function receives task IDs from the extension's asynchronous callbacks, parses them, and registers them in a hashmap for later processing. It acts as the bridge between the extension's asynchronous operations and the game's execution environment. +
+
+Syntax +[_taskID] call dragonfly_db_fnc_scheduler + +
+
+Parameters + + + + + + + + + +Parameter + +Type + +Description + +Default + + + + +_taskID + +String + +Task identifier returned from extension callback + +"" + + + + + +
+
+Return Value +None. The function registers the task ID in a hashmap for later processing. +
+
+Examples
+Process a callback from the extension: +["1689524160123_get"] call dragonfly_db_fnc_scheduler; + +
+
+Forward a callback to the server: +["1689524160123_hgetall"] remoteExecCall ["dragonfly_db_fnc_scheduler", 2, false]; + +
+
+
+Notes + + +Parses the task ID to extract the timestamp and operation type + +Registers the task in a type-specific hashmap using the mission namespace + +Each operation type (get, hgetall, etc.) has its own hashmap for tracking + +The format of task IDs is typically: [timestamp]_[operation] + +This function is automatically called by the extension callback mechanism + +Creates hashmaps on demand if they don't already exist + +Critical for handling asynchronous database operations + + +
+
+Related Functions + + +dragonfly_db_fnc_fetch: Assembles data chunks for large datasets + +dragonfly_db_fnc_handler: Processes the data retrieved from database operations + +dragonfly_db_fnc_processQueue: Executes queued database operations + + +
+
+Links +Add Task | Handler | Init | Print Addon Name | Process Queue | Scheduler | Test +
+
+
diff --git a/api/docbook/d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.xml b/api/docbook/d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.xml new file mode 100644 index 0000000..268f241 --- /dev/null +++ b/api/docbook/d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.xml @@ -0,0 +1,122 @@ + +
+listRemove +listRemove +
+autotoc_md318 +title: ArmaDragonflyClient - List Remove icon: mdi:file-text-outline +
+
+excerpt: Remove an element from a list stored at a key in DragonflyClient.
+
+dragonfly_db_fnc_listRemove
+Description +Removes a specific element from a list stored at a specified key in the DragonflyClient database. This function allows for precise control over list content by targeting individual elements by their index, without affecting other elements in the list. This is particularly useful for removing outdated or no longer needed entries. +
+
+Syntax +[_key, _index] call dragonfly_db_fnc_listRemove + +
+
+Parameters + + + + + + + + + +Parameter + +Type + +Description + +Default + + + + +_key + +String + +The key identifying the list from which to remove an element + +"" + + + +_index + +Number + +The zero-based index of the element to remove from the list + +-1 + + + + + +
+
+Return Value +None. The operation runs synchronously to remove the element immediately. +
+
+Examples +Remove the first element from an event log: ["eventLog", 0] call dragonfly_db_fnc_listRemove; + + +Remove a specific player record: ["playerRecords", 5] call dragonfly_db_fnc_listRemove; + + +Remove an element from a multiplayer environment: ["sharedData", 2] remoteExecCall ["dragonfly_db_fnc_listRemove", 2, false]; + +
+
+Notes + + +This function removes only the element at the specified index. All other elements remain unchanged, though their indices may shift. + +The index is zero-based, meaning the first element is at index 0, the second at index 1, and so on. + +If an invalid index is provided (negative or exceeding the list length), the operation will not remove any elements. + +The _key parameter must be a non-empty string, otherwise the function will exit without performing any action. + +After removing an element, all subsequent elements shift down by one index to maintain a contiguous list. + +The removal operation is permanent and cannot be undone except by re-adding the element. + +All list operations are logged for debugging purposes. + + +
+
+Related Functions + + +dragonfly_db_fnc_listAdd: Adds an element to a list + +dragonfly_db_fnc_listGet: Retrieves a specific element from a list + +dragonfly_db_fnc_listLoad: Retrieves a range of elements from a list + +dragonfly_db_fnc_listSet: Replaces a specific element in a list + +dragonfly_db_fnc_scheduler: Processes the callback from the database extension + + +
+
+Links +List Add | List Get | List Load | List Remove | List Set +
+
+
diff --git a/api/docbook/d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.xml b/api/docbook/d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.xml new file mode 100644 index 0000000..b404a6c --- /dev/null +++ b/api/docbook/d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.xml @@ -0,0 +1,152 @@ + +
+hashGetAllId +hashGetAllId +
+autotoc_md191 +title: ArmaDragonflyClient - Hash Get All ID icon: mdi:file-text-outline +
+
+excerpt: Get all fields and values from the hash stored at key from DragonflyClient.
+
+dragonfly_db_fnc_hashGetAllId
+Description +Retrieves all fields and values from a specific hash table identified by its key. This function returns the complete hash table data for a specific ID through a callback function, allowing access to all stored key-value pairs associated with that ID. It's particularly useful for retrieving player-specific or entity-specific hash data. +
+
+Syntax +[_key, _function, _call, _netId] call dragonfly_db_fnc_hashGetAllId + +
+
+Parameters + + + + + + + + + +Parameter + +Type + +Description + +Default + + + + +_key + +String + +Identifier of the hash table to retrieve + +"" + + + +_function + +String + +Name of the function to receive the retrieved data + +"" + + + +_call + +Boolean + +Whether to call the function directly (true) or spawn (false) + +false + + + +_netId + +String + +(Optional) NetID of the player to receive the data + +"" + + + + + +
+
+Return Value +None. The retrieved data is passed to the specified callback function asynchronously. +
+
+Examples
+Retrieve a player's complete hash data: +[getPlayerUID player, "dragonfly_db_fnc_test"] call dragonfly_db_fnc_hashGetAllId; + +
+
+Retrieve vehicle data with synchronous callback: +["vehicle_123", "dragonfly_db_fnc_processVehicleData", true] call dragonfly_db_fnc_hashGetAllId; + +
+
+Retrieve data and send it to a specific client: +[getPlayerUID player, "dragonfly_db_fnc_test", false, netId player] remoteExecCall ["dragonfly_db_fnc_hashGetAllId", 2, false]; + +
+
+
+Notes + + +Returns the complete hash table with all fields and values as a nested array + +Both the key and callback function parameters are required and validated + +The data is retrieved asynchronously through the extension's callback system + +When a netId is provided, the data is sent to that specific client + +The _call parameter determines whether the function is called directly (synchronous) or spawned (asynchronous) + +This function retrieves from a specific hash table identified by _key - use hashGetAll for the global hash table + +Player UIDs are commonly used as keys to store player-specific data + +For large hash tables, retrieving all data may impact performance + +All operations are logged for debugging purposes + + +
+
+Related Functions + + +dragonfly_db_fnc_hashGetAll: Retrieves all fields from the global hash table + +dragonfly_db_fnc_hashGetId: Retrieves a specific field value from a specific hash table + +dragonfly_db_fnc_hashGet: Retrieves a specific field value from the global hash table + +dragonfly_db_fnc_hashSetId: Sets a field value in a specific hash table + +dragonfly_db_fnc_scheduler: Processes the callback from the database extension + + +
+
+Links +Hash Get | Hash Get All | Hash Get All ID | Hash Get ID | Hash Set | Hash Set Bulk | Hash Set ID | Hash Set ID Bulk +
+
+
diff --git a/api/docbook/d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.xml b/api/docbook/d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.xml new file mode 100644 index 0000000..9fbe59c --- /dev/null +++ b/api/docbook/d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.xml @@ -0,0 +1,162 @@ + +
+hashGetId +hashGetId +
+autotoc_md205 +title: ArmaDragonflyClient - Hash Get ID icon: mdi:file-text-outline +
+
+excerpt: Get the value associated with field in hash stored at key from DragonflyClient.
+
+dragonfly_db_fnc_hashGetId
+Description +Retrieves the value of a specific field from a hash table identified by its key. This function allows targeted access to individual fields within a specific hash table, making it ideal for accessing particular attributes of player or entity data. The retrieved data is returned through a callback function. +
+
+Syntax +[_key, _keyField, _function, _call, _netId] call dragonfly_db_fnc_hashGetId + +
+
+Parameters + + + + + + + + + +Parameter + +Type + +Description + +Default + + + + +_key + +String + +Identifier of the hash table + +"" + + + +_keyField + +String + +Name of the field in the hash to retrieve + +"" + + + +_function + +String + +Name of the function to receive the retrieved data + +"" + + + +_call + +Boolean + +Whether to call the function directly (true) or spawn (false) + +false + + + +_netId + +String + +(Optional) NetID of the player to receive the data + +"" + + + + + +
+
+Return Value +None. The retrieved data is passed to the specified callback function asynchronously. +
+
+Examples
+Retrieve a player's loadout field: +[getPlayerUID player, "loadout", "dragonfly_db_fnc_test"] call dragonfly_db_fnc_hashGetId; + +
+
+Retrieve a specific vehicle property with synchronous callback: +["vehicle_123", "fuel", "dragonfly_db_fnc_processFuelData", true] call dragonfly_db_fnc_hashGetId; + +
+
+Retrieve data and send it to a specific client: +[getPlayerUID player, "stats", "dragonfly_db_fnc_test", false, netId player] remoteExecCall ["dragonfly_db_fnc_hashGetId", 2, false]; + +
+
+
+Notes + + +Retrieves a single field value from a specific hash table + +All three primary parameters (key, keyField, and function) are required and validated + +The data is retrieved asynchronously through the extension's callback system + +When a netId is provided, the data is sent to that specific client + +The _call parameter determines whether the function is called directly (synchronous) or spawned (asynchronous) + +This function targets both a specific hash table (_key) and a specific field (_keyField) + +More efficient than retrieving all hash fields when only one is needed + +Player UIDs are commonly used as keys to store player-specific data + +All operations are logged for debugging purposes + + +
+
+Related Functions + + +dragonfly_db_fnc_hashGet: Retrieves a field value from the global hash table + +dragonfly_db_fnc_hashGetAllId: Retrieves all fields from a specific hash table + +dragonfly_db_fnc_hashGetAll: Retrieves all fields from the global hash table + +dragonfly_db_fnc_hashSetId: Sets a field value in a specific hash table + +dragonfly_db_fnc_scheduler: Processes the callback from the database extension + + +
+
+Links +Hash Get | Hash Get All | Hash Get All ID | Hash Get ID | Hash Set | Hash Set Bulk | Hash Set ID | Hash Set ID Bulk +
+
+
diff --git a/api/docbook/d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.xml b/api/docbook/d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.xml new file mode 100644 index 0000000..dc7b4ef --- /dev/null +++ b/api/docbook/d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.xml @@ -0,0 +1,132 @@ + +
+listSet +listSet +
+autotoc_md329 +title: ArmaDragonflyClient - List Set icon: mdi:file-text-outline +
+
+excerpt: Set an element in a list stored at a key in DragonflyClient.
+
+dragonfly_db_fnc_listSet
+Description +Updates or sets the value of a specific element at a given index in a list stored at a specified key in the DragonflyClient database. This function allows for precise modification of list contents by targeting individual elements without affecting other elements in the list. It is particularly useful for updating record information, modifying configuration data, or correcting entries. +
+
+Syntax +[_key, _index, _data] call dragonfly_db_fnc_listSet + +
+
+Parameters + + + + + + + + + +Parameter + +Type + +Description + +Default + + + + +_key + +String + +The key identifying the list in which to set an element + +"" + + + +_index + +Number + +The zero-based index of the element to set in the list + +-1 + + + +_data + +Array/String/Number/Boolean + +The value to set at the specified index + +[] + + + + + +
+
+Return Value +None. The operation runs synchronously to update the element immediately. +
+
+Examples +Update an event log entry: ["eventLog", 0, ["Updated event information"]] call dragonfly_db_fnc_listSet; + + +Modify player statistics: ["playerStats", 3, [name player, score player, alive player]] call dragonfly_db_fnc_listSet; + + +Update configuration in multiplayer: ["missionConfig", 1, ["difficulty", "veteran"]] remoteExecCall ["dragonfly_db_fnc_listSet", 2, false]; + +
+
+Notes + + +This function updates only the element at the specified index. All other elements remain unchanged. + +The index is zero-based, meaning the first element is at index 0, the second at index 1, and so on. + +If the specified index does not exist in the list, the operation may fail or have no effect. + +Both the _key parameter and _data parameter must be valid (non-empty string for key, non-nil for data), otherwise the function will exit without performing any action. + +The function supports various data types, including arrays, strings, numbers, and booleans. + +The update operation is permanent and will overwrite any previous value at the specified index. + +All list operations are logged for debugging purposes. + + +
+
+Related Functions + + +dragonfly_db_fnc_listAdd: Adds an element to a list + +dragonfly_db_fnc_listGet: Retrieves a specific element from a list + +dragonfly_db_fnc_listLoad: Retrieves a range of elements from a list + +dragonfly_db_fnc_listRemove: Removes a specific element from a list + +dragonfly_db_fnc_scheduler: Processes the callback from the database extension + + +
+
+Links +List Add | List Get | List Load | List Remove | List Set +
+
+
diff --git a/api/docbook/d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.xml b/api/docbook/d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.xml new file mode 100644 index 0000000..8ec8f11 --- /dev/null +++ b/api/docbook/d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.xml @@ -0,0 +1,62 @@ + +
+save +save +
+autotoc_md40 +title: ArmaDragonflyClient - Save DB icon: mdi:file-text-outline +
+
+excerpt: Save DB to disc.
+
+dragonfly_db_fnc_save
+Description +Saves the entire database to disk storage. This function persists all data (key-value pairs, hash tables, and lists) to a file, allowing it to be retrieved later even after server restart. +
+
+Syntax +[] call dragonfly_db_fnc_save + +
+
+Parameters +None. The function saves the database without any parameters. +
+
+Return Value +None. The operation runs synchronously and saves the database immediately. +
+
+Examples
+Save the database without creating a backup: +[] call dragonfly_db_fnc_save; + +
+
+Call the save function remotely from a client: +[] remoteExecCall ["dragonfly_db_fnc_save", 2, false]; + +
+
+
+Notes + + +This function should be called periodically to ensure data persistence + +Saving is a resource-intensive operation, so it shouldn't be called too frequently + +Consider saving before mission end or during low-activity periods + + +
+
+Related Functions +None. +
+
+Links +None. +
+
+
diff --git a/api/docbook/d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.xml b/api/docbook/d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.xml new file mode 100644 index 0000000..6a2cc28 --- /dev/null +++ b/api/docbook/d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.xml @@ -0,0 +1,124 @@ + +
+get +get +
+autotoc_md23 +title: ArmaDragonflyClient - Get Key icon: mdi:file-text-outline +
+
+excerpt: Get the value of stored key from DragonflyClient.
+
+dragonfly_db_fnc_get
+Description +Retrieves the value of a stored key from the database. This function performs an asynchronous request to the database and passes the retrieved data to the specified callback function. +
+
+Syntax +[_key, _function, _call, _netId] call dragonfly_db_fnc_get + +
+
+Parameters + + + + + + + + +Parameter + +Type + +Description + + + + +_key + +String + +Name of the stored key to retrieve from the database + + + +_function + +String + +Name of the function to call when data is retrieved + + + +_call + +Boolean + +Whether to call the function directly (true) or spawn (false) + + + +_netId + +String + +(Optional) NetID of the player to whom the data should be returned + + + + + +
+
+Return Value +None. When data is retrieved, it will be passed to the specified function. The operation runs asynchronously. +
+
+Examples
+Retrieve data in singleplayer or on the server: +[getPlayerUID player, "dragonfly_db_fnc_test"] call dragonfly_db_fnc_get; + +
+
+Retrieve data on the server and send to a specific client: +[getPlayerUID player, "dragonfly_db_fnc_test", false, netId player] remoteExecCall ["dragonfly_db_fnc_get", 2, false]; + +
+
+
+Notes + + +The function exit with an error if the key or function parameters are empty + +Data is processed through the scheduler system, which manages callback responses + +For large data that exceeds buffer limits, it will be automatically chunked and reassembled + +The callback function must be defined to accept the retrieved data + +The _call parameter determines whether the callback is executed directly or spawned in a separate thread + + +
+
+Related Functions + + +dragonfly_db_fnc_set: Stores a value by key + +dragonfly_db_fnc_delete: Removes a value by key + +dragonfly_db_fnc_scheduler: Processes the callback response + + +
+
+Links +Delete Key | Get Key | Set Key +
+
+
diff --git a/api/docbook/d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.xml b/api/docbook/d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.xml new file mode 100644 index 0000000..3167698 --- /dev/null +++ b/api/docbook/d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.xml @@ -0,0 +1,162 @@ + +
+listGet +listGet +
+autotoc_md293 +title: ArmaDragonflyClient - List Get icon: mdi:file-text-outline +
+
+excerpt: Get element of list stored at key from DragonflyClient.
+
+dragonfly_db_fnc_listGet
+Description +Retrieves a specific element from a list stored in the database by its index. This function accesses a single item from a list using its position number and returns the data through a callback function. It's useful for accessing individual pieces of data from a sequence without retrieving the entire list. +
+
+Syntax +[_key, _index, _function, _call, _netId] call dragonfly_db_fnc_listGet + +
+
+Parameters + + + + + + + + + +Parameter + +Type + +Description + +Default + + + + +_key + +String + +Name of the list + +"" + + + +_index + +Number + +Index position of the element to retrieve (0-based) + +-1 + + + +_function + +String + +Name of the function to receive the retrieved data + +"" + + + +_call + +Boolean + +Whether to call the function directly (true) or spawn (false) + +false + + + +_netId + +String + +(Optional) NetID of the player to receive the data + +"" + + + + + +
+
+Return Value +None. The retrieved data is passed to the specified callback function asynchronously. +
+
+Examples
+Retrieve a specific event log entry: +["events", 0, "dragonfly_db_fnc_test"] call dragonfly_db_fnc_listGet; + +
+
+Retrieve data with synchronous callback: +["messages", 5, "dragonfly_db_fnc_processMessage", true] call dragonfly_db_fnc_listGet; + +
+
+Retrieve data and send it to a specific client: +["notifications", 0, "dragonfly_db_fnc_displayNotification", false, netId player] remoteExecCall ["dragonfly_db_fnc_listGet", 2, false]; + +
+
+
+Notes + + +Retrieves a single element from a list by its index position + +The key, index, and function parameters are required and validated + +Index is zero-based (the first element is at index 0) + +If the index is out of bounds or the list doesn't exist, no data will be returned + +The data is retrieved asynchronously through the extension's callback system + +When a netId is provided, the data is sent to that specific client + +The _call parameter determines whether the function is called directly (synchronous) or spawned (asynchronous) + +For retrieving multiple elements, use listLoad instead + +All operations are logged for debugging purposes + + +
+
+Related Functions + + +dragonfly_db_fnc_listAdd: Adds an element to a list + +dragonfly_db_fnc_listLoad: Retrieves a range of elements from a list + +dragonfly_db_fnc_listSet: Replaces a specific element in a list + +dragonfly_db_fnc_listRemove: Removes a specific element from a list + +dragonfly_db_fnc_scheduler: Processes the callback from the database extension + + +
+
+Links +List Add | List Get | List Load | List Remove | List Set +
+
+
diff --git a/api/docbook/d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.xml b/api/docbook/d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.xml new file mode 100644 index 0000000..9b32479 --- /dev/null +++ b/api/docbook/d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.xml @@ -0,0 +1,150 @@ + +
+handler +handler +
+autotoc_md81 +title: ArmaDragonflyClient - Handler icon: mdi:file-text-outline +
+
+excerpt: Handle data from DB.
+
+dragonfly_db_fnc_handler
+Description +Handles data received from the database and routes it to the appropriate function. This function is a critical component of the callback system, receiving data from database operations and directing it to the specified function, either locally or to a remote client. +
+
+Syntax +[_uniqueID, _function, _call, _data, _netId] call dragonfly_db_fnc_handler + +
+
+Parameters + + + + + + + + + +Parameter + +Type + +Description + +Default + + + + +_uniqueID + +String + +Unique identifier for the data chunk + +"" + + + +_function + +String + +Name of function to receive the data + +"" + + + +_call + +Boolean + +Whether to call the function directly (true) or spawn (false) + +false + + + +_data + +Array, String, Number, or Boolean + +The data retrieved from the database + +[] + + + +_netId + +String + +(Optional) NetID of the player to receive the data + +nil + + + + + +
+
+Return Value +None. The data is passed to the specified function for processing. +
+
+Examples
+Process data locally: +["0123456789", "dragonfly_db_fnc_test", false, ["Hello World!"]] call dragonfly_db_fnc_handler; + +
+
+Send data to a specific client: +["0123456789", "dragonfly_db_fnc_test", false, ["Hello World!"], netId player] remoteExecCall ["dragonfly_db_fnc_handler", 2, false]; + +
+
+Process data with direct call (synchronous): +["0123456789", "dragonfly_db_fnc_processInventory", true, [["weapon1", 30], ["item2", 5]]] call dragonfly_db_fnc_handler; + +
+
+
+Notes + + +The function validates that both the function name and data are valid before proceeding + +When a netId is provided, the data is sent to that specific client using remoteExec + +The _call parameter determines whether the function is called directly (synchronous) or spawned (asynchronous) + +This function is typically called by the scheduler or other core components rather than directly by user code + +Each handler call is logged, which is useful for debugging data flow + + +
+
+Related Functions + + +dragonfly_db_fnc_scheduler: Processes callbacks from the database extension + +dragonfly_db_fnc_fetch: Assembles data chunks for large datasets + +dragonfly_db_fnc_addTask: Adds tasks to the database operation queue + + +
+
+Links +Add Task | Handler | Init | Print Addon Name | Process Queue | Scheduler | Test +
+
+
diff --git a/api/docbook/d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.xml b/api/docbook/d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.xml new file mode 100644 index 0000000..522772d --- /dev/null +++ b/api/docbook/d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.xml @@ -0,0 +1,70 @@ + +
+printAddonName +printAddonName +
+autotoc_md106 +title: ArmaDragonflyClient - Print Addon Name icon: mdi:file-text-outline +
+
+excerpt: Displays the addon name in system chat.
+
+dragonfly_db_fnc_printAddonName
+Description +Displays a thank you message with the addon name in the system chat. This is a simple utility function that can be used to acknowledge the use of the framework or to verify that the addon is properly loaded. +
+
+Syntax +[] call dragonfly_db_fnc_printAddonName + +
+
+Parameters +None. This function does not require any parameters. +
+
+Return Value +None. The function outputs a message to the system chat. +
+
+Examples
+Display the addon name message: +[] call dragonfly_db_fnc_printAddonName; + +
+
+Use in a welcome script: +if (isServer) then { + [] remoteExec ["dragonfly_db_fnc_printAddonName", 0, true]; +}; + +
+
+
+Notes + + +The function uses the ADDON macro defined in script_component.hpp + +This displays a message directly in the player's system chat + +Can be useful as a quick verification that the addon is loaded correctly + +Often used during development or for first-time users + + +
+
+Related Functions + + +dragonfly_db_fnc_init: Initializes the database system + + +
+
+Links +Add Task | Handler | Init | Print Addon Name | Process Queue | Scheduler | Test +
+
+
diff --git a/api/docbook/d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.xml b/api/docbook/d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.xml new file mode 100644 index 0000000..f824e46 --- /dev/null +++ b/api/docbook/d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.xml @@ -0,0 +1,140 @@ + +
+fetch +fetch +
+autotoc_md13 +title: ArmaDragonflyClient - Fetch icon: mdi:file-text-outline +
+
+excerpt: Handles data chunks received from the database extension when data is too large to be returned in a single callback.
+
+dragonfly_db_fnc_fetch
+Description +Handles data chunks received from the database extension when data is too large to be returned in a single callback. This function collects all chunks of data, reassembles them in the correct order, and then passes the complete data to the handler function. +
+
+Syntax +[_uniqueID, _function, _index, _total, _datachunk, _call, _netId] call dragonfly_db_fnc_fetch + +
+
+Parameters + + + + + + + + +Parameter + +Type + +Description + + + + +_uniqueID + +String + +Unique identifier for this data fetch operation + + + +_function + +String + +Name of the function to call after data is assembled + + + +_index + +Number + +Current chunk index (0-based) + + + +_total + +Number + +Total number of chunks expected + + + +_datachunk + +String + +The chunk of data being received + + + +_call + +Boolean + +Whether to call the function directly (true) or spawn (false) + + + +_netId + +String + +(Optional) NetID of the player to whom the data belongs + + + + + +
+
+Return Value +None. When all chunks are received, the function will: + +Assemble the complete data string + +Parse it as a simple array + +Call the specified handler function with the parsed data + + +
+
+Examples +This function is typically not called directly but is triggered by the extension's callback mechanism when large datasets are retrieved. +
+
+Notes + + +The function stores received chunks in the global array dragonfly_db_fetch_array + +Chunks are sorted by their index to ensure correct assembly regardless of arrival order + +After successful processing, the chunks for this uniqueID are removed from the array + +This function is essential for handling large datasets that exceed the callback buffer limit + + +
+
+Related Functions + + +dragonfly_db_fnc_handler: Receives the assembled data and routes it to the appropriate function + +dragonfly_db_fnc_scheduler: Manages the callback queue and triggers data fetching + + +
+
+
diff --git a/api/docbook/d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.xml b/api/docbook/d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.xml new file mode 100644 index 0000000..8c1beba --- /dev/null +++ b/api/docbook/d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.xml @@ -0,0 +1,140 @@ + +
+hashSetId +hashSetId +
+autotoc_md247 +title: ArmaDragonflyClient - Hash Set ID icon: mdi:file-text-outline +
+
+excerpt: Set the specified field to the respective value in the hash stored at key from DragonflyClient.
+
+dragonfly_db_fnc_hashSetId
+Description +Sets the value of a specified field in a specific hash table identified by its key. This function allows storing various data types (arrays, strings, numbers, or booleans) in a targeted hash table, making it ideal for player-specific or entity-specific data storage. It provides a way to organize related data under a common identifier. +
+
+Syntax +[_key, _keyField, _data] call dragonfly_db_fnc_hashSetId + +
+
+Parameters + + + + + + + + + +Parameter + +Type + +Description + +Default + + + + +_key + +String + +Identifier of the hash table + +"" + + + +_keyField + +String + +Name of the field in the hash to set + +"" + + + +_data + +Array, String, Number, or Boolean + +The value to store in the hash field + +[] + + + + + +
+
+Return Value +None. The operation runs synchronously to store the data. +
+
+Examples
+Store a player's loadout under their UID: +[getPlayerUID player, "loadout", [getUnitLoadout player]] call dragonfly_db_fnc_hashSetId; + +
+
+Store vehicle data: +["vehicle_123", "status", [true, 100, 75, "active"]] call dragonfly_db_fnc_hashSetId; + +
+
+Store player data from a client: +[getPlayerUID player, "stats", [rank player, score player, name player]] remoteExecCall ["dragonfly_db_fnc_hashSetId", 2, false]; + +
+
+
+Notes + + +Stores a single field-value pair in a specific hash table identified by _key + +All three parameters (key, keyField, and data) are required and validated + +If the hash table doesn't exist, it will be created automatically + +If the field already exists in the hash table, its value will be overwritten + +Supports various data types: arrays, strings, numbers, and booleans + +Player UIDs are commonly used as keys to store player-specific data + +Complex data structures should be serialized into arrays + +The operation is executed immediately and synchronously + +All operations are logged for debugging purposes + + +
+
+Related Functions + + +dragonfly_db_fnc_hashSet: Sets a field value in the global hash table + +dragonfly_db_fnc_hashGetId: Retrieves a field value from a specific hash table + +dragonfly_db_fnc_hashGetAllId: Retrieves all fields from a specific hash table + +dragonfly_db_fnc_hashSetIdBulk: Sets multiple field-value pairs in multiple hash tables + + +
+
+Links +Hash Get | Hash Get All | Hash Get All ID | Hash Get ID | Hash Set | Hash Set Bulk | Hash Set ID | Hash Set ID Bulk +
+
+
diff --git a/api/docbook/d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.xml b/api/docbook/d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.xml new file mode 100644 index 0000000..45d806e --- /dev/null +++ b/api/docbook/d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.xml @@ -0,0 +1,112 @@ + +
+test +test +
+autotoc_md149 +title: ArmaDragonflyClient - Test icon: mdi:file-text-outline +
+
+excerpt: Test Function.
+
+dragonfly_db_fnc_test
+Description +A simple test function for verifying database operations. This function displays the received data in a hint message and logs it to the RPT file. It's primarily used for testing database retrieval operations and callback functionality. +
+
+Syntax +[_value] spawn dragonfly_db_fnc_test + +
+
+Parameters + + + + + + + + + +Parameter + +Type + +Description + +Default + + + + +_value + +Array, String, Number, or Boolean + +The value to display and log + +[] + + + + + +
+
+Return Value +The same value that was passed to the function. Also sets the global variable dragonfly_db_test to this value. +
+
+Examples
+Test with a simple string: +["Hello World!"] spawn dragonfly_db_fnc_test; + +
+
+Test database retrieval by specifying this as callback function: +["playerStats", "dragonfly_db_fnc_test"] call dragonfly_db_fnc_get; + +
+
+Test from client to server: +["Database is working!"] remoteExec ["dragonfly_db_fnc_test", 2, false]; + +
+
+
+Notes + + +Displays the received value using hint + +Logs the same value to the RPT file + +Stores the value in the global variable dragonfly_db_test for later inspection + +Commonly used as a callback function for database operations + +Useful for debugging and verifying data flow + +Can be called directly or specified as a callback in other functions + + +
+
+Related Functions + + +dragonfly_db_fnc_get: Retrieves values from the database + +dragonfly_db_fnc_handler: Routes data to callback functions + +dragonfly_db_fnc_scheduler: Manages the callback system + + +
+
+Links +Add Task | Handler | Init | Print Addon Name | Process Queue | Scheduler | Test +
+
+
diff --git a/api/docbook/d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.xml b/api/docbook/d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.xml new file mode 100644 index 0000000..dc3b707 --- /dev/null +++ b/api/docbook/d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.xml @@ -0,0 +1,120 @@ + +
+set +set +
+autotoc_md53 +title: ArmaDragonflyClient - Set Key icon: mdi:file-text-outline +
+
+excerpt: Set the value of stored key from DragonflyClient.
+
+dragonfly_db_fnc_set
+Description +Stores a value in the database with the specified key. This function allows saving various data types (arrays, strings, numbers, or booleans) that can be retrieved later using the key. +
+
+Syntax +[_key, _data] call dragonfly_db_fnc_set + +
+
+Parameters + + + + + + + + + +Parameter + +Type + +Description + +Default + + + + +_key + +String + +Name of the key to store the data under + +"" + + + +_data + +Array, String, Number, or Boolean + +The value to store in the database + +[] + + + + + +
+
+Return Value +None. The operation runs asynchronously. +
+
+Examples
+Store a simple array: +["playerInventory", ["item1", "item2", "item3"]] call dragonfly_db_fnc_set; + +
+
+Store player data under their UID: +[getPlayerUID player, [name player, getPos player, getAllGear player]] call dragonfly_db_fnc_set; + +
+
+Call the set function remotely from a client: +["serverSetting", [true, 30, "normal"]] remoteExecCall ["dragonfly_db_fnc_set", 2, false]; + +
+
+
+Notes + + +The function validates both the key and data before attempting to store + +If the key already exists, its value will be overwritten + +Complex data structures should be serialized into arrays + +There are no size limits for data, but extremely large values might impact performance + +For structured data, consider using hash tables instead of key-value pairs + + +
+
+Related Functions + + +dragonfly_db_fnc_get: Retrieves a value by key + +dragonfly_db_fnc_delete: Removes a value by key + +dragonfly_db_fnc_scheduler: Processes the callback response + + +
+
+Links +Delete Key | Get Key | Set Key +
+
+
diff --git a/api/docbook/d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.xml b/api/docbook/d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.xml new file mode 100644 index 0000000..db96392 --- /dev/null +++ b/api/docbook/d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.xml @@ -0,0 +1,142 @@ + +
+listLoad +listLoad +
+autotoc_md307 +title: ArmaDragonflyClient - List Load icon: mdi:file-text-outline +
+
+excerpt: Get all elements of a list stored at a key from DragonflyClient.
+
+dragonfly_db_fnc_listLoad
+Description +Retrieves all elements of a list stored at a specified key from the DragonflyClient database. This function is useful when you need to access the complete list data rather than individual elements, allowing operations on the entire dataset. The retrieved data is passed to a callback function for processing. +
+
+Syntax +[_key, _function, _call, _netId] call dragonfly_db_fnc_listLoad + +
+
+Parameters + + + + + + + + + +Parameter + +Type + +Description + +Default + + + + +_key + +String + +The key identifying the list to be retrieved + +"" + + + +_function + +String + +The name of the function that will receive the retrieved data + +"" + + + +_call + +Boolean + +Whether to call the function in an unscheduled environment + +false + + + +_netId + +String + +The NetID of the target to return data from the function (multiplayer only) + +"" + + + + + +
+
+Return Value +No value is returned directly. The retrieved list data is passed to the specified callback function asynchronously. +
+
+Examples +Retrieve all event logs: ["events", "myProject_fnc_processEventLogs"] call dragonfly_db_fnc_listLoad; + + +Retrieve a player list with synchronous callback: ["playerList", "myProject_fnc_processPlayerList", true] call dragonfly_db_fnc_listLoad; + + +Send mission data to a specific client: ["missionData", "myProject_fnc_processMissionData", false, netId player] remoteExecCall ["dragonfly_db_fnc_listLoad", 2, false]; + +
+
+Notes + + +This function retrieves the entire list stored at the specified key, making it useful when you need to process multiple elements together. + +Both the _key and _function parameters are required. The function will exit without action if either is empty. + +The retrieved data is processed asynchronously through the scheduler system and passed to the specified callback function. + +For multiplayer scenarios, you can specify a target client using the _netId parameter to send the retrieved data to that specific client. + +The _call parameter determines whether the callback function is executed in an unscheduled environment (true) or scheduled environment (false). + +This function uses the underlying "listrng" extension with a range from 0 to -1, which retrieves all elements in the list. + +All list operations are logged for debugging purposes. + + +
+
+Related Functions + + +dragonfly_db_fnc_listAdd: Adds an element to a list + +dragonfly_db_fnc_listGet: Retrieves a specific element from a list + +dragonfly_db_fnc_listSet: Replaces a specific element in a list + +dragonfly_db_fnc_listRemove: Removes a specific element from a list + +dragonfly_db_fnc_scheduler: Processes the callback from the database extension + + +
+
+Links +List Add | List Get | List Load | List Remove | List Set +
+
+
diff --git a/api/docbook/d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.xml b/api/docbook/d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.xml new file mode 100644 index 0000000..74349c7 --- /dev/null +++ b/api/docbook/d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.xml @@ -0,0 +1,152 @@ + +
+hashGet +hashGet +
+autotoc_md163 +title: ArmaDragonflyClient - Hash Get icon: mdi:file-text-outline +
+
+excerpt: Get a field value from the current client's hash table in DragonflyClient.
+
+dragonfly_db_fnc_hashGet
+Description +Retrieves the value associated with a specific field in the hash table of the current client/player. This function automatically determines the appropriate hash ID based on the caller's identity, making it more convenient than hashGetId which requires manually specifying an ID. It accesses hash data asynchronously and returns the result through a callback function. +
+
+Syntax +[_keyField, _function, _call, _netId] call dragonfly_db_fnc_hashGet + +
+
+Parameters + + + + + + + + + +Parameter + +Type + +Description + +Default + + + + +_keyField + +String + +Name of the field in the hash to retrieve + +"" + + + +_function + +String + +Name of the function to receive the retrieved data + +"" + + + +_call + +Boolean + +Whether to call the function directly (true) or spawn (false) + +false + + + +_netId + +String + +(Optional) NetID of the player to receive the data + +"" + + + + + +
+
+Return Value +None. The retrieved data is passed to the specified callback function asynchronously. +
+
+Examples
+Retrieve a player's loadout: +["loadout", "dragonfly_db_fnc_test"] call dragonfly_db_fnc_hashGet; + +
+
+Retrieve data with synchronous callback: +["playerScore", "dragonfly_db_fnc_processScore", true] call dragonfly_db_fnc_hashGet; + +
+
+Retrieve data and send it to a specific client: +["loadout", "dragonfly_db_fnc_test", false, netId player] remoteExecCall ["dragonfly_db_fnc_hashGet", 2, false]; + +
+
+
+Notes + + +Retrieves a value from the current client's hash table + +The data is retrieved asynchronously through the extension's callback system + +Both the field name and callback function name must be provided + +Input validation ensures both required parameters are non-empty + +When a netId is provided, the data is sent to that specific client + +The _call parameter determines whether the function is called directly (synchronous) or spawned (asynchronous) + +This function automatically determines which hash table to use based on the caller's identity + +Use hashGetId when you need to specify a particular hash table by ID + +All operations are logged for debugging purposes + + +
+
+Related Functions + + +dragonfly_db_fnc_hashGetId: Retrieves a field value from a specific hash table (when you need to specify the ID) + +dragonfly_db_fnc_hashGetAll: Retrieves all fields from the current client's hash table + +dragonfly_db_fnc_hashGetAllId: Retrieves all fields from a specific hash table + +dragonfly_db_fnc_hashSet: Sets a field value in the current client's hash table + +dragonfly_db_fnc_scheduler: Processes the callback from the database extension + + +
+
+Links +Hash Get | Hash Get All | Hash Get All ID | Hash Get ID | Hash Set | Hash Set Bulk | Hash Set ID | Hash Set ID Bulk +
+
+
diff --git a/api/docbook/da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.xml b/api/docbook/da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.xml new file mode 100644 index 0000000..ed51968 --- /dev/null +++ b/api/docbook/da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.xml @@ -0,0 +1,142 @@ + +
+hashGetAll +hashGetAll +
+autotoc_md177 +title: ArmaDragonflyClient - Hash Get All icon: mdi:file-text-outline +
+
+excerpt: Get all fields from the current client's hash table in DragonflyClient.
+
+dragonfly_db_fnc_hashGetAll
+Description +Retrieves all fields and values from the hash table associated with the current client/player. This function automatically determines the appropriate hash ID based on the caller's identity, making it more convenient than hashGetAllId which requires manually specifying an ID. It returns the entire hash table data through a callback function, allowing access to all stored key-value pairs at once. +
+
+Syntax +[_function, _call, _netId] call dragonfly_db_fnc_hashGetAll + +
+
+Parameters + + + + + + + + + +Parameter + +Type + +Description + +Default + + + + +_function + +String + +Name of the function to receive the retrieved data + +"" + + + +_call + +Boolean + +Whether to call the function directly (true) or spawn (false) + +false + + + +_netId + +String + +(Optional) NetID of the player to receive the data + +"" + + + + + +
+
+Return Value +None. The retrieved data is passed to the specified callback function asynchronously. +
+
+Examples
+Retrieve all client hash data: +["dragonfly_db_fnc_test"] call dragonfly_db_fnc_hashGetAll; + +
+
+Retrieve data with synchronous callback: +["dragonfly_db_fnc_processAllData", true] call dragonfly_db_fnc_hashGetAll; + +
+
+Retrieve data and send it to a specific client: +["dragonfly_db_fnc_test", false, netId player] remoteExecCall ["dragonfly_db_fnc_hashGetAll", 2, false]; + +
+
+
+Notes + + +Returns the complete hash table for the current client with all fields and values as a nested array + +The data is retrieved asynchronously through the extension's callback system + +The callback function name must be provided and is validated + +When a netId is provided, the data is sent to that specific client + +The _call parameter determines whether the function is called directly (synchronous) or spawned (asynchronous) + +This function automatically determines which hash table to use based on the caller's identity + +Use hashGetAllId when you need to specify a particular hash table by ID + +For large hash tables, retrieving all data may impact performance + +All operations are logged for debugging purposes + + +
+
+Related Functions + + +dragonfly_db_fnc_hashGet: Retrieves a specific field value from the current client's hash table + +dragonfly_db_fnc_hashGetId: Retrieves a specific field value from a specific hash table (when you need to specify the ID) + +dragonfly_db_fnc_hashGetAllId: Retrieves all fields from a specific hash table (when you need to specify the ID) + +dragonfly_db_fnc_hashSet: Sets a field value in the current client's hash table + +dragonfly_db_fnc_scheduler: Processes the callback from the database extension + + +
+
+Links +Hash Get | Hash Get All | Hash Get All ID | Hash Get ID | Hash Set | Hash Set Bulk | Hash Set ID | Hash Set ID Bulk +
+
+
diff --git a/api/docbook/da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.xml b/api/docbook/da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.xml new file mode 100644 index 0000000..2d955e0 --- /dev/null +++ b/api/docbook/da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.xml @@ -0,0 +1,130 @@ + +
+listAdd +listAdd +
+autotoc_md279 +title: ArmaDragonflyClient - List Add icon: mdi:file-text-outline +
+
+excerpt: Add element to list stored at key from DragonflyClient.
+
+dragonfly_db_fnc_listAdd
+Description +Adds an element to a list stored in the database under the specified key. This function appends values to an existing list or creates a new list if it doesn't exist. It's particularly useful for logging, event tracking, or maintaining collections of data that grow over time. +
+
+Syntax +[_key, _data] call dragonfly_db_fnc_listAdd + +
+
+Parameters + + + + + + + + + +Parameter + +Type + +Description + +Default + + + + +_key + +String + +Name of the list to add the element to + +"" + + + +_data + +Array, String, Number, or Boolean + +The value to insert into the list + +[] + + + + + +
+
+Return Value +None. The operation runs synchronously to add the element to the list. +
+
+Examples
+Add an event log entry: +["events", ["Server state saved to DB " + systemTimeUTC]] call dragonfly_db_fnc_listAdd; + +
+
+Add a player message: +["messages", [name player + ": " + _messageText]] call dragonfly_db_fnc_listAdd; + +
+
+Add data from a client: +["playerActions", [getPlayerUID player, name player, "logged in"]] remoteExecCall ["dragonfly_db_fnc_listAdd", 2, false]; + +
+
+
+Notes + + +Elements are added to the end of the list in the order they are inserted + +If the list doesn't exist, it will be created automatically + +Both the key and data parameters are required and validated + +Lists can store various data types (arrays, strings, numbers, or booleans) + +Useful for maintaining a history of events, logs, or sequential data + +The operation is executed immediately and synchronously + +New elements are always added to the end of the list + +All operations are logged for debugging purposes + + +
+
+Related Functions + + +dragonfly_db_fnc_listGet: Retrieves a specific element from a list + +dragonfly_db_fnc_listLoad: Retrieves a range of elements from a list + +dragonfly_db_fnc_listSet: Replaces a specific element in a list + +dragonfly_db_fnc_listRemove: Removes a specific element from a list + +dragonfly_db_fnc_scheduler: Processes the callback from the database extension + + +
+
+Links +List Add | List Get | List Load | List Remove | List Set +
+
+
diff --git a/api/docbook/da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.xml b/api/docbook/da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.xml new file mode 100644 index 0000000..1f308c6 --- /dev/null +++ b/api/docbook/da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.xml @@ -0,0 +1,122 @@ + +
+hashSetBulk +hashSetBulk +
+autotoc_md233 +title: ArmaDragonflyClient - Hash Set Bulk icon: mdi:file-text-outline +
+
+excerpt: Set multiple fields in the current client's hash table in DragonflyClient.
+
+dragonfly_db_fnc_hashSetBulk
+Description +Sets multiple field-value pairs in the hash table associated with the current client/player in a single operation. This function automatically determines the appropriate hash ID based on the caller's identity, making it more convenient than hashSetIdBulk which requires manually specifying an ID. It allows efficiently storing multiple related fields at once, reducing the number of separate database calls required. +
+
+Syntax +[_data] call dragonfly_db_fnc_hashSetBulk + +
+
+Parameters + + + + + + + + + +Parameter + +Type + +Description + +Default + + + + +_data + +Array + +Array of alternating field names and values to store + +[] + + + + + +
+
+Return Value +None. The operation runs synchronously to store all the data. +
+
+Examples
+Store player loadout and position: +[["loadout", [getUnitLoadout player], "position", [getPosASLVisual player]]] call dragonfly_db_fnc_hashSetBulk; + +
+
+Store multiple player settings: +[["difficulty", ["regular"], "respawn", [true], "tickets", [500]]] call dragonfly_db_fnc_hashSetBulk; + +
+
+Store player data from a client: +[["name", [name player], "uid", [getPlayerUID player], "score", [score player]]] remoteExecCall ["dragonfly_db_fnc_hashSetBulk", 2, false]; + +
+
+
+Notes + + +The data array must be structured as alternating field names and values: [field1, value1, field2, value2, ...] + +Each field name must be a string + +Values can be arrays, strings, numbers, or booleans + +All field-value pairs are stored in a single database operation + +If any of the fields already exist, their values will be overwritten + +This function automatically determines which hash table to use based on the caller's identity + +Use hashSetIdBulk when you need to specify a particular hash table by ID + +More efficient than multiple individual hashSet calls when setting several fields + +The operation is executed immediately and synchronously + +All operations are logged for debugging purposes + + +
+
+Related Functions + + +dragonfly_db_fnc_hashSet: Sets a single field value in the current client's hash table + +dragonfly_db_fnc_hashSetIdBulk: Sets multiple field-value pairs in a specific hash table (when you need to specify the ID) + +dragonfly_db_fnc_hashGetAll: Retrieves all fields from the current client's hash table + +dragonfly_db_fnc_hashGet: Retrieves a specific field value from the current client's hash table + + +
+
+Links +Hash Get | Hash Get All | Hash Get All ID | Hash Get ID | Hash Set | Hash Set Bulk | Hash Set ID | Hash Set ID Bulk +
+
+
diff --git a/api/docbook/dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.xml b/api/docbook/dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.xml new file mode 100644 index 0000000..cd2af7a --- /dev/null +++ b/api/docbook/dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.xml @@ -0,0 +1,62 @@ + +
+init +init +
+autotoc_md95 +title: ArmaDragonflyClient - Initialization icon: mdi:file-text-outline +
+
+excerpt: Initial Extension settings.
+
+dragonfly_db_fnc_init
+Description +Initializes the ArmaDragonflyClient extension and sets up the initial settings. This function loads the extension, checks its version, sets the buffer size, and logs the initialization status. It is automatically called during mission startup. +
+
+Syntax +// This function is automatically called during initialization and doesn't need to be called directly + +
+
+Parameters +None. This function does not require any parameters. +
+
+Return Value +None. The function sets up internal variables and logs initialization information. +
+
+Examples +This function is automatically executed during framework initialization and doesn't need to be called manually. +
+
+Notes + + +Sets the global buffer size to 10240 bytes (10KB) + +Logs the DLL version number for reference + +Confirms successful loading of all functions + +Outputs initialization status to the RPT logs + +This is one of the first functions called when the framework loads + + +
+
+Related Functions + + +dragonfly_db_fnc_save: Saves database data to disk + + +
+
+Links +Add Task | Handler | Init | Print Addon Name | Process Queue | Scheduler | Test +
+
+
diff --git a/api/docbook/dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.xml b/api/docbook/dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.xml new file mode 100644 index 0000000..f8f9993 --- /dev/null +++ b/api/docbook/dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.xml @@ -0,0 +1,180 @@ + +
+addTask +addTask +
+autotoc_md67 +title: ArmaDragonflyClient - Add Task icon: mdi:file-text-outline +
+
+excerpt: Add task to queue.
+
+dragonfly_db_fnc_addTask
+Description +Adds a task to the database operation queue. This function is used to schedule database operations that can be processed sequentially, providing a way to manage multiple database requests in an organized manner. +
+
+Syntax +[_taskType, _key, _keyField, _index, _value, _function, _call, _netId] call dragonfly_db_fnc_addTask + +
+
+Parameters + + + + + + + + + +Parameter + +Type + +Description + +Default + + + + +_taskType + +String + +Type of operation to perform (e.g., "hgetall") + +"" + + + +_key + +String + +Name of the stored key + +"" + + + +_keyField + +String + +Field name for hash operations + +"" + + + +_index + +Number + +Index for list operations + +-1 + + + +_value + +Array, String, Number, or Boolean + +Value to store (for set operations) + +[] + + + +_function + +String + +Name of function to call with the result + +"" + + + +_call + +Boolean + +Whether to call the function directly (true) or spawn (false) + +false + + + +_netId + +String + +NetID of the target to receive the result + +"" + + + + + +
+
+Return Value +None. The task is added to the queue and processed asynchronously. +
+
+Examples
+Add a hash table retrieval task: +["hgetall", "", "", -1, [], "dragonfly_db_fnc_test"] call dragonfly_db_fnc_addTask; + +
+
+Add a player-specific task that returns data to a specific client: +["hgetallid", getPlayerUID player, "", -1, [], "dragonfly_db_fnc_test", false, netId player] remoteExecCall ["dragonfly_db_fnc_addTask", 2, false]; + +
+
+Add a list operation task: +["listadd", "playerMessages", "", -1, ["New message content"], ""] call dragonfly_db_fnc_addTask; + +
+
+
+Notes + + +Tasks are processed in the order they are added to the queue + +If the queue is not currently being processed, this function will start the processing + +The task type determines which database operation will be performed + +This function is particularly useful for scheduling multiple related operations + +All operations performed through the task queue are logged for debugging + + +
+
+Related Functions + + +dragonfly_db_fnc_processQueue: Processes the pending tasks in the queue + +dragonfly_db_fnc_handler: Handles the results of completed database operations + +dragonfly_db_fnc_scheduler: Manages callback responses from the database + + +
+
+Links +Add Task | Handler | Init | Print Addon Name | Process Queue | Scheduler | Test +
+
+
diff --git a/api/docbook/de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.xml b/api/docbook/de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.xml new file mode 100644 index 0000000..6f7da0e --- /dev/null +++ b/api/docbook/de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.xml @@ -0,0 +1,124 @@ + +
+hashSetIdBulk +hashSetIdBulk +
+autotoc_md261 +title: ArmaDragonflyClient - Hash Set ID Bulk icon: mdi:file-text-outline +
+
+excerpt: Set the specified fields to their respective values in the hash stored at key from DragonflyClient.
+
+dragonfly_db_fnc_hashSetIdBulk
+Description +Sets multiple field-value pairs in a specific hash table identified by its key in a single operation. This function allows efficiently storing multiple related fields at once for a specific identifier, reducing the number of separate database calls required. It's ideal for saving a collection of player-specific or entity-specific data. +
+
+Syntax +[_data] call dragonfly_db_fnc_hashSetIdBulk + +
+
+Parameters + + + + + + + + + +Parameter + +Type + +Description + +Default + + + + +_data + +Array + +Array with key followed by alternating field names and values + +[] + + + + + +
+
+Return Value +None. The operation runs synchronously to store all the data. +
+
+Examples
+Store player loadout and position: +[[getPlayerUID player, "loadout", [getUnitLoadout player], "position", [getPosASLVisual player]]] call dragonfly_db_fnc_hashSetIdBulk; + +
+
+Store multiple vehicle properties: +[["vehicle_123", "fuel", [0.75], "damage", [0.2], "crew", [["player1", "player2"]]]] call dragonfly_db_fnc_hashSetIdBulk; + +
+
+Store player data from a client: +[[getPlayerUID player, "stats", [score player], "inventory", [getAllGear player]]] remoteExecCall ["dragonfly_db_fnc_hashSetIdBulk", 2, false]; + +
+
+
+Notes + + +The data array must be structured with the key first, followed by alternating field names and values: [key, field1, value1, field2, value2, ...] + +The key must be a string that identifies the specific hash table + +Each field name must be a string + +Values can be arrays, strings, numbers, or booleans + +All field-value pairs are stored in a single database operation + +If the hash table doesn't exist, it will be created automatically + +If any of the fields already exist in the hash table, their values will be overwritten + +More efficient than multiple individual hashSetId calls when setting several fields + +Player UIDs are commonly used as keys to store player-specific data + +The operation is executed immediately and synchronously + +All operations are logged for debugging purposes + + +
+
+Related Functions + + +dragonfly_db_fnc_hashSetId: Sets a single field value in a specific hash table + +dragonfly_db_fnc_hashSetBulk: Sets multiple field-value pairs in the global hash table + +dragonfly_db_fnc_hashGetAllId: Retrieves all fields from a specific hash table + +dragonfly_db_fnc_hashGetId: Retrieves a specific field value from a specific hash table + + +
+
+Links +Hash Get | Hash Get All | Hash Get All ID | Hash Get ID | Hash Set | Hash Set Bulk | Hash Set ID | Hash Set ID Bulk +
+
+
diff --git a/api/docbook/df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.xml b/api/docbook/df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.xml new file mode 100644 index 0000000..caa9ab0 --- /dev/null +++ b/api/docbook/df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.xml @@ -0,0 +1,96 @@ + +
+delete +delete +
+autotoc_md0 +title: ArmaDragonflyClient - Delete Key icon: mdi:file-text-outline +
+
+excerpt: Remove the specified key from DragonflyClient.
+
+dragonfly_db_fnc_delete
+Description +Removes the specified key from the database. This function deletes the key-value pair completely from storage. +
+
+Syntax +[_key] call dragonfly_db_fnc_delete + +
+
+Parameters + + + + + + + + +Parameter + +Type + +Description + + + + +_key + +String + +Name of the key to delete from the database + + + + + +
+
+Return Value +None. The operation runs asynchronously. +
+
+Examples
+Delete a key in singleplayer or on the server: +["playerData"] call dragonfly_db_fnc_delete; + +
+
+Delete a key on the server from a client: +["playerData"] remoteExecCall ["dragonfly_db_fnc_delete", 2, false]; + +
+
+
+Notes + + +This operation is permanent and cannot be undone + +If the key doesn't exist, the operation will have no effect + +This function only affects specific keys, not hash tables or lists + + +
+
+Related Functions + + +dragonfly_db_fnc_get: Retrieves a value by key + +dragonfly_db_fnc_set: Stores a value by key + +dragonfly_db_fnc_scheduler: Processes the callback response + + +
+
+Links +Delete Key | Get Key | Set Key +
+
+
diff --git a/api/docbook/dir_10eb6422e80bd721a9a7af022f58c68b.xml b/api/docbook/dir_10eb6422e80bd721a9a7af022f58c68b.xml new file mode 100644 index 0000000..655b831 --- /dev/null +++ b/api/docbook/dir_10eb6422e80bd721a9a7af022f58c68b.xml @@ -0,0 +1,51 @@ + +
+G:/ids/dragonfly/docs/core Directory Reference +G:/ids/dragonfly/docs/core Directory Reference +
+Detailed Description + +This section contains documentation for the core functions of ArmaDragonflyClient that handle initialization, process management, and scheduling. +
+Available Functions + + +addTask - Add a task to the scheduler + +handler - Handle callbacks from the extension + +init - Initialize the database system + +printAddonName - Print the addon name + +processQueue - Process queued database operations + +scheduler - Schedule database operations + +test - Test the database connection + + +
+
+Example Usage +// Initialize the database +[] call dragonfly_db_fnc_init; + +// Test the database connection +[] call dragonfly_db_fnc_test; + +
+
+Related Categories + + +Basic Data Operations + +Hash Operations + +List Operations + + +
+
+
diff --git a/api/docbook/dir_1d1eabba2c636e67297dc8cee9bc9944.xml b/api/docbook/dir_1d1eabba2c636e67297dc8cee9bc9944.xml new file mode 100644 index 0000000..b6af79c --- /dev/null +++ b/api/docbook/dir_1d1eabba2c636e67297dc8cee9bc9944.xml @@ -0,0 +1,64 @@ + +
+G:/ids/dragonfly/docs/hash Directory Reference +G:/ids/dragonfly/docs/hash Directory Reference +
+Detailed Description + +This section contains documentation for the hash operations of ArmaDragonflyClient that allow for working with hash tables (key-value pairs within a namespace). +
+Available Functions + + +hashGet - Get a field from a hash + +hashGetAll - Get all fields from a hash + +hashGetAllId - Get all fields from a hash for a specific ID + +hashGetId - Get a field from a hash for a specific ID + +hashSet - Set a field in a hash + +hashSetBulk - Set multiple fields in a hash in one operation + +hashSetId - Set a field in a hash for a specific ID + +hashSetIdBulk - Set multiple fields in a hash for a specific ID in one operation + + +
+
+Example Usage +// Context mode examples +["myField", [myValue]] call dragonfly_db_fnc_hashSet; +["myField", "myFunction"] call dragonfly_db_fnc_hashGet; +["myFunction"] call dragonfly_db_fnc_hashGetAll; + +// Set multiple hash fields in one operation +[[ + "loadout", [getUnitLoadout player], + "position", [getPosASL player], + "direction", [getDir player] +]] call dragonfly_db_fnc_hashSetBulk; + +// ID-specific examples +["myHash", "myField", [myValue]] call dragonfly_db_fnc_hashSetId; +["myHash", "myField", "myFunction"] call dragonfly_db_fnc_hashGetId; +["myHash"] call dragonfly_db_fnc_hashGetAllId; + +
+
+Related Categories + + +Core Functions + +Basic Data Operations + +List Operations + + +
+
+
diff --git a/api/docbook/dir_6b1f4820e2481aa5a1ea9b2275f196d9.xml b/api/docbook/dir_6b1f4820e2481aa5a1ea9b2275f196d9.xml new file mode 100644 index 0000000..670857a --- /dev/null +++ b/api/docbook/dir_6b1f4820e2481aa5a1ea9b2275f196d9.xml @@ -0,0 +1,208 @@ + +
+G:/ids/dragonfly/docs Directory Reference +G:/ids/dragonfly/docs Directory Reference + + Directories + + directory basic + + directory core + + directory hash + + directory list + + + +
+Detailed Description + +This documentation provides details on all functions available in ArmaDragonflyClient. These functions allow you to interact with the in-memory database system for Arma 3. +
+Function Categories +The functions are categorized by their purpose: +
+Core Functions + + +init - Initialize the database system + +handler - Handle callbacks from the extension + +processQueue - Process queued database operations + +scheduler - Schedule database operations + +addTask - Add a task to the scheduler + +printAddonName - Print the addon name + +test - Test the database connection + + +
+
+Basic Data Operations + + +get - Get a value from the database + +set - Set a value in the database + +delete - Delete a value from the database + +save - Save the database to disk + +fetch - Fetch a value from the database + + +
+
+Hash Operations + + +hashGet - Get a field from a hash + +hashGetAll - Get all fields from a hash + +hashGetAllId - Get all fields from a hash for a specific ID + +hashGetId - Get a field from a hash for a specific ID + +hashSet - Set a field in a hash + +hashSetBulk - Set multiple fields in a hash in one operation + +hashSetId - Set a field in a hash for a specific ID + +hashSetIdBulk - Set multiple fields in a hash for a specific ID in one operation + + +
+
+List Operations + + +listAdd - Add an item to a list + +listGet - Get items from a list + +listLoad - Load a list from the database + +listRemove - Remove an item from a list + +listSet - Set an item in a list + + +
+
+
+Usage Examples
+Basic Usage +// Initialize the database +[] call dragonfly_db_fnc_init; + +// Set a value +["myKey", [myValue]] call dragonfly_db_fnc_set; + +// Get a value +["myKey", "myFunction"] call dragonfly_db_fnc_get; + +// Delete a key +["myKey"] call dragonfly_db_fnc_delete; + +
+
+Hash Operations +// Set a hash field (context mode) +["myField", [myValue]] call dragonfly_db_fnc_hashSet; + +// Get a hash field (context mode) +["myField", "myFunction"] call dragonfly_db_fnc_hashGet; + +// Get all hash fields (context mode) +["myFunction"] call dragonfly_db_fnc_hashGetAll; + +// Set multiple hash fields (context mode) +[[ + "loadout", [getUnitLoadout player], + "position", [getPosASL player], + "direction", [getDir player], + "stance", [stance player] +]] call dragonfly_db_fnc_hashSetBulk; + +// Remove a hash field (context mode) +["myField"] call dragonfly_db_fnc_hashRemove; + +// Delete a hash table (context mode) +[] call dragonfly_db_fnc_hashDelete; + // Set a hash field for specific ID +["myHash", "myField", [myValue]] call dragonfly_db_fnc_hashSetId; + +// Get a hash field for specific ID +["myHash", "myField", "myFunction"] call dragonfly_db_fnc_hashGetId; + +// Get all hash fields for specific ID +["myHash"] call dragonfly_db_fnc_hashGetAllId; + +// Set multiple hash fields for specific ID +[[ + getPlayerUID player, + "loadout", [getUnitLoadout player], + "position", [getPosASL player], + "direction", [getDir player], + "stance", [stance player] +]] call dragonfly_db_fnc_hashSetIdBulk; + +// Remove a hash field for specific ID +["myHash", "myField"] call dragonfly_db_fnc_hashRemoveId; + +// Delete a hash table for specific ID +["myHash"] call dragonfly_db_fnc_hashDeleteId; + +
+
+List Operations +// Add an item to a list +["myList", ["myItem"]] call dragonfly_db_fnc_listAdd; + +// Set an item from a list +["myList", 0, [myNewValue]] call dragonfly_db_fnc_listSet; + +// Get an item from a list +["myList", 0, "myFunction"] call dragonfly_db_fnc_listGet; + +// Get items from a list +["myList", "myFunction"] call dragonfly_db_fnc_listLoad; + +// Remove an item from a list +["myList", 0] call dragonfly_db_fnc_listRemove; + +// Delete a list +["myList"] call dragonfly_db_fnc_listDelete; + +
+
+
+Function Documentation Structure +Each function documentation includes: + +Function name and purpose + +Parameters + +Return value + +Examples + +Notes and warnings + + +
+
+License +This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit https://creativecommons.org/licenses/by-nc-sa/4.0/ or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042 +
+
+
diff --git a/api/docbook/dir_71f12be5768ca2af9c9f300d019944af.xml b/api/docbook/dir_71f12be5768ca2af9c9f300d019944af.xml new file mode 100644 index 0000000..2294605 --- /dev/null +++ b/api/docbook/dir_71f12be5768ca2af9c9f300d019944af.xml @@ -0,0 +1,53 @@ + +
+G:/ids/dragonfly/docs/basic Directory Reference +G:/ids/dragonfly/docs/basic Directory Reference +
+Detailed Description + +This section contains documentation for the basic data operations of ArmaDragonflyClient that allow for simple key-value storage and retrieval. +
+Available Functions + + +delete - Delete a value from the database + +fetch - Fetch a value from the database + +get - Get a value from the database + +save - Save the database to disk + +set - Set a value in the database + + +
+
+Example Usage +// Set a value +["myKey", [myValue]] call dragonfly_db_fnc_set; + +// Get a value +["myKey", "myFunction"] call dragonfly_db_fnc_get; + +// Delete a key +["myKey"] call dragonfly_db_fnc_delete; + +// Save database to disk +[] call dragonfly_db_fnc_save; + +
+
+Related Categories + + +Core Functions + +Hash Operations + +List Operations + + +
+
+
diff --git a/api/docbook/dir_72c6efb7383bf0530aa073c1e7428252.xml b/api/docbook/dir_72c6efb7383bf0530aa073c1e7428252.xml new file mode 100644 index 0000000..2a46b2d --- /dev/null +++ b/api/docbook/dir_72c6efb7383bf0530aa073c1e7428252.xml @@ -0,0 +1,56 @@ + +
+G:/ids/dragonfly/docs/list Directory Reference +G:/ids/dragonfly/docs/list Directory Reference +
+Detailed Description + +This section contains documentation for the list operations of ArmaDragonflyClient that allow for working with ordered collections of items. +
+Available Functions + + +listAdd - Add an item to a list + +listGet - Get items from a list + +listLoad - Load a list from the database + +listRemove - Remove an item from a list + +listSet - Set an item in a list + + +
+
+Example Usage +// Add an item to a list +["myList", ["myItem"]] call dragonfly_db_fnc_listAdd; + +// Set an item at a specific index +["myList", 0, [myNewValue]] call dragonfly_db_fnc_listSet; + +// Get an item at a specific index +["myList", 0, "myFunction"] call dragonfly_db_fnc_listGet; + +// Load all items from a list +["myList", "myFunction"] call dragonfly_db_fnc_listLoad; + +// Remove an item at a specific index +["myList", 0] call dragonfly_db_fnc_listRemove; + +
+
+Related Categories + + +Core Functions + +Basic Data Operations + +Hash Operations + + +
+
+
diff --git a/api/docbook/index.xml b/api/docbook/index.xml new file mode 100644 index 0000000..73e8d59 --- /dev/null +++ b/api/docbook/index.xml @@ -0,0 +1,32 @@ + + + + ArmaDragonflyClient + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/api/html/bc_s.png b/api/html/bc_s.png new file mode 100644 index 0000000..224b29a Binary files /dev/null and b/api/html/bc_s.png differ diff --git a/api/html/bc_sd.png b/api/html/bc_sd.png new file mode 100644 index 0000000..31ca888 Binary files /dev/null and b/api/html/bc_sd.png differ diff --git a/api/html/clipboard.js b/api/html/clipboard.js new file mode 100644 index 0000000..9da9f3c --- /dev/null +++ b/api/html/clipboard.js @@ -0,0 +1,61 @@ +/** + +The code below is based on the Doxygen Awesome project, see +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2022 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +let clipboard_title = "Copy to clipboard" +let clipboard_icon = `` +let clipboard_successIcon = `` +let clipboard_successDuration = 1000 + +$(function() { + if(navigator.clipboard) { + const fragments = document.getElementsByClassName("fragment") + for(const fragment of fragments) { + const clipboard_div = document.createElement("div") + clipboard_div.classList.add("clipboard") + clipboard_div.innerHTML = clipboard_icon + clipboard_div.title = clipboard_title + $(clipboard_div).click(function() { + const content = this.parentNode.cloneNode(true) + // filter out line number and folded fragments from file listings + content.querySelectorAll(".lineno, .ttc, .foldclosed").forEach((node) => { node.remove() }) + let text = content.textContent + // remove trailing newlines and trailing spaces from empty lines + text = text.replace(/^\s*\n/gm,'\n').replace(/\n*$/,'') + navigator.clipboard.writeText(text); + this.classList.add("success") + this.innerHTML = clipboard_successIcon + window.setTimeout(() => { // switch back to normal icon after timeout + this.classList.remove("success") + this.innerHTML = clipboard_icon + }, clipboard_successDuration); + }) + fragment.insertBefore(clipboard_div, fragment.firstChild) + } + } +}) diff --git a/api/html/closed.png b/api/html/closed.png new file mode 100644 index 0000000..98cc2c9 Binary files /dev/null and b/api/html/closed.png differ diff --git a/api/html/cookie.js b/api/html/cookie.js new file mode 100644 index 0000000..53ad21d --- /dev/null +++ b/api/html/cookie.js @@ -0,0 +1,58 @@ +/*! + Cookie helper functions + Copyright (c) 2023 Dimitri van Heesch + Released under MIT license. +*/ +let Cookie = { + cookie_namespace: 'doxygen_', + + readSetting(cookie,defVal) { + if (window.chrome) { + const val = localStorage.getItem(this.cookie_namespace+cookie) || + sessionStorage.getItem(this.cookie_namespace+cookie); + if (val) return val; + } else { + let myCookie = this.cookie_namespace+cookie+"="; + if (document.cookie) { + const index = document.cookie.indexOf(myCookie); + if (index != -1) { + const valStart = index + myCookie.length; + let valEnd = document.cookie.indexOf(";", valStart); + if (valEnd == -1) { + valEnd = document.cookie.length; + } + return document.cookie.substring(valStart, valEnd); + } + } + } + return defVal; + }, + + writeSetting(cookie,val,days=10*365) { // default days='forever', 0=session cookie, -1=delete + if (window.chrome) { + if (days==0) { + sessionStorage.setItem(this.cookie_namespace+cookie,val); + } else { + localStorage.setItem(this.cookie_namespace+cookie,val); + } + } else { + let date = new Date(); + date.setTime(date.getTime()+(days*24*60*60*1000)); + const expiration = days!=0 ? "expires="+date.toGMTString()+";" : ""; + document.cookie = this.cookie_namespace + cookie + "=" + + val + "; SameSite=Lax;" + expiration + "path=/"; + } + }, + + eraseSetting(cookie) { + if (window.chrome) { + if (localStorage.getItem(this.cookie_namespace+cookie)) { + localStorage.removeItem(this.cookie_namespace+cookie); + } else if (sessionStorage.getItem(this.cookie_namespace+cookie)) { + sessionStorage.removeItem(this.cookie_namespace+cookie); + } + } else { + this.writeSetting(cookie,'',-1); + } + }, +} diff --git a/api/html/d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html b/api/html/d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html new file mode 100644 index 0000000..11bccbb --- /dev/null +++ b/api/html/d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html @@ -0,0 +1,170 @@ + + + + + + + +ArmaDragonflyClient: processQueue + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
ArmaDragonflyClient +
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
processQueue
+
+
+

+autotoc_md119

+

title: ArmaDragonflyClient - Process Queue icon: mdi:file-text-outline

+

+excerpt: Processes a queue of tasks to be executed.

+

+dragonfly_db_fnc_processQueue

+

+Description

+

Processes the queue of pending database tasks sequentially. This function executes each task in the queue one by one, handling various database operations based on the task type. It continues processing until the queue is empty.

+

+Syntax

+
[] spawn dragonfly_db_fnc_processQueue
+

+Parameters

+

None. This function does not require any parameters.

+

+Return Value

+

None. The function processes tasks in the queue and updates the processing state.

+

+Examples

+

+Start processing the queue manually:

+
[] spawn dragonfly_db_fnc_processQueue;
+

+Trigger queue processing from a client:

+
[] remoteExec ["dragonfly_db_fnc_processQueue", 2, false];
+

+Notes

+
    +
  • Sets GVAR(isProcessing) to true while running and false when complete
  • +
  • Processes one task per second to prevent overloading
  • +
  • Handles a wide range of database operations including:
      +
    • Key-value operations (get, set, delete)
    • +
    • Hash table operations (hget, hset, hgetall, etc.)
    • +
    • List operations (listadd, listrng, listset, etc.)
    • +
    +
  • +
  • Automatically started by dragonfly_db_fnc_addTask when new tasks are added
  • +
  • Each task execution is logged for debugging purposes
  • +
  • Should typically be spawned rather than called to avoid blocking
  • +
+

+Related Functions

+
    +
  • dragonfly_db_fnc_addTask: Adds tasks to the queue for processing
  • +
  • dragonfly_db_fnc_handler: Handles data returned from database operations
  • +
  • dragonfly_db_fnc_scheduler: Manages callback responses from the database
  • +
+

+Links

+

Add Task | Handler | Init | Print Addon Name | Process Queue | Scheduler | Test

+
+
+
+ + + + diff --git a/api/html/d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html b/api/html/d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html new file mode 100644 index 0000000..0abeebe --- /dev/null +++ b/api/html/d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html @@ -0,0 +1,179 @@ + + + + + + + +ArmaDragonflyClient: hashSet + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
ArmaDragonflyClient +
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
hashSet
+
+
+

+autotoc_md219

+

title: ArmaDragonflyClient - Hash Set icon: mdi:file-text-outline

+

+excerpt: Set a field value in the current client's hash table in DragonflyClient.

+

+dragonfly_db_fnc_hashSet

+

+Description

+

Sets the value of a specified field in the hash table associated with the current client/player. This function automatically determines the appropriate hash ID based on the caller's identity, making it more convenient than hashSetId which requires manually specifying an ID. It allows storing various data types (arrays, strings, numbers, or booleans) in a field of the client-specific hash structure.

+

+Syntax

+
[_keyField, _data] call dragonfly_db_fnc_hashSet
+

+Parameters

+ + + + + + + +
Parameter Type Description Default
_keyField String Name of the field in the hash to set ""
_data Array, String, Number, or Boolean The value to store in the hash field []
+

+Return Value

+

None. The operation runs synchronously to store the data.

+

+Examples

+

+Store a player's loadout:

+
["loadout", [getUnitLoadout player]] call dragonfly_db_fnc_hashSet;
+

+Store player preferences:

+
["settings", [true, 30, "normal"]] call dragonfly_db_fnc_hashSet;
+

+Store data from a client:

+
["clientInfo", [name player, getPlayerUID player]] remoteExecCall ["dragonfly_db_fnc_hashSet", 2, false];
+

+Notes

+
    +
  • Stores a single field-value pair in the current client's hash table
  • +
  • Both the field name and data parameters are required and validated
  • +
  • If the field already exists, its value will be overwritten
  • +
  • Supports various data types: arrays, strings, numbers, and booleans
  • +
  • This function automatically determines which hash table to use based on the caller's identity
  • +
  • Use hashSetId when you need to specify a particular hash table by ID
  • +
  • Complex data structures should be serialized into arrays
  • +
  • The operation is executed immediately and synchronously
  • +
  • All operations are logged for debugging purposes
  • +
+

+Related Functions

+
    +
  • dragonfly_db_fnc_hashSetId: Sets a field value in a specific hash table (when you need to specify the ID)
  • +
  • dragonfly_db_fnc_hashGet: Retrieves a field value from the current client's hash table
  • +
  • dragonfly_db_fnc_hashGetAll: Retrieves all fields from the current client's hash table
  • +
  • dragonfly_db_fnc_hashSetBulk: Sets multiple fields in the current client's hash table
  • +
+

+Links

+

Hash Get | Hash Get All | Hash Get All ID | Hash Get ID | Hash Set | Hash Set Bulk | Hash Set ID | Hash Set ID Bulk

+
+
+
+ + + + diff --git a/api/html/d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html b/api/html/d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html new file mode 100644 index 0000000..656ad97 --- /dev/null +++ b/api/html/d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html @@ -0,0 +1,171 @@ + + + + + + + +ArmaDragonflyClient: scheduler + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
ArmaDragonflyClient +
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
scheduler
+
+
+

+autotoc_md136

+

title: ArmaDragonflyClient - Scheduler icon: mdi:file-text-outline

+

+excerpt: Scheduled Environment for extension.

+

+dragonfly_db_fnc_scheduler

+

+Description

+

Manages the callback system for the ArmaDragonflyClient extension. This function receives task IDs from the extension's asynchronous callbacks, parses them, and registers them in a hashmap for later processing. It acts as the bridge between the extension's asynchronous operations and the game's execution environment.

+

+Syntax

+
[_taskID] call dragonfly_db_fnc_scheduler
+

+Parameters

+ + + + + +
Parameter Type Description Default
_taskID String Task identifier returned from extension callback ""
+

+Return Value

+

None. The function registers the task ID in a hashmap for later processing.

+

+Examples

+

+Process a callback from the extension:

+
["1689524160123_get"] call dragonfly_db_fnc_scheduler;
+

+Forward a callback to the server:

+
["1689524160123_hgetall"] remoteExecCall ["dragonfly_db_fnc_scheduler", 2, false];
+

+Notes

+
    +
  • Parses the task ID to extract the timestamp and operation type
  • +
  • Registers the task in a type-specific hashmap using the mission namespace
  • +
  • Each operation type (get, hgetall, etc.) has its own hashmap for tracking
  • +
  • The format of task IDs is typically: [timestamp]_[operation]
  • +
  • This function is automatically called by the extension callback mechanism
  • +
  • Creates hashmaps on demand if they don't already exist
  • +
  • Critical for handling asynchronous database operations
  • +
+

+Related Functions

+
    +
  • dragonfly_db_fnc_fetch: Assembles data chunks for large datasets
  • +
  • dragonfly_db_fnc_handler: Processes the data retrieved from database operations
  • +
  • dragonfly_db_fnc_processQueue: Executes queued database operations
  • +
+

+Links

+

Add Task | Handler | Init | Print Addon Name | Process Queue | Scheduler | Test

+
+
+
+ + + + diff --git a/api/html/d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html b/api/html/d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html new file mode 100644 index 0000000..41ea393 --- /dev/null +++ b/api/html/d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html @@ -0,0 +1,172 @@ + + + + + + + +ArmaDragonflyClient: listRemove + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
ArmaDragonflyClient +
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
listRemove
+
+
+

+autotoc_md318

+

title: ArmaDragonflyClient - List Remove icon: mdi:file-text-outline

+

+excerpt: Remove an element from a list stored at a key in DragonflyClient.

+

+dragonfly_db_fnc_listRemove

+

+Description

+

Removes a specific element from a list stored at a specified key in the DragonflyClient database. This function allows for precise control over list content by targeting individual elements by their index, without affecting other elements in the list. This is particularly useful for removing outdated or no longer needed entries.

+

+Syntax

+
[_key, _index] call dragonfly_db_fnc_listRemove
+

+Parameters

+ + + + + + + +
Parameter Type Description Default
_key String The key identifying the list from which to remove an element ""
_index Number The zero-based index of the element to remove from the list -1
+

+Return Value

+

None. The operation runs synchronously to remove the element immediately.

+

+Examples

+

Remove the first element from an event log:

["eventLog", 0] call dragonfly_db_fnc_listRemove;
+

Remove a specific player record:

["playerRecords", 5] call dragonfly_db_fnc_listRemove;
+

Remove an element from a multiplayer environment:

["sharedData", 2] remoteExecCall ["dragonfly_db_fnc_listRemove", 2, false];
+

+Notes

+
    +
  • This function removes only the element at the specified index. All other elements remain unchanged, though their indices may shift.
  • +
  • The index is zero-based, meaning the first element is at index 0, the second at index 1, and so on.
  • +
  • If an invalid index is provided (negative or exceeding the list length), the operation will not remove any elements.
  • +
  • The _key parameter must be a non-empty string, otherwise the function will exit without performing any action.
  • +
  • After removing an element, all subsequent elements shift down by one index to maintain a contiguous list.
  • +
  • The removal operation is permanent and cannot be undone except by re-adding the element.
  • +
  • All list operations are logged for debugging purposes.
  • +
+

+Related Functions

+
    +
  • dragonfly_db_fnc_listAdd: Adds an element to a list
  • +
  • dragonfly_db_fnc_listGet: Retrieves a specific element from a list
  • +
  • dragonfly_db_fnc_listLoad: Retrieves a range of elements from a list
  • +
  • dragonfly_db_fnc_listSet: Replaces a specific element in a list
  • +
  • dragonfly_db_fnc_scheduler: Processes the callback from the database extension
  • +
+

+Links

+

List Add | List Get | List Load | List Remove | List Set

+
+
+
+ + + + diff --git a/api/html/d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html b/api/html/d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html new file mode 100644 index 0000000..abcbed7 --- /dev/null +++ b/api/html/d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html @@ -0,0 +1,184 @@ + + + + + + + +ArmaDragonflyClient: hashGetAllId + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
ArmaDragonflyClient +
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
hashGetAllId
+
+
+

+autotoc_md191

+

title: ArmaDragonflyClient - Hash Get All ID icon: mdi:file-text-outline

+

+excerpt: Get all fields and values from the hash stored at key from DragonflyClient.

+

+dragonfly_db_fnc_hashGetAllId

+

+Description

+

Retrieves all fields and values from a specific hash table identified by its key. This function returns the complete hash table data for a specific ID through a callback function, allowing access to all stored key-value pairs associated with that ID. It's particularly useful for retrieving player-specific or entity-specific hash data.

+

+Syntax

+
[_key, _function, _call, _netId] call dragonfly_db_fnc_hashGetAllId
+

+Parameters

+ + + + + + + + + + + +
Parameter Type Description Default
_key String Identifier of the hash table to retrieve ""
_function String Name of the function to receive the retrieved data ""
_call Boolean Whether to call the function directly (true) or spawn (false) false
_netId String (Optional) NetID of the player to receive the data ""
+

+Return Value

+

None. The retrieved data is passed to the specified callback function asynchronously.

+

+Examples

+

+Retrieve a player's complete hash data:

+
[getPlayerUID player, "dragonfly_db_fnc_test"] call dragonfly_db_fnc_hashGetAllId;
+

+Retrieve vehicle data with synchronous callback:

+
["vehicle_123", "dragonfly_db_fnc_processVehicleData", true] call dragonfly_db_fnc_hashGetAllId;
+

+Retrieve data and send it to a specific client:

+
[getPlayerUID player, "dragonfly_db_fnc_test", false, netId player] remoteExecCall ["dragonfly_db_fnc_hashGetAllId", 2, false];
+

+Notes

+
    +
  • Returns the complete hash table with all fields and values as a nested array
  • +
  • Both the key and callback function parameters are required and validated
  • +
  • The data is retrieved asynchronously through the extension's callback system
  • +
  • When a netId is provided, the data is sent to that specific client
  • +
  • The _call parameter determines whether the function is called directly (synchronous) or spawned (asynchronous)
  • +
  • This function retrieves from a specific hash table identified by _key - use hashGetAll for the global hash table
  • +
  • Player UIDs are commonly used as keys to store player-specific data
  • +
  • For large hash tables, retrieving all data may impact performance
  • +
  • All operations are logged for debugging purposes
  • +
+

+Related Functions

+
    +
  • dragonfly_db_fnc_hashGetAll: Retrieves all fields from the global hash table
  • +
  • dragonfly_db_fnc_hashGetId: Retrieves a specific field value from a specific hash table
  • +
  • dragonfly_db_fnc_hashGet: Retrieves a specific field value from the global hash table
  • +
  • dragonfly_db_fnc_hashSetId: Sets a field value in a specific hash table
  • +
  • dragonfly_db_fnc_scheduler: Processes the callback from the database extension
  • +
+

+Links

+

Hash Get | Hash Get All | Hash Get All ID | Hash Get ID | Hash Set | Hash Set Bulk | Hash Set ID | Hash Set ID Bulk

+
+
+
+ + + + diff --git a/api/html/d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html b/api/html/d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html new file mode 100644 index 0000000..2e82bb1 --- /dev/null +++ b/api/html/d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html @@ -0,0 +1,186 @@ + + + + + + + +ArmaDragonflyClient: hashGetId + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
ArmaDragonflyClient +
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
hashGetId
+
+
+

+autotoc_md205

+

title: ArmaDragonflyClient - Hash Get ID icon: mdi:file-text-outline

+

+excerpt: Get the value associated with field in hash stored at key from DragonflyClient.

+

+dragonfly_db_fnc_hashGetId

+

+Description

+

Retrieves the value of a specific field from a hash table identified by its key. This function allows targeted access to individual fields within a specific hash table, making it ideal for accessing particular attributes of player or entity data. The retrieved data is returned through a callback function.

+

+Syntax

+
[_key, _keyField, _function, _call, _netId] call dragonfly_db_fnc_hashGetId
+

+Parameters

+ + + + + + + + + + + + + +
Parameter Type Description Default
_key String Identifier of the hash table ""
_keyField String Name of the field in the hash to retrieve ""
_function String Name of the function to receive the retrieved data ""
_call Boolean Whether to call the function directly (true) or spawn (false) false
_netId String (Optional) NetID of the player to receive the data ""
+

+Return Value

+

None. The retrieved data is passed to the specified callback function asynchronously.

+

+Examples

+

+Retrieve a player's loadout field:

+
[getPlayerUID player, "loadout", "dragonfly_db_fnc_test"] call dragonfly_db_fnc_hashGetId;
+

+Retrieve a specific vehicle property with synchronous callback:

+
["vehicle_123", "fuel", "dragonfly_db_fnc_processFuelData", true] call dragonfly_db_fnc_hashGetId;
+

+Retrieve data and send it to a specific client:

+
[getPlayerUID player, "stats", "dragonfly_db_fnc_test", false, netId player] remoteExecCall ["dragonfly_db_fnc_hashGetId", 2, false];
+

+Notes

+
    +
  • Retrieves a single field value from a specific hash table
  • +
  • All three primary parameters (key, keyField, and function) are required and validated
  • +
  • The data is retrieved asynchronously through the extension's callback system
  • +
  • When a netId is provided, the data is sent to that specific client
  • +
  • The _call parameter determines whether the function is called directly (synchronous) or spawned (asynchronous)
  • +
  • This function targets both a specific hash table (_key) and a specific field (_keyField)
  • +
  • More efficient than retrieving all hash fields when only one is needed
  • +
  • Player UIDs are commonly used as keys to store player-specific data
  • +
  • All operations are logged for debugging purposes
  • +
+

+Related Functions

+
    +
  • dragonfly_db_fnc_hashGet: Retrieves a field value from the global hash table
  • +
  • dragonfly_db_fnc_hashGetAllId: Retrieves all fields from a specific hash table
  • +
  • dragonfly_db_fnc_hashGetAll: Retrieves all fields from the global hash table
  • +
  • dragonfly_db_fnc_hashSetId: Sets a field value in a specific hash table
  • +
  • dragonfly_db_fnc_scheduler: Processes the callback from the database extension
  • +
+

+Links

+

Hash Get | Hash Get All | Hash Get All ID | Hash Get ID | Hash Set | Hash Set Bulk | Hash Set ID | Hash Set ID Bulk

+
+
+
+ + + + diff --git a/api/html/d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html b/api/html/d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html new file mode 100644 index 0000000..d58a6af --- /dev/null +++ b/api/html/d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html @@ -0,0 +1,174 @@ + + + + + + + +ArmaDragonflyClient: listSet + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
ArmaDragonflyClient +
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
listSet
+
+
+

+autotoc_md329

+

title: ArmaDragonflyClient - List Set icon: mdi:file-text-outline

+

+excerpt: Set an element in a list stored at a key in DragonflyClient.

+

+dragonfly_db_fnc_listSet

+

+Description

+

Updates or sets the value of a specific element at a given index in a list stored at a specified key in the DragonflyClient database. This function allows for precise modification of list contents by targeting individual elements without affecting other elements in the list. It is particularly useful for updating record information, modifying configuration data, or correcting entries.

+

+Syntax

+
[_key, _index, _data] call dragonfly_db_fnc_listSet
+

+Parameters

+ + + + + + + + + +
Parameter Type Description Default
_key String The key identifying the list in which to set an element ""
_index Number The zero-based index of the element to set in the list -1
_data Array/String/Number/Boolean The value to set at the specified index []
+

+Return Value

+

None. The operation runs synchronously to update the element immediately.

+

+Examples

+

Update an event log entry:

["eventLog", 0, ["Updated event information"]] call dragonfly_db_fnc_listSet;
+

Modify player statistics:

["playerStats", 3, [name player, score player, alive player]] call dragonfly_db_fnc_listSet;
+

Update configuration in multiplayer:

["missionConfig", 1, ["difficulty", "veteran"]] remoteExecCall ["dragonfly_db_fnc_listSet", 2, false];
+

+Notes

+
    +
  • This function updates only the element at the specified index. All other elements remain unchanged.
  • +
  • The index is zero-based, meaning the first element is at index 0, the second at index 1, and so on.
  • +
  • If the specified index does not exist in the list, the operation may fail or have no effect.
  • +
  • Both the _key parameter and _data parameter must be valid (non-empty string for key, non-nil for data), otherwise the function will exit without performing any action.
  • +
  • The function supports various data types, including arrays, strings, numbers, and booleans.
  • +
  • The update operation is permanent and will overwrite any previous value at the specified index.
  • +
  • All list operations are logged for debugging purposes.
  • +
+

+Related Functions

+
    +
  • dragonfly_db_fnc_listAdd: Adds an element to a list
  • +
  • dragonfly_db_fnc_listGet: Retrieves a specific element from a list
  • +
  • dragonfly_db_fnc_listLoad: Retrieves a range of elements from a list
  • +
  • dragonfly_db_fnc_listRemove: Removes a specific element from a list
  • +
  • dragonfly_db_fnc_scheduler: Processes the callback from the database extension
  • +
+

+Links

+

List Add | List Get | List Load | List Remove | List Set

+
+
+
+ + + + diff --git a/api/html/d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html b/api/html/d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html new file mode 100644 index 0000000..01f6000 --- /dev/null +++ b/api/html/d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html @@ -0,0 +1,158 @@ + + + + + + + +ArmaDragonflyClient: save + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
ArmaDragonflyClient +
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
save
+
+
+

+autotoc_md40

+

title: ArmaDragonflyClient - Save DB icon: mdi:file-text-outline

+

+excerpt: Save DB to disc.

+

+dragonfly_db_fnc_save

+

+Description

+

Saves the entire database to disk storage. This function persists all data (key-value pairs, hash tables, and lists) to a file, allowing it to be retrieved later even after server restart.

+

+Syntax

+
[] call dragonfly_db_fnc_save
+

+Parameters

+

None. The function saves the database without any parameters.

+

+Return Value

+

None. The operation runs synchronously and saves the database immediately.

+

+Examples

+

+Save the database without creating a backup:

+
[] call dragonfly_db_fnc_save;
+

+Call the save function remotely from a client:

+
[] remoteExecCall ["dragonfly_db_fnc_save", 2, false];
+

+Notes

+
    +
  • This function should be called periodically to ensure data persistence
  • +
  • Saving is a resource-intensive operation, so it shouldn't be called too frequently
  • +
  • Consider saving before mission end or during low-activity periods
  • +
+

+Related Functions

+

None.

+

+Links

+

None.

+
+
+
+ + + + diff --git a/api/html/d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html b/api/html/d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html new file mode 100644 index 0000000..82f2613 --- /dev/null +++ b/api/html/d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html @@ -0,0 +1,175 @@ + + + + + + + +ArmaDragonflyClient: get + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
ArmaDragonflyClient +
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
get
+
+
+

+autotoc_md23

+

title: ArmaDragonflyClient - Get Key icon: mdi:file-text-outline

+

+excerpt: Get the value of stored key from DragonflyClient.

+

+dragonfly_db_fnc_get

+

+Description

+

Retrieves the value of a stored key from the database. This function performs an asynchronous request to the database and passes the retrieved data to the specified callback function.

+

+Syntax

+
[_key, _function, _call, _netId] call dragonfly_db_fnc_get
+

+Parameters

+ + + + + + + + + + + +
Parameter Type Description
_key String Name of the stored key to retrieve from the database
_function String Name of the function to call when data is retrieved
_call Boolean Whether to call the function directly (true) or spawn (false)
_netId String (Optional) NetID of the player to whom the data should be returned
+

+Return Value

+

None. When data is retrieved, it will be passed to the specified function. The operation runs asynchronously.

+

+Examples

+

+Retrieve data in singleplayer or on the server:

+
[getPlayerUID player, "dragonfly_db_fnc_test"] call dragonfly_db_fnc_get;
+

+Retrieve data on the server and send to a specific client:

+
[getPlayerUID player, "dragonfly_db_fnc_test", false, netId player] remoteExecCall ["dragonfly_db_fnc_get", 2, false];
+

+Notes

+
    +
  • The function exit with an error if the key or function parameters are empty
  • +
  • Data is processed through the scheduler system, which manages callback responses
  • +
  • For large data that exceeds buffer limits, it will be automatically chunked and reassembled
  • +
  • The callback function must be defined to accept the retrieved data
  • +
  • The _call parameter determines whether the callback is executed directly or spawned in a separate thread
  • +
+

+Related Functions

+
    +
  • dragonfly_db_fnc_set: Stores a value by key
  • +
  • dragonfly_db_fnc_delete: Removes a value by key
  • +
  • dragonfly_db_fnc_scheduler: Processes the callback response
  • +
+

+Links

+

Delete Key | Get Key | Set Key

+
+
+
+ + + + diff --git a/api/html/d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html b/api/html/d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html new file mode 100644 index 0000000..5228f4e --- /dev/null +++ b/api/html/d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html @@ -0,0 +1,186 @@ + + + + + + + +ArmaDragonflyClient: listGet + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
ArmaDragonflyClient +
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
listGet
+
+
+

+autotoc_md293

+

title: ArmaDragonflyClient - List Get icon: mdi:file-text-outline

+

+excerpt: Get element of list stored at key from DragonflyClient.

+

+dragonfly_db_fnc_listGet

+

+Description

+

Retrieves a specific element from a list stored in the database by its index. This function accesses a single item from a list using its position number and returns the data through a callback function. It's useful for accessing individual pieces of data from a sequence without retrieving the entire list.

+

+Syntax

+
[_key, _index, _function, _call, _netId] call dragonfly_db_fnc_listGet
+

+Parameters

+ + + + + + + + + + + + + +
Parameter Type Description Default
_key String Name of the list ""
_index Number Index position of the element to retrieve (0-based) -1
_function String Name of the function to receive the retrieved data ""
_call Boolean Whether to call the function directly (true) or spawn (false) false
_netId String (Optional) NetID of the player to receive the data ""
+

+Return Value

+

None. The retrieved data is passed to the specified callback function asynchronously.

+

+Examples

+

+Retrieve a specific event log entry:

+
["events", 0, "dragonfly_db_fnc_test"] call dragonfly_db_fnc_listGet;
+

+Retrieve data with synchronous callback:

+
["messages", 5, "dragonfly_db_fnc_processMessage", true] call dragonfly_db_fnc_listGet;
+

+Retrieve data and send it to a specific client:

+
["notifications", 0, "dragonfly_db_fnc_displayNotification", false, netId player] remoteExecCall ["dragonfly_db_fnc_listGet", 2, false];
+

+Notes

+
    +
  • Retrieves a single element from a list by its index position
  • +
  • The key, index, and function parameters are required and validated
  • +
  • Index is zero-based (the first element is at index 0)
  • +
  • If the index is out of bounds or the list doesn't exist, no data will be returned
  • +
  • The data is retrieved asynchronously through the extension's callback system
  • +
  • When a netId is provided, the data is sent to that specific client
  • +
  • The _call parameter determines whether the function is called directly (synchronous) or spawned (asynchronous)
  • +
  • For retrieving multiple elements, use listLoad instead
  • +
  • All operations are logged for debugging purposes
  • +
+

+Related Functions

+
    +
  • dragonfly_db_fnc_listAdd: Adds an element to a list
  • +
  • dragonfly_db_fnc_listLoad: Retrieves a range of elements from a list
  • +
  • dragonfly_db_fnc_listSet: Replaces a specific element in a list
  • +
  • dragonfly_db_fnc_listRemove: Removes a specific element from a list
  • +
  • dragonfly_db_fnc_scheduler: Processes the callback from the database extension
  • +
+

+Links

+

List Add | List Get | List Load | List Remove | List Set

+
+
+
+ + + + diff --git a/api/html/d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html b/api/html/d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html new file mode 100644 index 0000000..3a2a1ad --- /dev/null +++ b/api/html/d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html @@ -0,0 +1,180 @@ + + + + + + + +ArmaDragonflyClient: handler + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
ArmaDragonflyClient +
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
handler
+
+
+

+autotoc_md81

+

title: ArmaDragonflyClient - Handler icon: mdi:file-text-outline

+

+excerpt: Handle data from DB.

+

+dragonfly_db_fnc_handler

+

+Description

+

Handles data received from the database and routes it to the appropriate function. This function is a critical component of the callback system, receiving data from database operations and directing it to the specified function, either locally or to a remote client.

+

+Syntax

+
[_uniqueID, _function, _call, _data, _netId] call dragonfly_db_fnc_handler
+

+Parameters

+ + + + + + + + + + + + + +
Parameter Type Description Default
_uniqueID String Unique identifier for the data chunk ""
_function String Name of function to receive the data ""
_call Boolean Whether to call the function directly (true) or spawn (false) false
_data Array, String, Number, or Boolean The data retrieved from the database []
_netId String (Optional) NetID of the player to receive the data nil
+

+Return Value

+

None. The data is passed to the specified function for processing.

+

+Examples

+

+Process data locally:

+
["0123456789", "dragonfly_db_fnc_test", false, ["Hello World!"]] call dragonfly_db_fnc_handler;
+

+Send data to a specific client:

+
["0123456789", "dragonfly_db_fnc_test", false, ["Hello World!"], netId player] remoteExecCall ["dragonfly_db_fnc_handler", 2, false];
+

+Process data with direct call (synchronous):

+
["0123456789", "dragonfly_db_fnc_processInventory", true, [["weapon1", 30], ["item2", 5]]] call dragonfly_db_fnc_handler;
+

+Notes

+
    +
  • The function validates that both the function name and data are valid before proceeding
  • +
  • When a netId is provided, the data is sent to that specific client using remoteExec
  • +
  • The _call parameter determines whether the function is called directly (synchronous) or spawned (asynchronous)
  • +
  • This function is typically called by the scheduler or other core components rather than directly by user code
  • +
  • Each handler call is logged, which is useful for debugging data flow
  • +
+

+Related Functions

+
    +
  • dragonfly_db_fnc_scheduler: Processes callbacks from the database extension
  • +
  • dragonfly_db_fnc_fetch: Assembles data chunks for large datasets
  • +
  • dragonfly_db_fnc_addTask: Adds tasks to the database operation queue
  • +
+

+Links

+

Add Task | Handler | Init | Print Addon Name | Process Queue | Scheduler | Test

+
+
+
+ + + + diff --git a/api/html/d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html b/api/html/d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html new file mode 100644 index 0000000..9e73ad2 --- /dev/null +++ b/api/html/d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html @@ -0,0 +1,163 @@ + + + + + + + +ArmaDragonflyClient: printAddonName + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
ArmaDragonflyClient +
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
printAddonName
+
+
+

+autotoc_md106

+

title: ArmaDragonflyClient - Print Addon Name icon: mdi:file-text-outline

+

+excerpt: Displays the addon name in system chat.

+

+dragonfly_db_fnc_printAddonName

+

+Description

+

Displays a thank you message with the addon name in the system chat. This is a simple utility function that can be used to acknowledge the use of the framework or to verify that the addon is properly loaded.

+

+Syntax

+
[] call dragonfly_db_fnc_printAddonName
+

+Parameters

+

None. This function does not require any parameters.

+

+Return Value

+

None. The function outputs a message to the system chat.

+

+Examples

+

+Display the addon name message:

+
[] call dragonfly_db_fnc_printAddonName;
+

+Use in a welcome script:

+
if (isServer) then {
+
[] remoteExec ["dragonfly_db_fnc_printAddonName", 0, true];
+
};
+

+Notes

+
    +
  • The function uses the ADDON macro defined in script_component.hpp
  • +
  • This displays a message directly in the player's system chat
  • +
  • Can be useful as a quick verification that the addon is loaded correctly
  • +
  • Often used during development or for first-time users
  • +
+

+Related Functions

+
    +
  • dragonfly_db_fnc_init: Initializes the database system
  • +
+

+Links

+

Add Task | Handler | Init | Print Addon Name | Process Queue | Scheduler | Test

+
+
+
+ + + + diff --git a/api/html/d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html b/api/html/d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html new file mode 100644 index 0000000..e971835 --- /dev/null +++ b/api/html/d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html @@ -0,0 +1,175 @@ + + + + + + + +ArmaDragonflyClient: fetch + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
ArmaDragonflyClient +
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
fetch
+
+
+

+autotoc_md13

+

title: ArmaDragonflyClient - Fetch icon: mdi:file-text-outline

+

+excerpt: Handles data chunks received from the database extension when data is too large to be returned in a single callback.

+

+dragonfly_db_fnc_fetch

+

+Description

+

Handles data chunks received from the database extension when data is too large to be returned in a single callback. This function collects all chunks of data, reassembles them in the correct order, and then passes the complete data to the handler function.

+

+Syntax

+
[_uniqueID, _function, _index, _total, _datachunk, _call, _netId] call dragonfly_db_fnc_fetch
+

+Parameters

+ + + + + + + + + + + + + + + + + +
Parameter Type Description
_uniqueID String Unique identifier for this data fetch operation
_function String Name of the function to call after data is assembled
_index Number Current chunk index (0-based)
_total Number Total number of chunks expected
_datachunk String The chunk of data being received
_call Boolean Whether to call the function directly (true) or spawn (false)
_netId String (Optional) NetID of the player to whom the data belongs
+

+Return Value

+

None. When all chunks are received, the function will:

    +
  1. Assemble the complete data string
  2. +
  3. Parse it as a simple array
  4. +
  5. Call the specified handler function with the parsed data
  6. +
+

+Examples

+

This function is typically not called directly but is triggered by the extension's callback mechanism when large datasets are retrieved.

+

+Notes

+
    +
  • The function stores received chunks in the global array dragonfly_db_fetch_array
  • +
  • Chunks are sorted by their index to ensure correct assembly regardless of arrival order
  • +
  • After successful processing, the chunks for this uniqueID are removed from the array
  • +
  • This function is essential for handling large datasets that exceed the callback buffer limit
  • +
+

+Related Functions

+
    +
  • dragonfly_db_fnc_handler: Receives the assembled data and routes it to the appropriate function
  • +
  • dragonfly_db_fnc_scheduler: Manages the callback queue and triggers data fetching
  • +
+
+
+
+ + + + diff --git a/api/html/d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html b/api/html/d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html new file mode 100644 index 0000000..2d63685 --- /dev/null +++ b/api/html/d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html @@ -0,0 +1,181 @@ + + + + + + + +ArmaDragonflyClient: hashSetId + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
ArmaDragonflyClient +
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
hashSetId
+
+
+

+autotoc_md247

+

title: ArmaDragonflyClient - Hash Set ID icon: mdi:file-text-outline

+

+excerpt: Set the specified field to the respective value in the hash stored at key from DragonflyClient.

+

+dragonfly_db_fnc_hashSetId

+

+Description

+

Sets the value of a specified field in a specific hash table identified by its key. This function allows storing various data types (arrays, strings, numbers, or booleans) in a targeted hash table, making it ideal for player-specific or entity-specific data storage. It provides a way to organize related data under a common identifier.

+

+Syntax

+
[_key, _keyField, _data] call dragonfly_db_fnc_hashSetId
+

+Parameters

+ + + + + + + + + +
Parameter Type Description Default
_key String Identifier of the hash table ""
_keyField String Name of the field in the hash to set ""
_data Array, String, Number, or Boolean The value to store in the hash field []
+

+Return Value

+

None. The operation runs synchronously to store the data.

+

+Examples

+

+Store a player's loadout under their UID:

+
[getPlayerUID player, "loadout", [getUnitLoadout player]] call dragonfly_db_fnc_hashSetId;
+

+Store vehicle data:

+
["vehicle_123", "status", [true, 100, 75, "active"]] call dragonfly_db_fnc_hashSetId;
+

+Store player data from a client:

+
[getPlayerUID player, "stats", [rank player, score player, name player]] remoteExecCall ["dragonfly_db_fnc_hashSetId", 2, false];
+

+Notes

+
    +
  • Stores a single field-value pair in a specific hash table identified by _key
  • +
  • All three parameters (key, keyField, and data) are required and validated
  • +
  • If the hash table doesn't exist, it will be created automatically
  • +
  • If the field already exists in the hash table, its value will be overwritten
  • +
  • Supports various data types: arrays, strings, numbers, and booleans
  • +
  • Player UIDs are commonly used as keys to store player-specific data
  • +
  • Complex data structures should be serialized into arrays
  • +
  • The operation is executed immediately and synchronously
  • +
  • All operations are logged for debugging purposes
  • +
+

+Related Functions

+
    +
  • dragonfly_db_fnc_hashSet: Sets a field value in the global hash table
  • +
  • dragonfly_db_fnc_hashGetId: Retrieves a field value from a specific hash table
  • +
  • dragonfly_db_fnc_hashGetAllId: Retrieves all fields from a specific hash table
  • +
  • dragonfly_db_fnc_hashSetIdBulk: Sets multiple field-value pairs in multiple hash tables
  • +
+

+Links

+

Hash Get | Hash Get All | Hash Get All ID | Hash Get ID | Hash Set | Hash Set Bulk | Hash Set ID | Hash Set ID Bulk

+
+
+
+ + + + diff --git a/api/html/d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html b/api/html/d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html new file mode 100644 index 0000000..1feb501 --- /dev/null +++ b/api/html/d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html @@ -0,0 +1,173 @@ + + + + + + + +ArmaDragonflyClient: test + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
ArmaDragonflyClient +
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
test
+
+
+

+autotoc_md149

+

title: ArmaDragonflyClient - Test icon: mdi:file-text-outline

+

+excerpt: Test Function.

+

+dragonfly_db_fnc_test

+

+Description

+

A simple test function for verifying database operations. This function displays the received data in a hint message and logs it to the RPT file. It's primarily used for testing database retrieval operations and callback functionality.

+

+Syntax

+
[_value] spawn dragonfly_db_fnc_test
+

+Parameters

+ + + + + +
Parameter Type Description Default
_value Array, String, Number, or Boolean The value to display and log []
+

+Return Value

+

The same value that was passed to the function. Also sets the global variable dragonfly_db_test to this value.

+

+Examples

+

+Test with a simple string:

+
["Hello World!"] spawn dragonfly_db_fnc_test;
+

+Test database retrieval by specifying this as callback function:

+
["playerStats", "dragonfly_db_fnc_test"] call dragonfly_db_fnc_get;
+

+Test from client to server:

+
["Database is working!"] remoteExec ["dragonfly_db_fnc_test", 2, false];
+

+Notes

+
    +
  • Displays the received value using hint
  • +
  • Logs the same value to the RPT file
  • +
  • Stores the value in the global variable dragonfly_db_test for later inspection
  • +
  • Commonly used as a callback function for database operations
  • +
  • Useful for debugging and verifying data flow
  • +
  • Can be called directly or specified as a callback in other functions
  • +
+

+Related Functions

+
    +
  • dragonfly_db_fnc_get: Retrieves values from the database
  • +
  • dragonfly_db_fnc_handler: Routes data to callback functions
  • +
  • dragonfly_db_fnc_scheduler: Manages the callback system
  • +
+

+Links

+

Add Task | Handler | Init | Print Addon Name | Process Queue | Scheduler | Test

+
+
+
+ + + + diff --git a/api/html/d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html b/api/html/d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html new file mode 100644 index 0000000..fa08f59 --- /dev/null +++ b/api/html/d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html @@ -0,0 +1,174 @@ + + + + + + + +ArmaDragonflyClient: set + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
ArmaDragonflyClient +
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
set
+
+
+

+autotoc_md53

+

title: ArmaDragonflyClient - Set Key icon: mdi:file-text-outline

+

+excerpt: Set the value of stored key from DragonflyClient.

+

+dragonfly_db_fnc_set

+

+Description

+

Stores a value in the database with the specified key. This function allows saving various data types (arrays, strings, numbers, or booleans) that can be retrieved later using the key.

+

+Syntax

+
[_key, _data] call dragonfly_db_fnc_set
+

+Parameters

+ + + + + + + +
Parameter Type Description Default
_key String Name of the key to store the data under ""
_data Array, String, Number, or Boolean The value to store in the database []
+

+Return Value

+

None. The operation runs asynchronously.

+

+Examples

+

+Store a simple array:

+
["playerInventory", ["item1", "item2", "item3"]] call dragonfly_db_fnc_set;
+

+Store player data under their UID:

+
[getPlayerUID player, [name player, getPos player, getAllGear player]] call dragonfly_db_fnc_set;
+

+Call the set function remotely from a client:

+
["serverSetting", [true, 30, "normal"]] remoteExecCall ["dragonfly_db_fnc_set", 2, false];
+

+Notes

+
    +
  • The function validates both the key and data before attempting to store
  • +
  • If the key already exists, its value will be overwritten
  • +
  • Complex data structures should be serialized into arrays
  • +
  • There are no size limits for data, but extremely large values might impact performance
  • +
  • For structured data, consider using hash tables instead of key-value pairs
  • +
+

+Related Functions

+
    +
  • dragonfly_db_fnc_get: Retrieves a value by key
  • +
  • dragonfly_db_fnc_delete: Removes a value by key
  • +
  • dragonfly_db_fnc_scheduler: Processes the callback response
  • +
+

+Links

+

Delete Key | Get Key | Set Key

+
+
+
+ + + + diff --git a/api/html/d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html b/api/html/d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html new file mode 100644 index 0000000..112b368 --- /dev/null +++ b/api/html/d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html @@ -0,0 +1,176 @@ + + + + + + + +ArmaDragonflyClient: listLoad + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
ArmaDragonflyClient +
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
listLoad
+
+
+

+autotoc_md307

+

title: ArmaDragonflyClient - List Load icon: mdi:file-text-outline

+

+excerpt: Get all elements of a list stored at a key from DragonflyClient.

+

+dragonfly_db_fnc_listLoad

+

+Description

+

Retrieves all elements of a list stored at a specified key from the DragonflyClient database. This function is useful when you need to access the complete list data rather than individual elements, allowing operations on the entire dataset. The retrieved data is passed to a callback function for processing.

+

+Syntax

+
[_key, _function, _call, _netId] call dragonfly_db_fnc_listLoad
+

+Parameters

+ + + + + + + + + + + +
Parameter Type Description Default
_key String The key identifying the list to be retrieved ""
_function String The name of the function that will receive the retrieved data ""
_call Boolean Whether to call the function in an unscheduled environment false
_netId String The NetID of the target to return data from the function (multiplayer only) ""
+

+Return Value

+

No value is returned directly. The retrieved list data is passed to the specified callback function asynchronously.

+

+Examples

+

Retrieve all event logs:

["events", "myProject_fnc_processEventLogs"] call dragonfly_db_fnc_listLoad;
+

Retrieve a player list with synchronous callback:

["playerList", "myProject_fnc_processPlayerList", true] call dragonfly_db_fnc_listLoad;
+

Send mission data to a specific client:

["missionData", "myProject_fnc_processMissionData", false, netId player] remoteExecCall ["dragonfly_db_fnc_listLoad", 2, false];
+

+Notes

+
    +
  • This function retrieves the entire list stored at the specified key, making it useful when you need to process multiple elements together.
  • +
  • Both the _key and _function parameters are required. The function will exit without action if either is empty.
  • +
  • The retrieved data is processed asynchronously through the scheduler system and passed to the specified callback function.
  • +
  • For multiplayer scenarios, you can specify a target client using the _netId parameter to send the retrieved data to that specific client.
  • +
  • The _call parameter determines whether the callback function is executed in an unscheduled environment (true) or scheduled environment (false).
  • +
  • This function uses the underlying "listrng" extension with a range from 0 to -1, which retrieves all elements in the list.
  • +
  • All list operations are logged for debugging purposes.
  • +
+

+Related Functions

+
    +
  • dragonfly_db_fnc_listAdd: Adds an element to a list
  • +
  • dragonfly_db_fnc_listGet: Retrieves a specific element from a list
  • +
  • dragonfly_db_fnc_listSet: Replaces a specific element in a list
  • +
  • dragonfly_db_fnc_listRemove: Removes a specific element from a list
  • +
  • dragonfly_db_fnc_scheduler: Processes the callback from the database extension
  • +
+

+Links

+

List Add | List Get | List Load | List Remove | List Set

+
+
+
+ + + + diff --git a/api/html/d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html b/api/html/d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html new file mode 100644 index 0000000..13d315d --- /dev/null +++ b/api/html/d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html @@ -0,0 +1,184 @@ + + + + + + + +ArmaDragonflyClient: hashGet + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
ArmaDragonflyClient +
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
hashGet
+
+
+

+autotoc_md163

+

title: ArmaDragonflyClient - Hash Get icon: mdi:file-text-outline

+

+excerpt: Get a field value from the current client's hash table in DragonflyClient.

+

+dragonfly_db_fnc_hashGet

+

+Description

+

Retrieves the value associated with a specific field in the hash table of the current client/player. This function automatically determines the appropriate hash ID based on the caller's identity, making it more convenient than hashGetId which requires manually specifying an ID. It accesses hash data asynchronously and returns the result through a callback function.

+

+Syntax

+
[_keyField, _function, _call, _netId] call dragonfly_db_fnc_hashGet
+

+Parameters

+ + + + + + + + + + + +
Parameter Type Description Default
_keyField String Name of the field in the hash to retrieve ""
_function String Name of the function to receive the retrieved data ""
_call Boolean Whether to call the function directly (true) or spawn (false) false
_netId String (Optional) NetID of the player to receive the data ""
+

+Return Value

+

None. The retrieved data is passed to the specified callback function asynchronously.

+

+Examples

+

+Retrieve a player's loadout:

+
["loadout", "dragonfly_db_fnc_test"] call dragonfly_db_fnc_hashGet;
+

+Retrieve data with synchronous callback:

+
["playerScore", "dragonfly_db_fnc_processScore", true] call dragonfly_db_fnc_hashGet;
+

+Retrieve data and send it to a specific client:

+
["loadout", "dragonfly_db_fnc_test", false, netId player] remoteExecCall ["dragonfly_db_fnc_hashGet", 2, false];
+

+Notes

+
    +
  • Retrieves a value from the current client's hash table
  • +
  • The data is retrieved asynchronously through the extension's callback system
  • +
  • Both the field name and callback function name must be provided
  • +
  • Input validation ensures both required parameters are non-empty
  • +
  • When a netId is provided, the data is sent to that specific client
  • +
  • The _call parameter determines whether the function is called directly (synchronous) or spawned (asynchronous)
  • +
  • This function automatically determines which hash table to use based on the caller's identity
  • +
  • Use hashGetId when you need to specify a particular hash table by ID
  • +
  • All operations are logged for debugging purposes
  • +
+

+Related Functions

+
    +
  • dragonfly_db_fnc_hashGetId: Retrieves a field value from a specific hash table (when you need to specify the ID)
  • +
  • dragonfly_db_fnc_hashGetAll: Retrieves all fields from the current client's hash table
  • +
  • dragonfly_db_fnc_hashGetAllId: Retrieves all fields from a specific hash table
  • +
  • dragonfly_db_fnc_hashSet: Sets a field value in the current client's hash table
  • +
  • dragonfly_db_fnc_scheduler: Processes the callback from the database extension
  • +
+

+Links

+

Hash Get | Hash Get All | Hash Get All ID | Hash Get ID | Hash Set | Hash Set Bulk | Hash Set ID | Hash Set ID Bulk

+
+
+
+ + + + diff --git a/api/html/da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html b/api/html/da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html new file mode 100644 index 0000000..907d0a2 --- /dev/null +++ b/api/html/da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html @@ -0,0 +1,182 @@ + + + + + + + +ArmaDragonflyClient: hashGetAll + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
ArmaDragonflyClient +
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
hashGetAll
+
+
+

+autotoc_md177

+

title: ArmaDragonflyClient - Hash Get All icon: mdi:file-text-outline

+

+excerpt: Get all fields from the current client's hash table in DragonflyClient.

+

+dragonfly_db_fnc_hashGetAll

+

+Description

+

Retrieves all fields and values from the hash table associated with the current client/player. This function automatically determines the appropriate hash ID based on the caller's identity, making it more convenient than hashGetAllId which requires manually specifying an ID. It returns the entire hash table data through a callback function, allowing access to all stored key-value pairs at once.

+

+Syntax

+
[_function, _call, _netId] call dragonfly_db_fnc_hashGetAll
+

+Parameters

+ + + + + + + + + +
Parameter Type Description Default
_function String Name of the function to receive the retrieved data ""
_call Boolean Whether to call the function directly (true) or spawn (false) false
_netId String (Optional) NetID of the player to receive the data ""
+

+Return Value

+

None. The retrieved data is passed to the specified callback function asynchronously.

+

+Examples

+

+Retrieve all client hash data:

+
["dragonfly_db_fnc_test"] call dragonfly_db_fnc_hashGetAll;
+

+Retrieve data with synchronous callback:

+
["dragonfly_db_fnc_processAllData", true] call dragonfly_db_fnc_hashGetAll;
+

+Retrieve data and send it to a specific client:

+
["dragonfly_db_fnc_test", false, netId player] remoteExecCall ["dragonfly_db_fnc_hashGetAll", 2, false];
+

+Notes

+
    +
  • Returns the complete hash table for the current client with all fields and values as a nested array
  • +
  • The data is retrieved asynchronously through the extension's callback system
  • +
  • The callback function name must be provided and is validated
  • +
  • When a netId is provided, the data is sent to that specific client
  • +
  • The _call parameter determines whether the function is called directly (synchronous) or spawned (asynchronous)
  • +
  • This function automatically determines which hash table to use based on the caller's identity
  • +
  • Use hashGetAllId when you need to specify a particular hash table by ID
  • +
  • For large hash tables, retrieving all data may impact performance
  • +
  • All operations are logged for debugging purposes
  • +
+

+Related Functions

+
    +
  • dragonfly_db_fnc_hashGet: Retrieves a specific field value from the current client's hash table
  • +
  • dragonfly_db_fnc_hashGetId: Retrieves a specific field value from a specific hash table (when you need to specify the ID)
  • +
  • dragonfly_db_fnc_hashGetAllId: Retrieves all fields from a specific hash table (when you need to specify the ID)
  • +
  • dragonfly_db_fnc_hashSet: Sets a field value in the current client's hash table
  • +
  • dragonfly_db_fnc_scheduler: Processes the callback from the database extension
  • +
+

+Links

+

Hash Get | Hash Get All | Hash Get All ID | Hash Get ID | Hash Set | Hash Set Bulk | Hash Set ID | Hash Set ID Bulk

+
+
+
+ + + + diff --git a/api/html/da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html b/api/html/da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html new file mode 100644 index 0000000..4e29382 --- /dev/null +++ b/api/html/da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html @@ -0,0 +1,179 @@ + + + + + + + +ArmaDragonflyClient: listAdd + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
ArmaDragonflyClient +
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
listAdd
+
+
+

+autotoc_md279

+

title: ArmaDragonflyClient - List Add icon: mdi:file-text-outline

+

+excerpt: Add element to list stored at key from DragonflyClient.

+

+dragonfly_db_fnc_listAdd

+

+Description

+

Adds an element to a list stored in the database under the specified key. This function appends values to an existing list or creates a new list if it doesn't exist. It's particularly useful for logging, event tracking, or maintaining collections of data that grow over time.

+

+Syntax

+
[_key, _data] call dragonfly_db_fnc_listAdd
+

+Parameters

+ + + + + + + +
Parameter Type Description Default
_key String Name of the list to add the element to ""
_data Array, String, Number, or Boolean The value to insert into the list []
+

+Return Value

+

None. The operation runs synchronously to add the element to the list.

+

+Examples

+

+Add an event log entry:

+
["events", ["Server state saved to DB " + systemTimeUTC]] call dragonfly_db_fnc_listAdd;
+

+Add a player message:

+
["messages", [name player + ": " + _messageText]] call dragonfly_db_fnc_listAdd;
+

+Add data from a client:

+
["playerActions", [getPlayerUID player, name player, "logged in"]] remoteExecCall ["dragonfly_db_fnc_listAdd", 2, false];
+

+Notes

+
    +
  • Elements are added to the end of the list in the order they are inserted
  • +
  • If the list doesn't exist, it will be created automatically
  • +
  • Both the key and data parameters are required and validated
  • +
  • Lists can store various data types (arrays, strings, numbers, or booleans)
  • +
  • Useful for maintaining a history of events, logs, or sequential data
  • +
  • The operation is executed immediately and synchronously
  • +
  • New elements are always added to the end of the list
  • +
  • All operations are logged for debugging purposes
  • +
+

+Related Functions

+
    +
  • dragonfly_db_fnc_listGet: Retrieves a specific element from a list
  • +
  • dragonfly_db_fnc_listLoad: Retrieves a range of elements from a list
  • +
  • dragonfly_db_fnc_listSet: Replaces a specific element in a list
  • +
  • dragonfly_db_fnc_listRemove: Removes a specific element from a list
  • +
  • dragonfly_db_fnc_scheduler: Processes the callback from the database extension
  • +
+

+Links

+

List Add | List Get | List Load | List Remove | List Set

+
+
+
+ + + + diff --git a/api/html/da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html b/api/html/da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html new file mode 100644 index 0000000..0bbadee --- /dev/null +++ b/api/html/da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html @@ -0,0 +1,178 @@ + + + + + + + +ArmaDragonflyClient: hashSetBulk + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
ArmaDragonflyClient +
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
hashSetBulk
+
+
+

+autotoc_md233

+

title: ArmaDragonflyClient - Hash Set Bulk icon: mdi:file-text-outline

+

+excerpt: Set multiple fields in the current client's hash table in DragonflyClient.

+

+dragonfly_db_fnc_hashSetBulk

+

+Description

+

Sets multiple field-value pairs in the hash table associated with the current client/player in a single operation. This function automatically determines the appropriate hash ID based on the caller's identity, making it more convenient than hashSetIdBulk which requires manually specifying an ID. It allows efficiently storing multiple related fields at once, reducing the number of separate database calls required.

+

+Syntax

+
[_data] call dragonfly_db_fnc_hashSetBulk
+

+Parameters

+ + + + + +
Parameter Type Description Default
_data Array Array of alternating field names and values to store []
+

+Return Value

+

None. The operation runs synchronously to store all the data.

+

+Examples

+

+Store player loadout and position:

+
[["loadout", [getUnitLoadout player], "position", [getPosASLVisual player]]] call dragonfly_db_fnc_hashSetBulk;
+

+Store multiple player settings:

+
[["difficulty", ["regular"], "respawn", [true], "tickets", [500]]] call dragonfly_db_fnc_hashSetBulk;
+

+Store player data from a client:

+
[["name", [name player], "uid", [getPlayerUID player], "score", [score player]]] remoteExecCall ["dragonfly_db_fnc_hashSetBulk", 2, false];
+

+Notes

+
    +
  • The data array must be structured as alternating field names and values: [field1, value1, field2, value2, ...]
  • +
  • Each field name must be a string
  • +
  • Values can be arrays, strings, numbers, or booleans
  • +
  • All field-value pairs are stored in a single database operation
  • +
  • If any of the fields already exist, their values will be overwritten
  • +
  • This function automatically determines which hash table to use based on the caller's identity
  • +
  • Use hashSetIdBulk when you need to specify a particular hash table by ID
  • +
  • More efficient than multiple individual hashSet calls when setting several fields
  • +
  • The operation is executed immediately and synchronously
  • +
  • All operations are logged for debugging purposes
  • +
+

+Related Functions

+
    +
  • dragonfly_db_fnc_hashSet: Sets a single field value in the current client's hash table
  • +
  • dragonfly_db_fnc_hashSetIdBulk: Sets multiple field-value pairs in a specific hash table (when you need to specify the ID)
  • +
  • dragonfly_db_fnc_hashGetAll: Retrieves all fields from the current client's hash table
  • +
  • dragonfly_db_fnc_hashGet: Retrieves a specific field value from the current client's hash table
  • +
+

+Links

+

Hash Get | Hash Get All | Hash Get All ID | Hash Get ID | Hash Set | Hash Set Bulk | Hash Set ID | Hash Set ID Bulk

+
+
+
+ + + + diff --git a/api/html/dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.html b/api/html/dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.html new file mode 100644 index 0000000..c559e41 --- /dev/null +++ b/api/html/dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.html @@ -0,0 +1,157 @@ + + + + + + + +ArmaDragonflyClient: init + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
ArmaDragonflyClient +
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
init
+
+
+

+autotoc_md95

+

title: ArmaDragonflyClient - Initialization icon: mdi:file-text-outline

+

+excerpt: Initial Extension settings.

+

+dragonfly_db_fnc_init

+

+Description

+

Initializes the ArmaDragonflyClient extension and sets up the initial settings. This function loads the extension, checks its version, sets the buffer size, and logs the initialization status. It is automatically called during mission startup.

+

+Syntax

+
// This function is automatically called during initialization and doesn't need to be called directly
+

+Parameters

+

None. This function does not require any parameters.

+

+Return Value

+

None. The function sets up internal variables and logs initialization information.

+

+Examples

+

This function is automatically executed during framework initialization and doesn't need to be called manually.

+

+Notes

+
    +
  • Sets the global buffer size to 10240 bytes (10KB)
  • +
  • Logs the DLL version number for reference
  • +
  • Confirms successful loading of all functions
  • +
  • Outputs initialization status to the RPT logs
  • +
  • This is one of the first functions called when the framework loads
  • +
+

+Related Functions

+
    +
  • dragonfly_db_fnc_save: Saves database data to disk
  • +
+

+Links

+

Add Task | Handler | Init | Print Addon Name | Process Queue | Scheduler | Test

+
+
+
+ + + + diff --git a/api/html/dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html b/api/html/dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html new file mode 100644 index 0000000..600095f --- /dev/null +++ b/api/html/dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html @@ -0,0 +1,186 @@ + + + + + + + +ArmaDragonflyClient: addTask + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
ArmaDragonflyClient +
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
addTask
+
+
+

+autotoc_md67

+

title: ArmaDragonflyClient - Add Task icon: mdi:file-text-outline

+

+excerpt: Add task to queue.

+

+dragonfly_db_fnc_addTask

+

+Description

+

Adds a task to the database operation queue. This function is used to schedule database operations that can be processed sequentially, providing a way to manage multiple database requests in an organized manner.

+

+Syntax

+
[_taskType, _key, _keyField, _index, _value, _function, _call, _netId] call dragonfly_db_fnc_addTask
+

+Parameters

+ + + + + + + + + + + + + + + + + + + +
Parameter Type Description Default
_taskType String Type of operation to perform (e.g., "hgetall") ""
_key String Name of the stored key ""
_keyField String Field name for hash operations ""
_index Number Index for list operations -1
_value Array, String, Number, or Boolean Value to store (for set operations) []
_function String Name of function to call with the result ""
_call Boolean Whether to call the function directly (true) or spawn (false) false
_netId String NetID of the target to receive the result ""
+

+Return Value

+

None. The task is added to the queue and processed asynchronously.

+

+Examples

+

+Add a hash table retrieval task:

+
["hgetall", "", "", -1, [], "dragonfly_db_fnc_test"] call dragonfly_db_fnc_addTask;
+

+Add a player-specific task that returns data to a specific client:

+
["hgetallid", getPlayerUID player, "", -1, [], "dragonfly_db_fnc_test", false, netId player] remoteExecCall ["dragonfly_db_fnc_addTask", 2, false];
+

+Add a list operation task:

+
["listadd", "playerMessages", "", -1, ["New message content"], ""] call dragonfly_db_fnc_addTask;
+

+Notes

+
    +
  • Tasks are processed in the order they are added to the queue
  • +
  • If the queue is not currently being processed, this function will start the processing
  • +
  • The task type determines which database operation will be performed
  • +
  • This function is particularly useful for scheduling multiple related operations
  • +
  • All operations performed through the task queue are logged for debugging
  • +
+

+Related Functions

+
    +
  • dragonfly_db_fnc_processQueue: Processes the pending tasks in the queue
  • +
  • dragonfly_db_fnc_handler: Handles the results of completed database operations
  • +
  • dragonfly_db_fnc_scheduler: Manages callback responses from the database
  • +
+

+Links

+

Add Task | Handler | Init | Print Addon Name | Process Queue | Scheduler | Test

+
+
+
+ + + + diff --git a/api/html/de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html b/api/html/de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html new file mode 100644 index 0000000..d59bdb5 --- /dev/null +++ b/api/html/de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html @@ -0,0 +1,179 @@ + + + + + + + +ArmaDragonflyClient: hashSetIdBulk + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
ArmaDragonflyClient +
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
hashSetIdBulk
+
+
+

+autotoc_md261

+

title: ArmaDragonflyClient - Hash Set ID Bulk icon: mdi:file-text-outline

+

+excerpt: Set the specified fields to their respective values in the hash stored at key from DragonflyClient.

+

+dragonfly_db_fnc_hashSetIdBulk

+

+Description

+

Sets multiple field-value pairs in a specific hash table identified by its key in a single operation. This function allows efficiently storing multiple related fields at once for a specific identifier, reducing the number of separate database calls required. It's ideal for saving a collection of player-specific or entity-specific data.

+

+Syntax

+
[_data] call dragonfly_db_fnc_hashSetIdBulk
+

+Parameters

+ + + + + +
Parameter Type Description Default
_data Array Array with key followed by alternating field names and values []
+

+Return Value

+

None. The operation runs synchronously to store all the data.

+

+Examples

+

+Store player loadout and position:

+
[[getPlayerUID player, "loadout", [getUnitLoadout player], "position", [getPosASLVisual player]]] call dragonfly_db_fnc_hashSetIdBulk;
+

+Store multiple vehicle properties:

+
[["vehicle_123", "fuel", [0.75], "damage", [0.2], "crew", [["player1", "player2"]]]] call dragonfly_db_fnc_hashSetIdBulk;
+

+Store player data from a client:

+
[[getPlayerUID player, "stats", [score player], "inventory", [getAllGear player]]] remoteExecCall ["dragonfly_db_fnc_hashSetIdBulk", 2, false];
+

+Notes

+
    +
  • The data array must be structured with the key first, followed by alternating field names and values: [key, field1, value1, field2, value2, ...]
  • +
  • The key must be a string that identifies the specific hash table
  • +
  • Each field name must be a string
  • +
  • Values can be arrays, strings, numbers, or booleans
  • +
  • All field-value pairs are stored in a single database operation
  • +
  • If the hash table doesn't exist, it will be created automatically
  • +
  • If any of the fields already exist in the hash table, their values will be overwritten
  • +
  • More efficient than multiple individual hashSetId calls when setting several fields
  • +
  • Player UIDs are commonly used as keys to store player-specific data
  • +
  • The operation is executed immediately and synchronously
  • +
  • All operations are logged for debugging purposes
  • +
+

+Related Functions

+
    +
  • dragonfly_db_fnc_hashSetId: Sets a single field value in a specific hash table
  • +
  • dragonfly_db_fnc_hashSetBulk: Sets multiple field-value pairs in the global hash table
  • +
  • dragonfly_db_fnc_hashGetAllId: Retrieves all fields from a specific hash table
  • +
  • dragonfly_db_fnc_hashGetId: Retrieves a specific field value from a specific hash table
  • +
+

+Links

+

Hash Get | Hash Get All | Hash Get All ID | Hash Get ID | Hash Set | Hash Set Bulk | Hash Set ID | Hash Set ID Bulk

+
+
+
+ + + + diff --git a/api/html/df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html b/api/html/df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html new file mode 100644 index 0000000..616ce77 --- /dev/null +++ b/api/html/df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html @@ -0,0 +1,167 @@ + + + + + + + +ArmaDragonflyClient: delete + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
ArmaDragonflyClient +
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
delete
+
+
+

+autotoc_md0

+

title: ArmaDragonflyClient - Delete Key icon: mdi:file-text-outline

+

+excerpt: Remove the specified key from DragonflyClient.

+

+dragonfly_db_fnc_delete

+

+Description

+

Removes the specified key from the database. This function deletes the key-value pair completely from storage.

+

+Syntax

+
[_key] call dragonfly_db_fnc_delete
+

+Parameters

+ + + + + +
Parameter Type Description
_key String Name of the key to delete from the database
+

+Return Value

+

None. The operation runs asynchronously.

+

+Examples

+

+Delete a key in singleplayer or on the server:

+
["playerData"] call dragonfly_db_fnc_delete;
+

+Delete a key on the server from a client:

+
["playerData"] remoteExecCall ["dragonfly_db_fnc_delete", 2, false];
+

+Notes

+
    +
  • This operation is permanent and cannot be undone
  • +
  • If the key doesn't exist, the operation will have no effect
  • +
  • This function only affects specific keys, not hash tables or lists
  • +
+

+Related Functions

+
    +
  • dragonfly_db_fnc_get: Retrieves a value by key
  • +
  • dragonfly_db_fnc_set: Stores a value by key
  • +
  • dragonfly_db_fnc_scheduler: Processes the callback response
  • +
+

+Links

+

Delete Key | Get Key | Set Key

+
+
+
+ + + + diff --git a/api/html/dir_10eb6422e80bd721a9a7af022f58c68b.html b/api/html/dir_10eb6422e80bd721a9a7af022f58c68b.html new file mode 100644 index 0000000..11195a4 --- /dev/null +++ b/api/html/dir_10eb6422e80bd721a9a7af022f58c68b.html @@ -0,0 +1,145 @@ + + + + + + + +ArmaDragonflyClient: G:/ids/dragonfly/docs/core Directory Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
ArmaDragonflyClient +
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
core Directory Reference
+
+
+

Detailed Description

+

This section contains documentation for the core functions of ArmaDragonflyClient that handle initialization, process management, and scheduling.

+

+Available Functions

+ +

+Example Usage

+
// Initialize the database
+
[] call dragonfly_db_fnc_init;
+
+
// Test the database connection
+
[] call dragonfly_db_fnc_test;
+

+Related Categories

+ +
+
+ + + + diff --git a/api/html/dir_1d1eabba2c636e67297dc8cee9bc9944.html b/api/html/dir_1d1eabba2c636e67297dc8cee9bc9944.html new file mode 100644 index 0000000..5a51b9c --- /dev/null +++ b/api/html/dir_1d1eabba2c636e67297dc8cee9bc9944.html @@ -0,0 +1,157 @@ + + + + + + + +ArmaDragonflyClient: G:/ids/dragonfly/docs/hash Directory Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
ArmaDragonflyClient +
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
hash Directory Reference
+
+
+

Detailed Description

+

This section contains documentation for the hash operations of ArmaDragonflyClient that allow for working with hash tables (key-value pairs within a namespace).

+

+Available Functions

+ +

+Example Usage

+
// Context mode examples
+
["myField", [myValue]] call dragonfly_db_fnc_hashSet;
+
["myField", "myFunction"] call dragonfly_db_fnc_hashGet;
+
["myFunction"] call dragonfly_db_fnc_hashGetAll;
+
+
// Set multiple hash fields in one operation
+
[[
+
"loadout", [getUnitLoadout player],
+
"position", [getPosASL player],
+
"direction", [getDir player]
+
]] call dragonfly_db_fnc_hashSetBulk;
+
+
// ID-specific examples
+
["myHash", "myField", [myValue]] call dragonfly_db_fnc_hashSetId;
+
["myHash", "myField", "myFunction"] call dragonfly_db_fnc_hashGetId;
+
["myHash"] call dragonfly_db_fnc_hashGetAllId;
+

+Related Categories

+ +
+
+ + + + diff --git a/api/html/dir_4373328136309bbaba010b91e95ca4c6.html b/api/html/dir_4373328136309bbaba010b91e95ca4c6.html new file mode 100644 index 0000000..99af237 --- /dev/null +++ b/api/html/dir_4373328136309bbaba010b91e95ca4c6.html @@ -0,0 +1,124 @@ + + + + + + + +ArmaDragonflyClient: G:/ids/dragonfly Directory Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
ArmaDragonflyClient +
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
dragonfly Directory Reference
+
+
+ + + + +

+Directories

 docs
 
+
+
+ + + + diff --git a/api/html/dir_6b1f4820e2481aa5a1ea9b2275f196d9.html b/api/html/dir_6b1f4820e2481aa5a1ea9b2275f196d9.html new file mode 100644 index 0000000..78744da --- /dev/null +++ b/api/html/dir_6b1f4820e2481aa5a1ea9b2275f196d9.html @@ -0,0 +1,270 @@ + + + + + + + +ArmaDragonflyClient: G:/ids/dragonfly/docs Directory Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
ArmaDragonflyClient +
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
docs Directory Reference
+
+
+ + + + + + + + + + +

+Directories

 basic
 
 core
 
 hash
 
 list
 
+

Detailed Description

+

This documentation provides details on all functions available in ArmaDragonflyClient. These functions allow you to interact with the in-memory database system for Arma 3.

+

+Function Categories

+

The functions are categorized by their purpose:

+

+Core Functions

+ +

+Basic Data Operations

+ +

+Hash Operations

+ +

+List Operations

+ +

+Usage Examples

+

+Basic Usage

+
// Initialize the database
+
[] call dragonfly_db_fnc_init;
+
+
// Set a value
+
["myKey", [myValue]] call dragonfly_db_fnc_set;
+
+
// Get a value
+
["myKey", "myFunction"] call dragonfly_db_fnc_get;
+
+
// Delete a key
+
["myKey"] call dragonfly_db_fnc_delete;
+

+Hash Operations

+
// Set a hash field (context mode)
+
["myField", [myValue]] call dragonfly_db_fnc_hashSet;
+
+
// Get a hash field (context mode)
+
["myField", "myFunction"] call dragonfly_db_fnc_hashGet;
+
+
// Get all hash fields (context mode)
+
["myFunction"] call dragonfly_db_fnc_hashGetAll;
+
+
// Set multiple hash fields (context mode)
+
[[
+
"loadout", [getUnitLoadout player],
+
"position", [getPosASL player],
+
"direction", [getDir player],
+
"stance", [stance player]
+
]] call dragonfly_db_fnc_hashSetBulk;
+
+
// Remove a hash field (context mode)
+
["myField"] call dragonfly_db_fnc_hashRemove;
+
+
// Delete a hash table (context mode)
+
[] call dragonfly_db_fnc_hashDelete;
+
// Set a hash field for specific ID
+
["myHash", "myField", [myValue]] call dragonfly_db_fnc_hashSetId;
+
+
// Get a hash field for specific ID
+
["myHash", "myField", "myFunction"] call dragonfly_db_fnc_hashGetId;
+
+
// Get all hash fields for specific ID
+
["myHash"] call dragonfly_db_fnc_hashGetAllId;
+
+
// Set multiple hash fields for specific ID
+
[[
+
getPlayerUID player,
+
"loadout", [getUnitLoadout player],
+
"position", [getPosASL player],
+
"direction", [getDir player],
+
"stance", [stance player]
+
]] call dragonfly_db_fnc_hashSetIdBulk;
+
+
// Remove a hash field for specific ID
+
["myHash", "myField"] call dragonfly_db_fnc_hashRemoveId;
+
+
// Delete a hash table for specific ID
+
["myHash"] call dragonfly_db_fnc_hashDeleteId;
+

+List Operations

+
// Add an item to a list
+
["myList", ["myItem"]] call dragonfly_db_fnc_listAdd;
+
+
// Set an item from a list
+
["myList", 0, [myNewValue]] call dragonfly_db_fnc_listSet;
+
+
// Get an item from a list
+
["myList", 0, "myFunction"] call dragonfly_db_fnc_listGet;
+
+
// Get items from a list
+
["myList", "myFunction"] call dragonfly_db_fnc_listLoad;
+
+
// Remove an item from a list
+
["myList", 0] call dragonfly_db_fnc_listRemove;
+
+
// Delete a list
+
["myList"] call dragonfly_db_fnc_listDelete;
+

+Function Documentation Structure

+

Each function documentation includes:

+

+License

+

This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit https://creativecommons.org/licenses/by-nc-sa/4.0/ or send a letter to Creative Commons,
+PO Box 1866, Mountain View, CA 94042

+
+
+ + + + diff --git a/api/html/dir_71f12be5768ca2af9c9f300d019944af.html b/api/html/dir_71f12be5768ca2af9c9f300d019944af.html new file mode 100644 index 0000000..eb9306f --- /dev/null +++ b/api/html/dir_71f12be5768ca2af9c9f300d019944af.html @@ -0,0 +1,149 @@ + + + + + + + +ArmaDragonflyClient: G:/ids/dragonfly/docs/basic Directory Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
ArmaDragonflyClient +
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
basic Directory Reference
+
+
+

Detailed Description

+

This section contains documentation for the basic data operations of ArmaDragonflyClient that allow for simple key-value storage and retrieval.

+

+Available Functions

+ +

+Example Usage

+
// Set a value
+
["myKey", [myValue]] call dragonfly_db_fnc_set;
+
+
// Get a value
+
["myKey", "myFunction"] call dragonfly_db_fnc_get;
+
+
// Delete a key
+
["myKey"] call dragonfly_db_fnc_delete;
+
+
// Save database to disk
+
[] call dragonfly_db_fnc_save;
+

+Related Categories

+ +
+
+ + + + diff --git a/api/html/dir_72c6efb7383bf0530aa073c1e7428252.html b/api/html/dir_72c6efb7383bf0530aa073c1e7428252.html new file mode 100644 index 0000000..ebaad6b --- /dev/null +++ b/api/html/dir_72c6efb7383bf0530aa073c1e7428252.html @@ -0,0 +1,152 @@ + + + + + + + +ArmaDragonflyClient: G:/ids/dragonfly/docs/list Directory Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
ArmaDragonflyClient +
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
list Directory Reference
+
+
+

Detailed Description

+

This section contains documentation for the list operations of ArmaDragonflyClient that allow for working with ordered collections of items.

+

+Available Functions

+ +

+Example Usage

+
// Add an item to a list
+
["myList", ["myItem"]] call dragonfly_db_fnc_listAdd;
+
+
// Set an item at a specific index
+
["myList", 0, [myNewValue]] call dragonfly_db_fnc_listSet;
+
+
// Get an item at a specific index
+
["myList", 0, "myFunction"] call dragonfly_db_fnc_listGet;
+
+
// Load all items from a list
+
["myList", "myFunction"] call dragonfly_db_fnc_listLoad;
+
+
// Remove an item at a specific index
+
["myList", 0] call dragonfly_db_fnc_listRemove;
+

+Related Categories

+ +
+
+ + + + diff --git a/api/html/doc.svg b/api/html/doc.svg new file mode 100644 index 0000000..0b928a5 --- /dev/null +++ b/api/html/doc.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/api/html/docd.svg b/api/html/docd.svg new file mode 100644 index 0000000..ac18b27 --- /dev/null +++ b/api/html/docd.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/api/html/doxygen.css b/api/html/doxygen.css new file mode 100644 index 0000000..4947e24 --- /dev/null +++ b/api/html/doxygen.css @@ -0,0 +1,2255 @@ +/* The standard CSS for doxygen 1.13.2*/ + +html { +/* page base colors */ +--page-background-color: white; +--page-foreground-color: black; +--page-link-color: #3D578C; +--page-visited-link-color: #4665A2; + +/* index */ +--index-odd-item-bg-color: #F8F9FC; +--index-even-item-bg-color: white; +--index-header-color: black; +--index-separator-color: #A0A0A0; + +/* header */ +--header-background-color: #F9FAFC; +--header-separator-color: #C4CFE5; +--header-gradient-image: url('nav_h.png'); +--group-header-separator-color: #879ECB; +--group-header-color: #354C7B; +--inherit-header-color: gray; + +--footer-foreground-color: #2A3D61; +--footer-logo-width: 104px; +--citation-label-color: #334975; +--glow-color: cyan; + +--title-background-color: white; +--title-separator-color: #5373B4; +--directory-separator-color: #9CAFD4; +--separator-color: #4A6AAA; + +--blockquote-background-color: #F7F8FB; +--blockquote-border-color: #9CAFD4; + +--scrollbar-thumb-color: #9CAFD4; +--scrollbar-background-color: #F9FAFC; + +--icon-background-color: #728DC1; +--icon-foreground-color: white; +--icon-doc-image: url('doc.svg'); +--icon-folder-open-image: url('folderopen.svg'); +--icon-folder-closed-image: url('folderclosed.svg'); + +/* brief member declaration list */ +--memdecl-background-color: #F9FAFC; +--memdecl-separator-color: #DEE4F0; +--memdecl-foreground-color: #555; +--memdecl-template-color: #4665A2; + +/* detailed member list */ +--memdef-border-color: #A8B8D9; +--memdef-title-background-color: #E2E8F2; +--memdef-title-gradient-image: url('nav_f.png'); +--memdef-proto-background-color: #DFE5F1; +--memdef-proto-text-color: #253555; +--memdef-proto-text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); +--memdef-doc-background-color: white; +--memdef-param-name-color: #602020; +--memdef-template-color: #4665A2; + +/* tables */ +--table-cell-border-color: #2D4068; +--table-header-background-color: #374F7F; +--table-header-foreground-color: #FFFFFF; + +/* labels */ +--label-background-color: #728DC1; +--label-left-top-border-color: #5373B4; +--label-right-bottom-border-color: #C4CFE5; +--label-foreground-color: white; + +/** navigation bar/tree/menu */ +--nav-background-color: #F9FAFC; +--nav-foreground-color: #364D7C; +--nav-gradient-image: url('tab_b.png'); +--nav-gradient-hover-image: url('tab_h.png'); +--nav-gradient-active-image: url('tab_a.png'); +--nav-gradient-active-image-parent: url("../tab_a.png"); +--nav-separator-image: url('tab_s.png'); +--nav-breadcrumb-image: url('bc_s.png'); +--nav-breadcrumb-border-color: #C2CDE4; +--nav-splitbar-image: url('splitbar.png'); +--nav-font-size-level1: 13px; +--nav-font-size-level2: 10px; +--nav-font-size-level3: 9px; +--nav-text-normal-color: #283A5D; +--nav-text-hover-color: white; +--nav-text-active-color: white; +--nav-text-normal-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); +--nav-text-hover-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-text-active-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-menu-button-color: #364D7C; +--nav-menu-background-color: white; +--nav-menu-foreground-color: #555555; +--nav-menu-toggle-color: rgba(255, 255, 255, 0.5); +--nav-arrow-color: #9CAFD4; +--nav-arrow-selected-color: #9CAFD4; + +/* table of contents */ +--toc-background-color: #F4F6FA; +--toc-border-color: #D8DFEE; +--toc-header-color: #4665A2; +--toc-down-arrow-image: url("data:image/svg+xml;utf8,&%238595;"); + +/** search field */ +--search-background-color: white; +--search-foreground-color: #909090; +--search-magnification-image: url('mag.svg'); +--search-magnification-select-image: url('mag_sel.svg'); +--search-active-color: black; +--search-filter-background-color: #F9FAFC; +--search-filter-foreground-color: black; +--search-filter-border-color: #90A5CE; +--search-filter-highlight-text-color: white; +--search-filter-highlight-bg-color: #3D578C; +--search-results-foreground-color: #425E97; +--search-results-background-color: #EEF1F7; +--search-results-border-color: black; +--search-box-shadow: inset 0.5px 0.5px 3px 0px #555; + +/** code fragments */ +--code-keyword-color: #008000; +--code-type-keyword-color: #604020; +--code-flow-keyword-color: #E08000; +--code-comment-color: #800000; +--code-preprocessor-color: #806020; +--code-string-literal-color: #002080; +--code-char-literal-color: #008080; +--code-xml-cdata-color: black; +--code-vhdl-digit-color: #FF00FF; +--code-vhdl-char-color: #000000; +--code-vhdl-keyword-color: #700070; +--code-vhdl-logic-color: #FF0000; +--code-link-color: #4665A2; +--code-external-link-color: #4665A2; +--fragment-foreground-color: black; +--fragment-background-color: #FBFCFD; +--fragment-border-color: #C4CFE5; +--fragment-lineno-border-color: #00FF00; +--fragment-lineno-background-color: #E8E8E8; +--fragment-lineno-foreground-color: black; +--fragment-lineno-link-fg-color: #4665A2; +--fragment-lineno-link-bg-color: #D8D8D8; +--fragment-lineno-link-hover-fg-color: #4665A2; +--fragment-lineno-link-hover-bg-color: #C8C8C8; +--fragment-copy-ok-color: #2EC82E; +--tooltip-foreground-color: black; +--tooltip-background-color: white; +--tooltip-border-color: gray; +--tooltip-doc-color: grey; +--tooltip-declaration-color: #006318; +--tooltip-link-color: #4665A2; +--tooltip-shadow: 1px 1px 7px gray; +--fold-line-color: #808080; +--fold-minus-image: url('minus.svg'); +--fold-plus-image: url('plus.svg'); +--fold-minus-image-relpath: url('../../minus.svg'); +--fold-plus-image-relpath: url('../../plus.svg'); + +/** font-family */ +--font-family-normal: Roboto,sans-serif; +--font-family-monospace: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +--font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +--font-family-title: Tahoma,Arial,sans-serif; +--font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; +--font-family-search: Arial,Verdana,sans-serif; +--font-family-icon: Arial,Helvetica; +--font-family-tooltip: Roboto,sans-serif; + +/** special sections */ +--warning-color-bg: #f8d1cc; +--warning-color-hl: #b61825; +--warning-color-text: #75070f; +--note-color-bg: #faf3d8; +--note-color-hl: #f3a600; +--note-color-text: #5f4204; +--todo-color-bg: #e4f3ff; +--todo-color-hl: #1879C4; +--todo-color-text: #274a5c; +--test-color-bg: #e8e8ff; +--test-color-hl: #3939C4; +--test-color-text: #1a1a5c; +--deprecated-color-bg: #ecf0f3; +--deprecated-color-hl: #5b6269; +--deprecated-color-text: #43454a; +--bug-color-bg: #e4dafd; +--bug-color-hl: #5b2bdd; +--bug-color-text: #2a0d72; +--invariant-color-bg: #d8f1e3; +--invariant-color-hl: #44b86f; +--invariant-color-text: #265532; +} + +@media (prefers-color-scheme: dark) { + html:not(.dark-mode) { + color-scheme: dark; + +/* page base colors */ +--page-background-color: black; +--page-foreground-color: #C9D1D9; +--page-link-color: #90A5CE; +--page-visited-link-color: #A3B4D7; + +/* index */ +--index-odd-item-bg-color: #0B101A; +--index-even-item-bg-color: black; +--index-header-color: #C4CFE5; +--index-separator-color: #334975; + +/* header */ +--header-background-color: #070B11; +--header-separator-color: #141C2E; +--header-gradient-image: url('nav_hd.png'); +--group-header-separator-color: #283A5D; +--group-header-color: #90A5CE; +--inherit-header-color: #A0A0A0; + +--footer-foreground-color: #5B7AB7; +--footer-logo-width: 60px; +--citation-label-color: #90A5CE; +--glow-color: cyan; + +--title-background-color: #090D16; +--title-separator-color: #354C79; +--directory-separator-color: #283A5D; +--separator-color: #283A5D; + +--blockquote-background-color: #101826; +--blockquote-border-color: #283A5D; + +--scrollbar-thumb-color: #283A5D; +--scrollbar-background-color: #070B11; + +--icon-background-color: #334975; +--icon-foreground-color: #C4CFE5; +--icon-doc-image: url('docd.svg'); +--icon-folder-open-image: url('folderopend.svg'); +--icon-folder-closed-image: url('folderclosedd.svg'); + +/* brief member declaration list */ +--memdecl-background-color: #0B101A; +--memdecl-separator-color: #2C3F65; +--memdecl-foreground-color: #BBB; +--memdecl-template-color: #7C95C6; + +/* detailed member list */ +--memdef-border-color: #233250; +--memdef-title-background-color: #1B2840; +--memdef-title-gradient-image: url('nav_fd.png'); +--memdef-proto-background-color: #19243A; +--memdef-proto-text-color: #9DB0D4; +--memdef-proto-text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.9); +--memdef-doc-background-color: black; +--memdef-param-name-color: #D28757; +--memdef-template-color: #7C95C6; + +/* tables */ +--table-cell-border-color: #283A5D; +--table-header-background-color: #283A5D; +--table-header-foreground-color: #C4CFE5; + +/* labels */ +--label-background-color: #354C7B; +--label-left-top-border-color: #4665A2; +--label-right-bottom-border-color: #283A5D; +--label-foreground-color: #CCCCCC; + +/** navigation bar/tree/menu */ +--nav-background-color: #101826; +--nav-foreground-color: #364D7C; +--nav-gradient-image: url('tab_bd.png'); +--nav-gradient-hover-image: url('tab_hd.png'); +--nav-gradient-active-image: url('tab_ad.png'); +--nav-gradient-active-image-parent: url("../tab_ad.png"); +--nav-separator-image: url('tab_sd.png'); +--nav-breadcrumb-image: url('bc_sd.png'); +--nav-breadcrumb-border-color: #2A3D61; +--nav-splitbar-image: url('splitbard.png'); +--nav-font-size-level1: 13px; +--nav-font-size-level2: 10px; +--nav-font-size-level3: 9px; +--nav-text-normal-color: #B6C4DF; +--nav-text-hover-color: #DCE2EF; +--nav-text-active-color: #DCE2EF; +--nav-text-normal-shadow: 0px 1px 1px black; +--nav-text-hover-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-text-active-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-menu-button-color: #B6C4DF; +--nav-menu-background-color: #05070C; +--nav-menu-foreground-color: #BBBBBB; +--nav-menu-toggle-color: rgba(255, 255, 255, 0.2); +--nav-arrow-color: #334975; +--nav-arrow-selected-color: #90A5CE; + +/* table of contents */ +--toc-background-color: #151E30; +--toc-border-color: #202E4A; +--toc-header-color: #A3B4D7; +--toc-down-arrow-image: url("data:image/svg+xml;utf8,&%238595;"); + +/** search field */ +--search-background-color: black; +--search-foreground-color: #C5C5C5; +--search-magnification-image: url('mag_d.svg'); +--search-magnification-select-image: url('mag_seld.svg'); +--search-active-color: #C5C5C5; +--search-filter-background-color: #101826; +--search-filter-foreground-color: #90A5CE; +--search-filter-border-color: #7C95C6; +--search-filter-highlight-text-color: #BCC9E2; +--search-filter-highlight-bg-color: #283A5D; +--search-results-background-color: #101826; +--search-results-foreground-color: #90A5CE; +--search-results-border-color: #7C95C6; +--search-box-shadow: inset 0.5px 0.5px 3px 0px #2F436C; + +/** code fragments */ +--code-keyword-color: #CC99CD; +--code-type-keyword-color: #AB99CD; +--code-flow-keyword-color: #E08000; +--code-comment-color: #717790; +--code-preprocessor-color: #65CABE; +--code-string-literal-color: #7EC699; +--code-char-literal-color: #00E0F0; +--code-xml-cdata-color: #C9D1D9; +--code-vhdl-digit-color: #FF00FF; +--code-vhdl-char-color: #C0C0C0; +--code-vhdl-keyword-color: #CF53C9; +--code-vhdl-logic-color: #FF0000; +--code-link-color: #79C0FF; +--code-external-link-color: #79C0FF; +--fragment-foreground-color: #C9D1D9; +--fragment-background-color: #090D16; +--fragment-border-color: #30363D; +--fragment-lineno-border-color: #30363D; +--fragment-lineno-background-color: black; +--fragment-lineno-foreground-color: #6E7681; +--fragment-lineno-link-fg-color: #6E7681; +--fragment-lineno-link-bg-color: #303030; +--fragment-lineno-link-hover-fg-color: #8E96A1; +--fragment-lineno-link-hover-bg-color: #505050; +--fragment-copy-ok-color: #0EA80E; +--tooltip-foreground-color: #C9D1D9; +--tooltip-background-color: #202020; +--tooltip-border-color: #C9D1D9; +--tooltip-doc-color: #D9E1E9; +--tooltip-declaration-color: #20C348; +--tooltip-link-color: #79C0FF; +--tooltip-shadow: none; +--fold-line-color: #808080; +--fold-minus-image: url('minusd.svg'); +--fold-plus-image: url('plusd.svg'); +--fold-minus-image-relpath: url('../../minusd.svg'); +--fold-plus-image-relpath: url('../../plusd.svg'); + +/** font-family */ +--font-family-normal: Roboto,sans-serif; +--font-family-monospace: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +--font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +--font-family-title: Tahoma,Arial,sans-serif; +--font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; +--font-family-search: Arial,Verdana,sans-serif; +--font-family-icon: Arial,Helvetica; +--font-family-tooltip: Roboto,sans-serif; + +/** special sections */ +--warning-color-bg: #2e1917; +--warning-color-hl: #ad2617; +--warning-color-text: #f5b1aa; +--note-color-bg: #3b2e04; +--note-color-hl: #f1b602; +--note-color-text: #ceb670; +--todo-color-bg: #163750; +--todo-color-hl: #1982D2; +--todo-color-text: #dcf0fa; +--test-color-bg: #121258; +--test-color-hl: #4242cf; +--test-color-text: #c0c0da; +--deprecated-color-bg: #2e323b; +--deprecated-color-hl: #738396; +--deprecated-color-text: #abb0bd; +--bug-color-bg: #2a2536; +--bug-color-hl: #7661b3; +--bug-color-text: #ae9ed6; +--invariant-color-bg: #303a35; +--invariant-color-hl: #76ce96; +--invariant-color-text: #cceed5; +}} +body { + background-color: var(--page-background-color); + color: var(--page-foreground-color); +} + +body, table, div, p, dl { + font-weight: 400; + font-size: 14px; + font-family: var(--font-family-normal); + line-height: 22px; +} + +/* @group Heading Levels */ + +.title { + font-family: var(--font-family-normal); + line-height: 28px; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h1.groupheader { + font-size: 150%; +} + +h2.groupheader { + border-bottom: 1px solid var(--group-header-separator-color); + color: var(--group-header-color); + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px var(--glow-color); +} + +dt { + font-weight: bold; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +th p.starttd, th p.intertd, th p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.navtab { + padding-right: 15px; + text-align: right; + line-height: 110%; +} + +div.navtab table { + border-spacing: 0; +} + +td.navtab { + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL { + background-image: var(--nav-gradient-active-image); + background-repeat:repeat-x; + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL a, td.navtabHL a:visited { + color: var(--nav-text-hover-color); + text-shadow: var(--nav-text-hover-shadow); +} + +a.navtab { + font-weight: bold; +} + +div.qindex{ + text-align: center; + width: 100%; + line-height: 140%; + font-size: 130%; + color: var(--index-separator-color); +} + +#main-menu a:focus { + outline: auto; + z-index: 10; + position: relative; +} + +dt.alphachar{ + font-size: 180%; + font-weight: bold; +} + +.alphachar a{ + color: var(--index-header-color); +} + +.alphachar a:hover, .alphachar a:visited{ + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count:1 +} + +.classindex dd { + display:inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.even { + background-color: var(--index-even-item-bg-color); +} + +.classindex dl.odd { + background-color: var(--index-odd-item-bg-color); +} + +@media(min-width: 1120px) { + .classindex dl { + column-count:2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count:3 + } +} + + +/* @group Link Styling */ + +a { + color: var(--page-link-color); + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: var(--page-visited-link-color); +} + +a:hover { + text-decoration: none; + background: linear-gradient(to bottom, transparent 0,transparent calc(100% - 1px), currentColor 100%); +} + +a:hover > span.arrow { + text-decoration: none; + background : var(--nav-background-color); +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: var(--code-link-color); +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: var(--code-external-link-color); +} + +a.code.hl_class { /* style for links to class names in code snippets */ } +a.code.hl_struct { /* style for links to struct names in code snippets */ } +a.code.hl_union { /* style for links to union names in code snippets */ } +a.code.hl_interface { /* style for links to interface names in code snippets */ } +a.code.hl_protocol { /* style for links to protocol names in code snippets */ } +a.code.hl_category { /* style for links to category names in code snippets */ } +a.code.hl_exception { /* style for links to exception names in code snippets */ } +a.code.hl_service { /* style for links to service names in code snippets */ } +a.code.hl_singleton { /* style for links to singleton names in code snippets */ } +a.code.hl_concept { /* style for links to concept names in code snippets */ } +a.code.hl_namespace { /* style for links to namespace names in code snippets */ } +a.code.hl_package { /* style for links to package names in code snippets */ } +a.code.hl_define { /* style for links to macro names in code snippets */ } +a.code.hl_function { /* style for links to function names in code snippets */ } +a.code.hl_variable { /* style for links to variable names in code snippets */ } +a.code.hl_typedef { /* style for links to typedef names in code snippets */ } +a.code.hl_enumvalue { /* style for links to enum value names in code snippets */ } +a.code.hl_enumeration { /* style for links to enumeration names in code snippets */ } +a.code.hl_signal { /* style for links to Qt signal names in code snippets */ } +a.code.hl_slot { /* style for links to Qt slot names in code snippets */ } +a.code.hl_friend { /* style for links to friend names in code snippets */ } +a.code.hl_dcop { /* style for links to KDE3 DCOP names in code snippets */ } +a.code.hl_property { /* style for links to property names in code snippets */ } +a.code.hl_event { /* style for links to event names in code snippets */ } +a.code.hl_sequence { /* style for links to sequence names in code snippets */ } +a.code.hl_dictionary { /* style for links to dictionary names in code snippets */ } + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul.check { + list-style:none; + text-indent: -16px; + padding-left: 38px; +} +li.unchecked:before { + content: "\2610\A0"; +} +li.checked:before { + content: "\2611\A0"; +} + +ol { + text-indent: 0px; +} + +ul { + text-indent: 0px; + overflow: visible; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; + list-style-type: none; +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; + overflow-y: hidden; + position: relative; + min-height: 12px; + margin: 10px 0px; + padding: 10px 10px; + border: 1px solid var(--fragment-border-color); + border-radius: 4px; + background-color: var(--fragment-background-color); + color: var(--fragment-foreground-color); +} + +pre.fragment { + word-wrap: break-word; + font-size: 10pt; + line-height: 125%; + font-family: var(--font-family-monospace); +} + +.clipboard { + width: 24px; + height: 24px; + right: 5px; + top: 5px; + opacity: 0; + position: absolute; + display: inline; + overflow: hidden; + justify-content: center; + align-items: center; + cursor: pointer; +} + +.clipboard.success { + border: 1px solid var(--fragment-foreground-color); + border-radius: 4px; +} + +.fragment:hover .clipboard, .clipboard.success { + opacity: .4; +} + +.clipboard:hover, .clipboard.success { + opacity: 1 !important; +} + +.clipboard:active:not([class~=success]) svg { + transform: scale(.91); +} + +.clipboard.success svg { + fill: var(--fragment-copy-ok-color); +} + +.clipboard.success { + border-color: var(--fragment-copy-ok-color); +} + +div.line { + font-family: var(--font-family-monospace); + font-size: 13px; + min-height: 13px; + line-height: 1.2; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: var(--glow-color); + box-shadow: 0 0 10px var(--glow-color); +} + +span.fold { + margin-left: 5px; + margin-right: 1px; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; + display: inline-block; + width: 12px; + height: 12px; + background-repeat:no-repeat; + background-position:center; +} + +span.lineno { + padding-right: 4px; + margin-right: 9px; + text-align: right; + border-right: 2px solid var(--fragment-lineno-border-color); + color: var(--fragment-lineno-foreground-color); + background-color: var(--fragment-lineno-background-color); + white-space: pre; +} +span.lineno a, span.lineno a:visited { + color: var(--fragment-lineno-link-fg-color); + background-color: var(--fragment-lineno-link-bg-color); +} + +span.lineno a:hover { + color: var(--fragment-lineno-link-hover-fg-color); + background-color: var(--fragment-lineno-link-hover-bg-color); +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + color: var(--page-foreground-color); + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +p.formulaDsp { + text-align: center; +} + +img.dark-mode-visible { + display: none; +} +img.light-mode-visible { + display: none; +} + +img.formulaInl, img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; + width: var(--footer-logo-width); +} + +.compoundTemplParams { + color: var(--memdecl-template-color); + font-size: 80%; + line-height: 120%; +} + +/* @group Code Colorization */ + +span.keyword { + color: var(--code-keyword-color); +} + +span.keywordtype { + color: var(--code-type-keyword-color); +} + +span.keywordflow { + color: var(--code-flow-keyword-color); +} + +span.comment { + color: var(--code-comment-color); +} + +span.preprocessor { + color: var(--code-preprocessor-color); +} + +span.stringliteral { + color: var(--code-string-literal-color); +} + +span.charliteral { + color: var(--code-char-literal-color); +} + +span.xmlcdata { + color: var(--code-xml-cdata-color); +} + +span.vhdldigit { + color: var(--code-vhdl-digit-color); +} + +span.vhdlchar { + color: var(--code-vhdl-char-color); +} + +span.vhdlkeyword { + color: var(--code-vhdl-keyword-color); +} + +span.vhdllogic { + color: var(--code-vhdl-logic-color); +} + +blockquote { + background-color: var(--blockquote-background-color); + border-left: 2px solid var(--blockquote-border-color); + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid var(--table-cell-border-color); +} + +th.dirtab { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid var(--separator-color); +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: var(--glow-color); + box-shadow: 0 0 15px var(--glow-color); +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: var(--memdecl-background-color); + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: var(--memdecl-foreground-color); +} + +.memSeparator { + border-bottom: 1px solid var(--memdecl-separator-color); + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight, .memTemplItemRight { + width: 100%; +} + +.memTemplParams { + color: var(--memdecl-template-color); + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: var(--memdef-title-gradient-image); + background-repeat: repeat-x; + background-color: var(--memdef-title-background-color); + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: var(--memdef-template-color); + font-weight: normal; + margin-left: 9px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px var(--glow-color); +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + padding: 6px 0px 6px 0px; + color: var(--memdef-proto-text-color); + font-weight: bold; + text-shadow: var(--memdef-proto-text-shadow); + background-color: var(--memdef-proto-background-color); + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; +} + +.overload { + font-family: var(--font-family-monospace); + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + padding: 6px 10px 2px 10px; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: var(--memdef-doc-background-color); + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; + padding: 0px; + padding-bottom: 1px; +} + +.paramname { + white-space: nowrap; + padding: 0px; + padding-bottom: 1px; + margin-left: 2px; +} + +.paramname em { + color: var(--memdef-param-name-color); + font-style: normal; + margin-right: 1px; +} + +.paramname .paramdefval { + font-family: var(--font-family-monospace); +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: var(--font-family-monospace); + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: var(--label-background-color); + border-top:1px solid var(--label-left-top-border-color); + border-left:1px solid var(--label-left-top-border-color); + border-right:1px solid var(--label-right-bottom-border-color); + border-bottom:1px solid var(--label-right-bottom-border-color); + text-shadow: none; + color: var(--label-foreground-color); + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid var(--directory-separator-color); + border-bottom: 1px solid var(--directory-separator-color); + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.odd { + padding-left: 6px; + background-color: var(--index-odd-item-bg-color); +} + +.directory tr.even { + padding-left: 6px; + background-color: var(--index-even-item-bg-color); +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: var(--page-link-color); +} + +.arrow { + color: var(--nav-arrow-color); + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: var(--font-family-icon); + line-height: normal; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: var(--icon-background-color); + color: var(--icon-foreground-color); + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-folder-open-image); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-folder-closed-image); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-doc-image); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: var(--footer-foreground-color); +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid var(--table-cell-border-color); + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + margin-bottom: 10px; + border: 1px solid var(--memdef-border-color); + border-spacing: 0px; + border-radius: 4px; + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname, .fieldtable td.fieldinit { + white-space: nowrap; + border-right: 1px solid var(--memdef-border-color); + border-bottom: 1px solid var(--memdef-border-color); + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fieldinit { + padding-top: 3px; + text-align: right; +} + + +.fieldtable td.fielddoc { + border-bottom: 1px solid var(--memdef-border-color); +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image: var(--memdef-title-gradient-image); + background-repeat:repeat-x; + background-color: var(--memdef-title-background-color); + font-size: 90%; + color: var(--memdef-proto-text-color); + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid var(--memdef-border-color); +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: var(--nav-gradient-image); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image: var(--nav-gradient-image); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:var(--nav-text-normal-color); + border:solid 1px var(--nav-breadcrumb-border-color); + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:var(--nav-breadcrumb-image); + background-repeat:no-repeat; + background-position:right; + color: var(--nav-foreground-color); +} + +.navpath li.navelem a +{ + height:32px; + display:block; + outline: none; + color: var(--nav-text-normal-color); + font-family: var(--font-family-nav); + text-shadow: var(--nav-text-normal-shadow); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color: var(--nav-text-hover-color); + text-shadow: var(--nav-text-hover-shadow); +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color: var(--footer-foreground-color); + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image: var(--header-gradient-image); + background-repeat:repeat-x; + background-color: var(--header-background-color); + margin: 0px; + border-bottom: 1px solid var(--header-separator-color); +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; +} + +dl { + padding: 0 0 0 0; +} + +/* + +dl.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention, dl.important { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +*/ + +dl.bug dt a, dl.deprecated dt a, dl.todo dt a, dl.test a { + font-weight: bold !important; +} + +dl.warning, dl.attention, dl.important, dl.note, dl.deprecated, dl.bug, +dl.invariant, dl.pre, dl.post, dl.todo, dl.test, dl.remark { + padding: 10px; + margin: 10px 0px; + overflow: hidden; + margin-left: 0; + border-radius: 4px; +} + +dl.section dd { + margin-bottom: 2px; +} + +dl.warning, dl.attention, dl.important { + background: var(--warning-color-bg); + border-left: 8px solid var(--warning-color-hl); + color: var(--warning-color-text); +} + +dl.warning dt, dl.attention dt, dl.important dt { + color: var(--warning-color-hl); +} + +dl.note, dl.remark { + background: var(--note-color-bg); + border-left: 8px solid var(--note-color-hl); + color: var(--note-color-text); +} + +dl.note dt, dl.remark dt { + color: var(--note-color-hl); +} + +dl.todo { + background: var(--todo-color-bg); + border-left: 8px solid var(--todo-color-hl); + color: var(--todo-color-text); +} + +dl.todo dt { + color: var(--todo-color-hl); +} + +dl.test { + background: var(--test-color-bg); + border-left: 8px solid var(--test-color-hl); + color: var(--test-color-text); +} + +dl.test dt { + color: var(--test-color-hl); +} + +dl.bug dt a { + color: var(--bug-color-hl) !important; +} + +dl.bug { + background: var(--bug-color-bg); + border-left: 8px solid var(--bug-color-hl); + color: var(--bug-color-text); +} + +dl.bug dt a { + color: var(--bug-color-hl) !important; +} + +dl.deprecated { + background: var(--deprecated-color-bg); + border-left: 8px solid var(--deprecated-color-hl); + color: var(--deprecated-color-text); +} + +dl.deprecated dt a { + color: var(--deprecated-color-hl) !important; +} + +dl.note dd, dl.warning dd, dl.pre dd, dl.post dd, +dl.remark dd, dl.attention dd, dl.important dd, dl.invariant dd, +dl.bug dd, dl.deprecated dd, dl.todo dd, dl.test dd { + margin-inline-start: 0px; +} + +dl.invariant, dl.pre, dl.post { + background: var(--invariant-color-bg); + border-left: 8px solid var(--invariant-color-hl); + color: var(--invariant-color-text); +} + +dl.invariant dt, dl.pre dt, dl.post dt { + color: var(--invariant-color-hl); +} + + +#projectrow +{ + height: 56px; +} + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; + padding-left: 0.5em; +} + +#projectname +{ + font-size: 200%; + font-family: var(--font-family-title); + margin: 0px; + padding: 2px 0px; +} + +#side-nav #projectname +{ + font-size: 130%; +} + +#projectbrief +{ + font-size: 90%; + font-family: var(--font-family-title); + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font-size: 50%; + font-family: 50% var(--font-family-title); + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid var(--title-separator-color); + background-color: var(--title-background-color); +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:var(--citation-label-color); + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; + text-align:right; + width:52px; +} + +dl.citelist dd { + margin:2px 0 2px 72px; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: var(--toc-background-color); + border: 1px solid var(--toc-border-color); + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +div.toc li { + background: var(--toc-down-arrow-image) no-repeat scroll 0 5px transparent; + font: 10px/1.2 var(--font-family-toc); + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 var(--font-family-toc); + color: var(--toc-header-color); + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li[class^='level'] { + margin-left: 15px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.empty { + background-image: none; + margin-top: 0px; +} + +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + +span.obfuscator { + display: none; +} + +.inherit_header { + font-weight: bold; + color: var(--inherit-header-color); + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + /*white-space: nowrap;*/ + color: var(--tooltip-foreground-color); + background-color: var(--tooltip-background-color); + border: 1px solid var(--tooltip-border-color); + border-radius: 4px 4px 4px 4px; + box-shadow: var(--tooltip-shadow); + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: var(--tooltip-doc-color); + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip a { + color: var(--tooltip-link-color); +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: var(--tooltip-declaration-color); +} + +#powerTip div { + margin: 0px; + padding: 0px; + font-size: 12px; + font-family: var(--font-family-tooltip); + line-height: 16px; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: var(--tooltip-background-color); + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before, #powerTip.ne:before, #powerTip.nw:before { + border-top-color: var(--tooltip-border-color); + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: var(--tooltip-background-color); + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: var(--tooltip-border-color); + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: var(--tooltip-border-color); + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: var(--tooltip-border-color); + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: var(--tooltip-border-color); + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: var(--tooltip-border-color); + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid var(--table-cell-border-color); + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +tt, code, kbd +{ + display: inline-block; +} +tt, code, kbd +{ + vertical-align: top; +} +/* @end */ + +u { + text-decoration: underline; +} + +details>summary { + list-style-type: none; +} + +details > summary::-webkit-details-marker { + display: none; +} + +details>summary::before { + content: "\25ba"; + padding-right:4px; + font-size: 80%; +} + +details[open]>summary::before { + content: "\25bc"; + padding-right:4px; + font-size: 80%; +} + +body { + scrollbar-color: var(--scrollbar-thumb-color) var(--scrollbar-background-color); +} + +::-webkit-scrollbar { + background-color: var(--scrollbar-background-color); + height: 12px; + width: 12px; +} +::-webkit-scrollbar-thumb { + border-radius: 6px; + box-shadow: inset 0 0 12px 12px var(--scrollbar-thumb-color); + border: solid 2px transparent; +} +::-webkit-scrollbar-corner { + background-color: var(--scrollbar-background-color); +} + diff --git a/api/html/doxygen.svg b/api/html/doxygen.svg new file mode 100644 index 0000000..79a7635 --- /dev/null +++ b/api/html/doxygen.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/api/html/doxygen_crawl.html b/api/html/doxygen_crawl.html new file mode 100644 index 0000000..38214af --- /dev/null +++ b/api/html/doxygen_crawl.html @@ -0,0 +1,374 @@ + + + +Validator / crawler helper + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/api/html/dynsections.js b/api/html/dynsections.js new file mode 100644 index 0000000..b05f4c8 --- /dev/null +++ b/api/html/dynsections.js @@ -0,0 +1,198 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +function toggleVisibility(linkObj) { + return dynsection.toggleVisibility(linkObj); +} + +let dynsection = { + + // helper function + updateStripes : function() { + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); + $('table.directory tr'). + removeClass('odd').filter(':visible:odd').addClass('odd'); + }, + + toggleVisibility : function(linkObj) { + const base = $(linkObj).attr('id'); + const summary = $('#'+base+'-summary'); + const content = $('#'+base+'-content'); + const trigger = $('#'+base+'-trigger'); + const src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; + }, + + toggleLevel : function(level) { + $('table.directory tr').each(function() { + const l = this.id.split('_').length-1; + const i = $('#img'+this.id.substring(3)); + const a = $('#arr'+this.id.substring(3)); + if (l'); + // add vertical lines to other rows + $('span[class=lineno]').not(':eq(0)').append(''); + // add toggle controls to lines with fold divs + $('div[class=foldopen]').each(function() { + // extract specific id to use + const id = $(this).attr('id').replace('foldopen',''); + // extract start and end foldable fragment attributes + const start = $(this).attr('data-start'); + const end = $(this).attr('data-end'); + // replace normal fold span with controls for the first line of a foldable fragment + $(this).find('span[class=fold]:first').replaceWith(''); + // append div for folded (closed) representation + $(this).after(''); + // extract the first line from the "open" section to represent closed content + const line = $(this).children().first().clone(); + // remove any glow that might still be active on the original line + $(line).removeClass('glow'); + if (start) { + // if line already ends with a start marker (e.g. trailing {), remove it + $(line).html($(line).html().replace(new RegExp('\\s*'+start+'\\s*$','g'),'')); + } + // replace minus with plus symbol + $(line).find('span[class=fold]').css('background-image',codefold.plusImg[relPath]); + // append ellipsis + $(line).append(' '+start+''+end); + // insert constructed line into closed div + $('#foldclosed'+id).html(line); + }); + }, +}; +/* @license-end */ diff --git a/api/html/folderclosed.svg b/api/html/folderclosed.svg new file mode 100644 index 0000000..b04bed2 --- /dev/null +++ b/api/html/folderclosed.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/api/html/folderclosedd.svg b/api/html/folderclosedd.svg new file mode 100644 index 0000000..52f0166 --- /dev/null +++ b/api/html/folderclosedd.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/api/html/folderopen.svg b/api/html/folderopen.svg new file mode 100644 index 0000000..f6896dd --- /dev/null +++ b/api/html/folderopen.svg @@ -0,0 +1,17 @@ + + + + + + + + + + diff --git a/api/html/folderopend.svg b/api/html/folderopend.svg new file mode 100644 index 0000000..2d1f06e --- /dev/null +++ b/api/html/folderopend.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/api/html/index.html b/api/html/index.html new file mode 100644 index 0000000..1e6f6c4 --- /dev/null +++ b/api/html/index.html @@ -0,0 +1,118 @@ + + + + + + + +ArmaDragonflyClient: Main Page + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
ArmaDragonflyClient +
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
ArmaDragonflyClient Documentation
+
+
+ +
+
+ + + + diff --git a/api/html/jquery.js b/api/html/jquery.js new file mode 100644 index 0000000..875ada7 --- /dev/null +++ b/api/html/jquery.js @@ -0,0 +1,204 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e} +var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp( +"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType +}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c +)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){ +return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll( +":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id") +)&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push( +"\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test( +a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null, +null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne +).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for( +var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n; +return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0, +r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r] +,C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each( +function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r, +"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})} +),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each( +"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=y(e||this.defaultElement||this)[0],this.element=y(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=y(),this.hoverable=y(),this.focusable=y(),this.classesElementLookup={},e!==this&&(y.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t +){t.target===e&&this.destroy()}}),this.document=y(e.style?e.ownerDocument:e.document||e),this.window=y(this.document[0].defaultView||this.document[0].parentWindow)),this.options=y.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:y.noop,_create:y.noop,_init:y.noop,destroy:function(){var i=this;this._destroy(),y.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:y.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return y.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t +]=y.widget.extend({},this.options[t]),n=0;n
"),i=e.children()[0];return y("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i}, +getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(D(s),D(n))?o.important="horizontal":o.important="vertical",p.using.call(this,t,o)}),h.offset(y.extend(l,{using:t}))})},y.ui.position={fit:{left:function(t,e){var i=e.within, +s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,h=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),y.ui.plugin={add:function(t,e,i){var s,n=y.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})), +this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&y(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){y(t +).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,h=this;if(this.handles=o.handles||(y(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=y(),this._addedHandles=y(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split( +","),this.handles={},e=0;e"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=y(this.handles[e]),this._on(this.handles[e],{mousedown:h._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=y(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add( +this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){h.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),h.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=y(this.handles[e])[0])!==t.target&&!y.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=y(s.containment).scrollLeft()||0,i+=y(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{ +width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=y(".ui-resizable-"+this.axis).css("cursor"),y("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(), +!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),y.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(y.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),y("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){ +this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),st.width,h=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,r=this.originalPosition.top+this.originalSize.height +,l=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),h&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),h&&i&&(t.top=r-e.minHeight),n&&i&&(t.top=r-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e, +i){return y.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){y.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),y.ui.plugin.add("resizable","animate",{stop:function(e){var i=y(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,h=n?0:i.sizeDiff.width,n={width:i.size.width-h,height:i.size.height-o},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left +)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(y.extend(n,o&&h?{top:o,left:h}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&y(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),y.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=y(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,h=o instanceof y?o.get(0):/parent/.test(o)?e.parent().get(0):o;h&&(n.containerElement=y(h),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:y(document),left:0,top:0,width:y(document).width(),height:y(document).height()||document.body.parentNode.scrollHeight}):(i=y(h),s=[],y(["Top","Right","Left","Bottom"]).each(function(t,e +){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(h,"left")?h.scrollWidth:o,e=n._hasScroll(h)?h.scrollHeight:e,n.parentData={element:h,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=y(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,h={top:0,left:0},a=e.containerElement,t=!0;a[0]!==document&&/static/.test(a.css("position"))&&(h=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-h.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0), +i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-h.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-h.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=y(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=y(t.helper),h=o.offset(),a=o.outerWidth( +)-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o})}}),y.ui.plugin.add("resizable","alsoResize",{start:function(){var t=y(this).resizable("instance").options;y(t.alsoResize).each(function(){var t=y(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=y(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,h={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};y(s.alsoResize).each(function(){var t=y(this),s=y(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];y.each(e, +function(t,e){var i=(s[e]||0)+(h[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){y(this).removeData("ui-resizable-alsoresize")}}),y.ui.plugin.add("resizable","ghost",{start:function(){var t=y(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==y.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=y(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=y(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),y.ui.plugin.add("resizable","grid",{resize:function(){var t,e=y(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,h=e.axis,a="number"==typeof i.grid?[i.grid,i.grid]:i.grid,r=a[0 +]||1,l=a[1]||1,u=Math.round((s.width-n.width)/r)*r,p=Math.round((s.height-n.height)/l)*l,d=n.width+u,c=n.height+p,f=i.maxWidth&&i.maxWidthd,s=i.minHeight&&i.minHeight>c;i.grid=a,m&&(d+=r),s&&(c+=l),f&&(d-=r),g&&(c-=l),/^(se|s|e)$/.test(h)?(e.size.width=d,e.size.height=c):/^(ne)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.top=o.top-p):/^(sw)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.left=o.left-u):((c-l<=0||d-r<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0=f[g]?0:Math.min(f[g],n));!a&&1-1){ +targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se", +"n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if( +session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)} +closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if( +session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE, +function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset); +tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList, +finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight())); +return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")} +function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(), +elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight, +viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b, +"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery); +/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)), +mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend( +$.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy( +this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData( +"smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id" +).indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?( +this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for( +var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){ +return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if(( +!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&( +this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0 +]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass( +"highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){ +t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]" +)||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){ +t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"), +a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i, +downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2) +)&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t +)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0), +canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}}, +rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})} +return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1, +bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); diff --git a/api/html/minus.svg b/api/html/minus.svg new file mode 100644 index 0000000..f70d0c1 --- /dev/null +++ b/api/html/minus.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/api/html/minusd.svg b/api/html/minusd.svg new file mode 100644 index 0000000..5f8e879 --- /dev/null +++ b/api/html/minusd.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/api/html/nav_f.png b/api/html/nav_f.png new file mode 100644 index 0000000..72a58a5 Binary files /dev/null and b/api/html/nav_f.png differ diff --git a/api/html/nav_fd.png b/api/html/nav_fd.png new file mode 100644 index 0000000..032fbdd Binary files /dev/null and b/api/html/nav_fd.png differ diff --git a/api/html/nav_g.png b/api/html/nav_g.png new file mode 100644 index 0000000..2093a23 Binary files /dev/null and b/api/html/nav_g.png differ diff --git a/api/html/nav_h.png b/api/html/nav_h.png new file mode 100644 index 0000000..33389b1 Binary files /dev/null and b/api/html/nav_h.png differ diff --git a/api/html/nav_hd.png b/api/html/nav_hd.png new file mode 100644 index 0000000..de80f18 Binary files /dev/null and b/api/html/nav_hd.png differ diff --git a/api/html/navtree.css b/api/html/navtree.css new file mode 100644 index 0000000..69211d4 --- /dev/null +++ b/api/html/navtree.css @@ -0,0 +1,149 @@ +#nav-tree .children_ul { + margin:0; + padding:4px; +} + +#nav-tree ul { + list-style:none outside none; + margin:0px; + padding:0px; +} + +#nav-tree li { + white-space:nowrap; + margin:0px; + padding:0px; +} + +#nav-tree .plus { + margin:0px; +} + +#nav-tree .selected { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: var(--nav-text-active-color); + text-shadow: var(--nav-text-active-shadow); +} + +#nav-tree .selected .arrow { + color: var(--nav-arrow-selected-color); + text-shadow: none; +} + +#nav-tree img { + margin:0px; + padding:0px; + border:0px; + vertical-align: middle; +} + +#nav-tree a { + text-decoration:none; + padding:0px; + margin:0px; +} + +#nav-tree .label { + margin:0px; + padding:0px; + font: 12px var(--font-family-nav); +} + +#nav-tree .label a { + padding:2px; +} + +#nav-tree .selected a { + text-decoration:none; + color:var(--nav-text-active-color); +} + +#nav-tree .children_ul { + margin:0px; + padding:0px; +} + +#nav-tree .item { + margin:0px; + padding:0px; +} + +#nav-tree { + padding: 0px 0px; + font-size:14px; + overflow:auto; +} + +#doc-content { + overflow:auto; + display:block; + padding:0px; + margin:0px; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#side-nav { + padding:0 6px 0 0; + margin: 0px; + display:block; + position: absolute; + left: 0px; + width: $width; + overflow : hidden; +} + +.ui-resizable .ui-resizable-handle { + display:block; +} + +.ui-resizable-e { + background-image:var(--nav-splitbar-image); + background-size:100%; + background-repeat:repeat-y; + background-attachment: scroll; + cursor:ew-resize; + height:100%; + right:0; + top:0; + width:6px; +} + +.ui-resizable-handle { + display:none; + font-size:0.1px; + position:absolute; + z-index:1; +} + +#nav-tree-contents { + margin: 6px 0px 0px 0px; +} + +#nav-tree { + background-repeat:repeat-x; + background-color: var(--nav-background-color); + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#nav-sync { + position:absolute; + top:5px; + right:24px; + z-index:0; +} + +#nav-sync img { + opacity:0.3; +} + +#nav-sync img:hover { + opacity:0.9; +} + +@media print +{ + #nav-tree { display: none; } + div.ui-resizable-handle { display: none; position: relative; } +} + diff --git a/api/html/navtree.js b/api/html/navtree.js new file mode 100644 index 0000000..2d4fa84 --- /dev/null +++ b/api/html/navtree.js @@ -0,0 +1,483 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +function initNavTree(toroot,relpath) { + let navTreeSubIndices = []; + const ARROW_DOWN = '▼'; + const ARROW_RIGHT = '►'; + const NAVPATH_COOKIE_NAME = ''+'navpath'; + + const getData = function(varName) { + const i = varName.lastIndexOf('/'); + const n = i>=0 ? varName.substring(i+1) : varName; + return eval(n.replace(/-/g,'_')); + } + + const stripPath = function(uri) { + return uri.substring(uri.lastIndexOf('/')+1); + } + + const stripPath2 = function(uri) { + const i = uri.lastIndexOf('/'); + const s = uri.substring(i+1); + const m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/); + return m ? uri.substring(i-6) : s; + } + + const hashValue = function() { + return $(location).attr('hash').substring(1).replace(/[^\w-]/g,''); + } + + const hashUrl = function() { + return '#'+hashValue(); + } + + const pathName = function() { + return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;()]/g, ''); + } + + const storeLink = function(link) { + if (!$("#nav-sync").hasClass('sync')) { + Cookie.writeSetting(NAVPATH_COOKIE_NAME,link,0); + } + } + + const deleteLink = function() { + Cookie.eraseSetting(NAVPATH_COOKIE_NAME); + } + + const cachedLink = function() { + return Cookie.readSetting(NAVPATH_COOKIE_NAME,''); + } + + const getScript = function(scriptName,func) { + const head = document.getElementsByTagName("head")[0]; + const script = document.createElement('script'); + script.id = scriptName; + script.type = 'text/javascript'; + script.onload = func; + script.src = scriptName+'.js'; + head.appendChild(script); + } + + const createIndent = function(o,domNode,node) { + let level=-1; + let n = node; + while (n.parentNode) { level++; n=n.parentNode; } + if (node.childrenData) { + const imgNode = document.createElement("span"); + imgNode.className = 'arrow'; + imgNode.style.paddingLeft=(16*level).toString()+'px'; + imgNode.innerHTML=ARROW_RIGHT; + node.plus_img = imgNode; + node.expandToggle = document.createElement("a"); + node.expandToggle.href = "javascript:void(0)"; + node.expandToggle.onclick = function() { + if (node.expanded) { + $(node.getChildrenUL()).slideUp("fast"); + node.plus_img.innerHTML=ARROW_RIGHT; + node.expanded = false; + } else { + expandNode(o, node, false, true); + } + } + node.expandToggle.appendChild(imgNode); + domNode.appendChild(node.expandToggle); + } else { + let span = document.createElement("span"); + span.className = 'arrow'; + span.style.width = 16*(level+1)+'px'; + span.innerHTML = ' '; + domNode.appendChild(span); + } + } + + let animationInProgress = false; + + const gotoAnchor = function(anchor,aname) { + let pos, docContent = $('#doc-content'); + let ancParent = $(anchor.parent()); + if (ancParent.hasClass('memItemLeft') || ancParent.hasClass('memtitle') || + ancParent.hasClass('fieldname') || ancParent.hasClass('fieldtype') || + ancParent.is(':header')) { + pos = ancParent.offset().top; + } else if (anchor.position()) { + pos = anchor.offset().top; + } + if (pos) { + const dcOffset = docContent.offset().top; + const dcHeight = docContent.height(); + const dcScrHeight = docContent[0].scrollHeight + const dcScrTop = docContent.scrollTop(); + let dist = Math.abs(Math.min(pos-dcOffset,dcScrHeight-dcHeight-dcScrTop)); + animationInProgress = true; + docContent.animate({ + scrollTop: pos + dcScrTop - dcOffset + },Math.max(50,Math.min(500,dist)),function() { + animationInProgress=false; + if (anchor.parent().attr('class')=='memItemLeft') { + let rows = $('.memberdecls tr[class$="'+hashValue()+'"]'); + glowEffect(rows.children(),300); // member without details + } else if (anchor.parent().attr('class')=='fieldname') { + glowEffect(anchor.parent().parent(),1000); // enum value + } else if (anchor.parent().attr('class')=='fieldtype') { + glowEffect(anchor.parent().parent(),1000); // struct field + } else if (anchor.parent().is(":header")) { + glowEffect(anchor.parent(),1000); // section header + } else { + glowEffect(anchor.next(),1000); // normal member + } + }); + } + } + + const newNode = function(o, po, text, link, childrenData, lastNode) { + const node = { + children : [], + childrenData : childrenData, + depth : po.depth + 1, + relpath : po.relpath, + isLast : lastNode, + li : document.createElement("li"), + parentNode : po, + itemDiv : document.createElement("div"), + labelSpan : document.createElement("span"), + label : document.createTextNode(text), + expanded : false, + childrenUL : null, + getChildrenUL : function() { + if (!this.childrenUL) { + this.childrenUL = document.createElement("ul"); + this.childrenUL.className = "children_ul"; + this.childrenUL.style.display = "none"; + this.li.appendChild(node.childrenUL); + } + return node.childrenUL; + }, + }; + + node.itemDiv.className = "item"; + node.labelSpan.className = "label"; + createIndent(o,node.itemDiv,node); + node.itemDiv.appendChild(node.labelSpan); + node.li.appendChild(node.itemDiv); + + const a = document.createElement("a"); + node.labelSpan.appendChild(a); + po.getChildrenUL().appendChild(node.li); + a.appendChild(node.label); + if (link) { + let url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + link = url; + } else { + url = node.relpath+link; + } + a.className = stripPath(link.replace('#',':')); + if (link.indexOf('#')!=-1) { + const aname = '#'+link.split('#')[1]; + const srcPage = stripPath(pathName()); + const targetPage = stripPath(link.split('#')[0]); + a.href = srcPage!=targetPage ? url : aname; + a.onclick = function() { + storeLink(link); + aPPar = $(a).parent().parent(); + if (!aPPar.hasClass('selected')) { + $('.item').removeClass('selected'); + $('.item').removeAttr('id'); + aPPar.addClass('selected'); + aPPar.attr('id','selected'); + } + const anchor = $(aname); + gotoAnchor(anchor,aname); + }; + } else { + a.href = url; + a.onclick = () => storeLink(link); + } + } else if (childrenData != null) { + a.className = "nolink"; + a.href = "javascript:void(0)"; + a.onclick = node.expandToggle.onclick; + } + return node; + } + + const showRoot = function() { + const headerHeight = $("#top").height(); + const footerHeight = $("#nav-path").height(); + const windowHeight = $(window).height() - headerHeight - footerHeight; + (function() { // retry until we can scroll to the selected item + try { + const navtree=$('#nav-tree'); + navtree.scrollTo('#selected',100,{offset:-windowHeight/2}); + } catch (err) { + setTimeout(arguments.callee, 0); + } + })(); + } + + const expandNode = function(o, node, imm, setFocus) { + if (node.childrenData && !node.expanded) { + if (typeof(node.childrenData)==='string') { + const varName = node.childrenData; + getScript(node.relpath+varName,function() { + node.childrenData = getData(varName); + expandNode(o, node, imm, setFocus); + }); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).slideDown("fast"); + node.plus_img.innerHTML = ARROW_DOWN; + node.expanded = true; + if (setFocus) { + $(node.expandToggle).focus(); + } + } + } + } + + const glowEffect = function(n,duration) { + n.addClass('glow').delay(duration).queue(function(next) { + $(this).removeClass('glow');next(); + }); + } + + const highlightAnchor = function() { + const aname = hashUrl(); + const anchor = $(aname); + gotoAnchor(anchor,aname); + } + + const selectAndHighlight = function(hash,n) { + let a; + if (hash) { + const link=stripPath(pathName())+':'+hash.substring(1); + a=$('.item a[class$="'+link+'"]'); + } + if (a && a.length) { + a.parent().parent().addClass('selected'); + a.parent().parent().attr('id','selected'); + highlightAnchor(); + } else if (n) { + $(n.itemDiv).addClass('selected'); + $(n.itemDiv).attr('id','selected'); + } + let topOffset=5; + if ($('#nav-tree-contents .item:first').hasClass('selected')) { + topOffset+=25; + } + $('#nav-sync').css('top',topOffset+'px'); + showRoot(); + } + + const showNode = function(o, node, index, hash) { + if (node && node.childrenData) { + if (typeof(node.childrenData)==='string') { + const varName = node.childrenData; + getScript(node.relpath+varName,function() { + node.childrenData = getData(varName); + showNode(o,node,index,hash); + }); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).css({'display':'block'}); + node.plus_img.innerHTML = ARROW_DOWN; + node.expanded = true; + const n = node.children[o.breadcrumbs[index]]; + if (index+11 ? '#'+parts[1].replace(/[^\w-]/g,'') : ''; + } + if (hash.match(/^#l\d+$/)) { + const anchor=$('a[name='+hash.substring(1)+']'); + glowEffect(anchor.parent(),1000); // line number + hash=''; // strip line number anchors + } + const url=root+hash; + let i=-1; + while (NAVTREEINDEX[i+1]<=url) i++; + if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath) + } else { + getScript(relpath+'navtreeindex'+i,function() { + navTreeSubIndices[i] = eval('NAVTREEINDEX'+i); + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath); + } + }); + } + } + + const showSyncOff = function(n,relpath) { + n.html(''); + } + + const showSyncOn = function(n,relpath) { + n.html(''); + } + + const o = { + toroot : toroot, + node : { + childrenData : NAVTREE, + children : [], + childrenUL : document.createElement("ul"), + getChildrenUL : function() { return this.childrenUL }, + li : document.getElementById("nav-tree-contents"), + depth : 0, + relpath : relpath, + expanded : false, + isLast : true, + plus_img : document.createElement("span"), + }, + }; + o.node.li.appendChild(o.node.childrenUL); + o.node.plus_img.className = 'arrow'; + o.node.plus_img.innerHTML = ARROW_RIGHT; + + const navSync = $('#nav-sync'); + if (cachedLink()) { + showSyncOff(navSync,relpath); + navSync.removeClass('sync'); + } else { + showSyncOn(navSync,relpath); + } + + navSync.click(() => { + const navSync = $('#nav-sync'); + if (navSync.hasClass('sync')) { + navSync.removeClass('sync'); + showSyncOff(navSync,relpath); + storeLink(stripPath2(pathName())+hashUrl()); + } else { + navSync.addClass('sync'); + showSyncOn(navSync,relpath); + deleteLink(); + } + }); + + navTo(o,toroot,hashUrl(),relpath); + showRoot(); + + $(window).bind('hashchange', () => { + if (!animationInProgress) { + if (window.location.hash && window.location.hash.length>1) { + let a; + if ($(location).attr('hash')) { + const clslink=stripPath(pathName())+':'+hashValue(); + a=$('.item a[class$="'+clslink.replace(/ + + + + + + +ArmaDragonflyClient: Related Pages + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
ArmaDragonflyClient +
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Related Pages
+
+
+
Here is a list of all related documentation pages:
+
+
+ + + + diff --git a/api/html/plus.svg b/api/html/plus.svg new file mode 100644 index 0000000..0752016 --- /dev/null +++ b/api/html/plus.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/api/html/plusd.svg b/api/html/plusd.svg new file mode 100644 index 0000000..0c65bfe --- /dev/null +++ b/api/html/plusd.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/api/html/resize.js b/api/html/resize.js new file mode 100644 index 0000000..178d03b --- /dev/null +++ b/api/html/resize.js @@ -0,0 +1,147 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +function initResizable(treeview) { + let sidenav,navtree,content,header,footer,barWidth=6; + const RESIZE_COOKIE_NAME = ''+'width'; + + function resizeWidth() { + const sidenavWidth = $(sidenav).outerWidth(); + content.css({marginLeft:parseInt(sidenavWidth)+"px"}); + if (typeof page_layout!=='undefined' && page_layout==1) { + footer.css({marginLeft:parseInt(sidenavWidth)+"px"}); + } + Cookie.writeSetting(RESIZE_COOKIE_NAME,sidenavWidth-barWidth); + } + + function restoreWidth(navWidth) { + content.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + if (typeof page_layout!=='undefined' && page_layout==1) { + footer.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + } + sidenav.css({width:navWidth + "px"}); + } + + function resizeHeight(treeview) { + const headerHeight = header.outerHeight(); + const windowHeight = $(window).height(); + let contentHeight; + if (treeview) + { + const footerHeight = footer.outerHeight(); + let navtreeHeight,sideNavHeight; + if (typeof page_layout==='undefined' || page_layout==0) { /* DISABLE_INDEX=NO */ + contentHeight = windowHeight - headerHeight - footerHeight; + navtreeHeight = contentHeight; + sideNavHeight = contentHeight; + } else if (page_layout==1) { /* DISABLE_INDEX=YES */ + contentHeight = windowHeight - footerHeight; + navtreeHeight = windowHeight - headerHeight; + sideNavHeight = windowHeight; + } + navtree.css({height:navtreeHeight + "px"}); + sidenav.css({height:sideNavHeight + "px"}); + } + else + { + contentHeight = windowHeight - headerHeight; + } + content.css({height:contentHeight + "px"}); + if (location.hash.slice(1)) { + (document.getElementById(location.hash.slice(1))||document.body).scrollIntoView(); + } + } + + function collapseExpand() { + let newWidth; + if (sidenav.width()>0) { + newWidth=0; + } else { + const width = Cookie.readSetting(RESIZE_COOKIE_NAME,250); + newWidth = (width>250 && width<$(window).width()) ? width : 250; + } + restoreWidth(newWidth); + const sidenavWidth = $(sidenav).outerWidth(); + Cookie.writeSetting(RESIZE_COOKIE_NAME,sidenavWidth-barWidth); + } + + header = $("#top"); + content = $("#doc-content"); + footer = $("#nav-path"); + sidenav = $("#side-nav"); + if (!treeview) { +// title = $("#titlearea"); +// titleH = $(title).height(); +// let animating = false; +// content.on("scroll", function() { +// slideOpts = { duration: 200, +// step: function() { +// contentHeight = $(window).height() - header.outerHeight(); +// content.css({ height : contentHeight + "px" }); +// }, +// done: function() { animating=false; } +// }; +// if (content.scrollTop()>titleH && title.css('display')!='none' && !animating) { +// title.slideUp(slideOpts); +// animating=true; +// } else if (content.scrollTop()<=titleH && title.css('display')=='none' && !animating) { +// title.slideDown(slideOpts); +// animating=true; +// } +// }); + } else { + navtree = $("#nav-tree"); + $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } }); + $(sidenav).resizable({ minWidth: 0 }); + } + $(window).resize(function() { resizeHeight(treeview); }); + if (treeview) + { + const device = navigator.userAgent.toLowerCase(); + const touch_device = device.match(/(iphone|ipod|ipad|android)/); + if (touch_device) { /* wider split bar for touch only devices */ + $(sidenav).css({ paddingRight:'20px' }); + $('.ui-resizable-e').css({ width:'20px' }); + $('#nav-sync').css({ right:'34px' }); + barWidth=20; + } + const width = Cookie.readSetting(RESIZE_COOKIE_NAME,250); + if (width) { restoreWidth(width); } else { resizeWidth(); } + } + resizeHeight(treeview); + const url = location.href; + const i=url.indexOf("#"); + if (i>=0) window.location.hash=url.substr(i); + const _preventDefault = function(evt) { evt.preventDefault(); }; + if (treeview) + { + $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); + $(".ui-resizable-handle").dblclick(collapseExpand); + // workaround for firefox + $("body").css({overflow: "hidden"}); + } + $(window).on('load',function() { resizeHeight(treeview); }); +} +/* @license-end */ diff --git a/api/html/search/all_0.js b/api/html/search/all_0.js new file mode 100644 index 0000000..373b376 --- /dev/null +++ b/api/html/search/all_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['_3a_0',['Process data with direct call (synchronous):',['../d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html#autotoc_md91',1,'']]] +]; diff --git a/api/html/search/all_1.js b/api/html/search/all_1.js new file mode 100644 index 0000000..00805f9 --- /dev/null +++ b/api/html/search/all_1.js @@ -0,0 +1,60 @@ +var searchData= +[ + ['a_20backup_3a_0',['Save the database without creating a backup:',['../d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html#autotoc_md48',1,'']]], + ['a_20callback_20from_20the_20extension_3a_1',['Process a callback from the extension:',['../d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html#autotoc_md144',1,'']]], + ['a_20callback_20to_20the_20server_3a_2',['Forward a callback to the server:',['../d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html#autotoc_md145',1,'']]], + ['a_20client_3a_3',['a client:',['../da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md289',1,'Add data from a client:'],['../d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html#autotoc_md49',1,'Call the save function remotely from a client:'],['../d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md63',1,'Call the set function remotely from a client:'],['../df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md9',1,'Delete a key on the server from a client:'],['../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md229',1,'Store data from a client:'],['../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md243',1,'Store player data from a client:'],['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md257',1,'Store player data from a client:'],['../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md271',1,'Store player data from a client:'],['../d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html#autotoc_md128',1,'Trigger queue processing from a client:']]], + ['a_20field_20value_20from_20the_20current_20client_20s_20hash_20table_20in_20dragonflyclient_4',['excerpt: Get a field value from the current client's hash table in DragonflyClient.',['../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md164',1,'']]], + ['a_20field_20value_20in_20the_20current_20client_20s_20hash_20table_20in_20dragonflyclient_5',['excerpt: Set a field value in the current client's hash table in DragonflyClient.',['../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md220',1,'']]], + ['a_20hash_20table_20retrieval_20task_3a_6',['Add a hash table retrieval task:',['../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md75',1,'']]], + ['a_20key_20from_20dragonflyclient_7',['excerpt: Get all elements of a list stored at a key from DragonflyClient.',['../d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html#autotoc_md308',1,'']]], + ['a_20key_20in_20dragonflyclient_8',['a key in DragonflyClient',['../d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html#autotoc_md319',1,'excerpt: Remove an element from a list stored at a key in DragonflyClient.'],['../d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html#autotoc_md330',1,'excerpt: Set an element in a list stored at a key in DragonflyClient.']]], + ['a_20key_20in_20singleplayer_20or_20on_20the_20server_3a_9',['Delete a key in singleplayer or on the server:',['../df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md8',1,'']]], + ['a_20key_20on_20the_20server_20from_20a_20client_3a_10',['Delete a key on the server from a client:',['../df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md9',1,'']]], + ['a_20list_20operation_20task_3a_11',['Add a list operation task:',['../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md77',1,'']]], + ['a_20list_20stored_20at_20a_20key_20from_20dragonflyclient_12',['excerpt: Get all elements of a list stored at a key from DragonflyClient.',['../d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html#autotoc_md308',1,'']]], + ['a_20list_20stored_20at_20a_20key_20in_20dragonflyclient_13',['a list stored at a key in DragonflyClient',['../d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html#autotoc_md319',1,'excerpt: Remove an element from a list stored at a key in DragonflyClient.'],['../d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html#autotoc_md330',1,'excerpt: Set an element in a list stored at a key in DragonflyClient.']]], + ['a_20player_20message_3a_14',['Add a player message:',['../da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md288',1,'']]], + ['a_20player_20s_20complete_20hash_20data_3a_15',['Retrieve a player's complete hash data:',['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md199',1,'']]], + ['a_20player_20s_20loadout_20field_3a_16',['Retrieve a player's loadout field:',['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md213',1,'']]], + ['a_20player_20s_20loadout_20under_20their_20uid_3a_17',['Store a player's loadout under their UID:',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md255',1,'']]], + ['a_20player_20s_20loadout_3a_18',['a player s loadout:',['../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md171',1,'Retrieve a player's loadout:'],['../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md227',1,'Store a player's loadout:']]], + ['a_20player_20specific_20task_20that_20returns_20data_20to_20a_20specific_20client_3a_19',['Add a player-specific task that returns data to a specific client:',['../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md76',1,'']]], + ['a_20queue_20of_20tasks_20to_20be_20executed_20',['excerpt: Processes a queue of tasks to be executed.',['../d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html#autotoc_md120',1,'']]], + ['a_20simple_20array_3a_21',['Store a simple array:',['../d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md61',1,'']]], + ['a_20simple_20string_3a_22',['Test with a simple string:',['../d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md157',1,'']]], + ['a_20single_20callback_23',['excerpt: Handles data chunks received from the database extension when data is too large to be returned in a single callback.',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html#autotoc_md14',1,'']]], + ['a_20specific_20client_3a_24',['a specific client:',['../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md76',1,'Add a player-specific task that returns data to a specific client:'],['../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md173',1,'Retrieve data and send it to a specific client:'],['../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md187',1,'Retrieve data and send it to a specific client:'],['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md201',1,'Retrieve data and send it to a specific client:'],['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md215',1,'Retrieve data and send it to a specific client:'],['../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md303',1,'Retrieve data and send it to a specific client:'],['../d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md32',1,'Retrieve data on the server and send to a specific client:'],['../d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html#autotoc_md90',1,'Send data to a specific client:']]], + ['a_20specific_20event_20log_20entry_3a_25',['Retrieve a specific event log entry:',['../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md301',1,'']]], + ['a_20specific_20vehicle_20property_20with_20synchronous_20callback_3a_26',['Retrieve a specific vehicle property with synchronous callback:',['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md214',1,'']]], + ['a_20welcome_20script_3a_27',['Use in a welcome script:',['../d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html#autotoc_md115',1,'']]], + ['add_20a_20hash_20table_20retrieval_20task_3a_28',['Add a hash table retrieval task:',['../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md75',1,'']]], + ['add_20a_20list_20operation_20task_3a_29',['Add a list operation task:',['../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md77',1,'']]], + ['add_20a_20player_20message_3a_30',['Add a player message:',['../da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md288',1,'']]], + ['add_20a_20player_20specific_20task_20that_20returns_20data_20to_20a_20specific_20client_3a_31',['Add a player-specific task that returns data to a specific client:',['../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md76',1,'']]], + ['add_20an_20event_20log_20entry_3a_32',['Add an event log entry:',['../da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md287',1,'']]], + ['add_20data_20from_20a_20client_3a_33',['Add data from a client:',['../da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md289',1,'']]], + ['add_20element_20to_20list_20stored_20at_20key_20from_20dragonflyclient_34',['excerpt: Add element to list stored at key from DragonflyClient.',['../da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md280',1,'']]], + ['add_20task_20to_20queue_35',['excerpt: Add task to queue.',['../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md68',1,'']]], + ['addon_20name_20in_20system_20chat_36',['excerpt: Displays the addon name in system chat.',['../d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html#autotoc_md107',1,'']]], + ['addon_20name_20message_3a_37',['Display the addon name message:',['../d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html#autotoc_md114',1,'']]], + ['addtask_38',['addTask',['../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html',1,'']]], + ['all_20client_20hash_20data_3a_39',['Retrieve all client hash data:',['../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md185',1,'']]], + ['all_20elements_20of_20a_20list_20stored_20at_20a_20key_20from_20dragonflyclient_40',['excerpt: Get all elements of a list stored at a key from DragonflyClient.',['../d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html#autotoc_md308',1,'']]], + ['all_20fields_20and_20values_20from_20the_20hash_20stored_20at_20key_20from_20dragonflyclient_41',['excerpt: Get all fields and values from the hash stored at key from DragonflyClient.',['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md192',1,'']]], + ['all_20fields_20from_20the_20current_20client_20s_20hash_20table_20in_20dragonflyclient_42',['excerpt: Get all fields from the current client's hash table in DragonflyClient.',['../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md178',1,'']]], + ['an_20element_20from_20a_20list_20stored_20at_20a_20key_20in_20dragonflyclient_43',['excerpt: Remove an element from a list stored at a key in DragonflyClient.',['../d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html#autotoc_md319',1,'']]], + ['an_20element_20in_20a_20list_20stored_20at_20a_20key_20in_20dragonflyclient_44',['excerpt: Set an element in a list stored at a key in DragonflyClient.',['../d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html#autotoc_md330',1,'']]], + ['an_20event_20log_20entry_3a_45',['Add an event log entry:',['../da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md287',1,'']]], + ['and_20position_3a_46',['and position:',['../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md241',1,'Store player loadout and position:'],['../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md269',1,'Store player loadout and position:']]], + ['and_20send_20it_20to_20a_20specific_20client_3a_47',['and send it to a specific client:',['../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md173',1,'Retrieve data and send it to a specific client:'],['../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md187',1,'Retrieve data and send it to a specific client:'],['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md201',1,'Retrieve data and send it to a specific client:'],['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md215',1,'Retrieve data and send it to a specific client:'],['../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md303',1,'Retrieve data and send it to a specific client:']]], + ['and_20send_20to_20a_20specific_20client_3a_48',['Retrieve data on the server and send to a specific client:',['../d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md32',1,'']]], + ['and_20values_20from_20the_20hash_20stored_20at_20key_20from_20dragonflyclient_49',['excerpt: Get all fields and values from the hash stored at key from DragonflyClient.',['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md192',1,'']]], + ['array_3a_50',['Store a simple array:',['../d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md61',1,'']]], + ['as_20callback_20function_3a_51',['Test database retrieval by specifying this as callback function:',['../d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md158',1,'']]], + ['associated_20with_20field_20in_20hash_20stored_20at_20key_20from_20dragonflyclient_52',['excerpt: Get the value associated with field in hash stored at key from DragonflyClient.',['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md206',1,'']]], + ['at_20a_20key_20from_20dragonflyclient_53',['excerpt: Get all elements of a list stored at a key from DragonflyClient.',['../d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html#autotoc_md308',1,'']]], + ['at_20a_20key_20in_20dragonflyclient_54',['at a key in DragonflyClient',['../d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html#autotoc_md319',1,'excerpt: Remove an element from a list stored at a key in DragonflyClient.'],['../d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html#autotoc_md330',1,'excerpt: Set an element in a list stored at a key in DragonflyClient.']]], + ['at_20key_20from_20dragonflyclient_55',['at key from DragonflyClient',['../da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md280',1,'excerpt: Add element to list stored at key from DragonflyClient.'],['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md192',1,'excerpt: Get all fields and values from the hash stored at key from DragonflyClient.'],['../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md294',1,'excerpt: Get element of list stored at key from DragonflyClient.'],['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md206',1,'excerpt: Get the value associated with field in hash stored at key from DragonflyClient.'],['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md248',1,'excerpt: Set the specified field to the respective value in the hash stored at key from DragonflyClient.'],['../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md262',1,'excerpt: Set the specified fields to their respective values in the hash stored at key from DragonflyClient.']]], + ['available_20functions_56',['Available Functions',['../G:/ids/dragonfly/docs/basic/README.md#autotoc_md37',1,'Available Functions'],['../G:/ids/dragonfly/docs/core/README.md#autotoc_md133',1,'Available Functions'],['../G:/ids/dragonfly/docs/hash/README.md#autotoc_md276',1,'Available Functions'],['../G:/ids/dragonfly/docs/list/README.md#autotoc_md341',1,'Available Functions']]] +]; diff --git a/api/html/search/all_10.js b/api/html/search/all_10.js new file mode 100644 index 0000000..5464736 --- /dev/null +++ b/api/html/search/all_10.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['queue_0',['excerpt: Add task to queue.',['../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md68',1,'']]], + ['queue_20manually_3a_1',['Start processing the queue manually:',['../d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html#autotoc_md127',1,'']]], + ['queue_20of_20tasks_20to_20be_20executed_2',['excerpt: Processes a queue of tasks to be executed.',['../d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html#autotoc_md120',1,'']]], + ['queue_20processing_20from_20a_20client_3a_3',['Trigger queue processing from a client:',['../d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html#autotoc_md128',1,'']]] +]; diff --git a/api/html/search/all_11.js b/api/html/search/all_11.js new file mode 100644 index 0000000..9c2847e --- /dev/null +++ b/api/html/search/all_11.js @@ -0,0 +1,35 @@ +var searchData= +[ + ['readme_20md_20basic_20data_20operations_0',['@ref "G:/ids/dragonfly/docs/basic/README.md" "Basic Data Operations"',['../G:/ids/dragonfly/docs/README.md#autotoc_md347',1,'']]], + ['readme_20md_20core_20functions_1',['@ref "G:/ids/dragonfly/docs/core/README.md" "Core Functions"',['../G:/ids/dragonfly/docs/README.md#autotoc_md346',1,'']]], + ['readme_20md_20hash_20operations_2',['@ref "G:/ids/dragonfly/docs/hash/README.md" "Hash Operations"',['../G:/ids/dragonfly/docs/README.md#autotoc_md348',1,'']]], + ['readme_20md_20list_20operations_3',['@ref "G:/ids/dragonfly/docs/list/README.md" "List Operations"',['../G:/ids/dragonfly/docs/README.md#autotoc_md349',1,'']]], + ['received_20from_20the_20database_20extension_20when_20data_20is_20too_20large_20to_20be_20returned_20in_20a_20single_20callback_4',['excerpt: Handles data chunks received from the database extension when data is too large to be returned in a single callback.',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html#autotoc_md14',1,'']]], + ['ref_20g_3a_20ids_20dragonfly_20docs_20basic_20readme_20md_20basic_20data_20operations_5',['@ref "G:/ids/dragonfly/docs/basic/README.md" "Basic Data Operations"',['../G:/ids/dragonfly/docs/README.md#autotoc_md347',1,'']]], + ['ref_20g_3a_20ids_20dragonfly_20docs_20core_20readme_20md_20core_20functions_6',['@ref "G:/ids/dragonfly/docs/core/README.md" "Core Functions"',['../G:/ids/dragonfly/docs/README.md#autotoc_md346',1,'']]], + ['ref_20g_3a_20ids_20dragonfly_20docs_20hash_20readme_20md_20hash_20operations_7',['@ref "G:/ids/dragonfly/docs/hash/README.md" "Hash Operations"',['../G:/ids/dragonfly/docs/README.md#autotoc_md348',1,'']]], + ['ref_20g_3a_20ids_20dragonfly_20docs_20list_20readme_20md_20list_20operations_8',['@ref "G:/ids/dragonfly/docs/list/README.md" "List Operations"',['../G:/ids/dragonfly/docs/README.md#autotoc_md349',1,'']]], + ['related_20categories_9',['Related Categories',['../G:/ids/dragonfly/docs/basic/README.md#autotoc_md39',1,'Related Categories'],['../G:/ids/dragonfly/docs/core/README.md#autotoc_md135',1,'Related Categories'],['../G:/ids/dragonfly/docs/hash/README.md#autotoc_md278',1,'Related Categories'],['../G:/ids/dragonfly/docs/list/README.md#autotoc_md343',1,'Related Categories']]], + ['related_20functions_10',['Related Functions',['../df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md11',1,'Related Functions'],['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html#autotoc_md22',1,'Related Functions'],['../d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md34',1,'Related Functions'],['../d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html#autotoc_md51',1,'Related Functions'],['../d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md65',1,'Related Functions'],['../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md79',1,'Related Functions'],['../d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html#autotoc_md93',1,'Related Functions'],['../dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.html#autotoc_md104',1,'Related Functions'],['../d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html#autotoc_md117',1,'Related Functions'],['../d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html#autotoc_md130',1,'Related Functions'],['../d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html#autotoc_md147',1,'Related Functions'],['../d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md161',1,'Related Functions'],['../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md175',1,'Related Functions'],['../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md189',1,'Related Functions'],['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md203',1,'Related Functions'],['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md217',1,'Related Functions'],['../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md231',1,'Related Functions'],['../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md245',1,'Related Functions'],['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md259',1,'Related Functions'],['../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md273',1,'Related Functions'],['../da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md291',1,'Related Functions'],['../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md305',1,'Related Functions'],['../d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html#autotoc_md316',1,'Related Functions'],['../d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html#autotoc_md327',1,'Related Functions'],['../d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html#autotoc_md338',1,'Related Functions']]], + ['remotely_20from_20a_20client_3a_11',['remotely from a client:',['../d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html#autotoc_md49',1,'Call the save function remotely from a client:'],['../d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md63',1,'Call the set function remotely from a client:']]], + ['remove_20an_20element_20from_20a_20list_20stored_20at_20a_20key_20in_20dragonflyclient_12',['excerpt: Remove an element from a list stored at a key in DragonflyClient.',['../d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html#autotoc_md319',1,'']]], + ['remove_20the_20specified_20key_20from_20dragonflyclient_13',['excerpt: Remove the specified key from DragonflyClient.',['../df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md1',1,'']]], + ['respective_20value_20in_20the_20hash_20stored_20at_20key_20from_20dragonflyclient_14',['excerpt: Set the specified field to the respective value in the hash stored at key from DragonflyClient.',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md248',1,'']]], + ['respective_20values_20in_20the_20hash_20stored_20at_20key_20from_20dragonflyclient_15',['excerpt: Set the specified fields to their respective values in the hash stored at key from DragonflyClient.',['../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md262',1,'']]], + ['retrieval_20by_20specifying_20this_20as_20callback_20function_3a_16',['Test database retrieval by specifying this as callback function:',['../d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md158',1,'']]], + ['retrieval_20task_3a_17',['Add a hash table retrieval task:',['../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md75',1,'']]], + ['retrieve_20a_20player_20s_20complete_20hash_20data_3a_18',['Retrieve a player's complete hash data:',['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md199',1,'']]], + ['retrieve_20a_20player_20s_20loadout_20field_3a_19',['Retrieve a player's loadout field:',['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md213',1,'']]], + ['retrieve_20a_20player_20s_20loadout_3a_20',['Retrieve a player's loadout:',['../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md171',1,'']]], + ['retrieve_20a_20specific_20event_20log_20entry_3a_21',['Retrieve a specific event log entry:',['../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md301',1,'']]], + ['retrieve_20a_20specific_20vehicle_20property_20with_20synchronous_20callback_3a_22',['Retrieve a specific vehicle property with synchronous callback:',['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md214',1,'']]], + ['retrieve_20all_20client_20hash_20data_3a_23',['Retrieve all client hash data:',['../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md185',1,'']]], + ['retrieve_20data_20and_20send_20it_20to_20a_20specific_20client_3a_24',['Retrieve data and send it to a specific client:',['../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md173',1,'Retrieve data and send it to a specific client:'],['../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md187',1,'Retrieve data and send it to a specific client:'],['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md201',1,'Retrieve data and send it to a specific client:'],['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md215',1,'Retrieve data and send it to a specific client:'],['../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md303',1,'Retrieve data and send it to a specific client:']]], + ['retrieve_20data_20in_20singleplayer_20or_20on_20the_20server_3a_25',['Retrieve data in singleplayer or on the server:',['../d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md31',1,'']]], + ['retrieve_20data_20on_20the_20server_20and_20send_20to_20a_20specific_20client_3a_26',['Retrieve data on the server and send to a specific client:',['../d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md32',1,'']]], + ['retrieve_20data_20with_20synchronous_20callback_3a_27',['Retrieve data with synchronous callback:',['../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md172',1,'Retrieve data with synchronous callback:'],['../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md186',1,'Retrieve data with synchronous callback:'],['../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md302',1,'Retrieve data with synchronous callback:']]], + ['retrieve_20vehicle_20data_20with_20synchronous_20callback_3a_28',['Retrieve vehicle data with synchronous callback:',['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md200',1,'']]], + ['return_20value_29',['Return Value',['../df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md6',1,'Return Value'],['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html#autotoc_md19',1,'Return Value'],['../d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md29',1,'Return Value'],['../d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html#autotoc_md46',1,'Return Value'],['../d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md59',1,'Return Value'],['../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md73',1,'Return Value'],['../d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html#autotoc_md87',1,'Return Value'],['../dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.html#autotoc_md101',1,'Return Value'],['../d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html#autotoc_md112',1,'Return Value'],['../d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html#autotoc_md125',1,'Return Value'],['../d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html#autotoc_md142',1,'Return Value'],['../d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md155',1,'Return Value'],['../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md169',1,'Return Value'],['../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md183',1,'Return Value'],['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md197',1,'Return Value'],['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md211',1,'Return Value'],['../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md225',1,'Return Value'],['../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md239',1,'Return Value'],['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md253',1,'Return Value'],['../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md267',1,'Return Value'],['../da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md285',1,'Return Value'],['../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md299',1,'Return Value'],['../d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html#autotoc_md313',1,'Return Value'],['../d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html#autotoc_md324',1,'Return Value'],['../d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html#autotoc_md335',1,'Return Value']]], + ['returned_20in_20a_20single_20callback_30',['excerpt: Handles data chunks received from the database extension when data is too large to be returned in a single callback.',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html#autotoc_md14',1,'']]], + ['returns_20data_20to_20a_20specific_20client_3a_31',['Add a player-specific task that returns data to a specific client:',['../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md76',1,'']]] +]; diff --git a/api/html/search/all_12.js b/api/html/search/all_12.js new file mode 100644 index 0000000..a68548a --- /dev/null +++ b/api/html/search/all_12.js @@ -0,0 +1,65 @@ +var searchData= +[ + ['s_20complete_20hash_20data_3a_0',['Retrieve a player's complete hash data:',['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md199',1,'']]], + ['s_20hash_20table_20in_20dragonflyclient_1',['s hash table in DragonflyClient',['../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md164',1,'excerpt: Get a field value from the current client's hash table in DragonflyClient.'],['../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md178',1,'excerpt: Get all fields from the current client's hash table in DragonflyClient.'],['../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md220',1,'excerpt: Set a field value in the current client's hash table in DragonflyClient.'],['../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md234',1,'excerpt: Set multiple fields in the current client's hash table in DragonflyClient.']]], + ['s_20loadout_20field_3a_2',['Retrieve a player's loadout field:',['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md213',1,'']]], + ['s_20loadout_20under_20their_20uid_3a_3',['Store a player's loadout under their UID:',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md255',1,'']]], + ['s_20loadout_3a_4',['s loadout:',['../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md171',1,'Retrieve a player's loadout:'],['../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md227',1,'Store a player's loadout:']]], + ['save_5',['save',['../d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html',1,'']]], + ['save_20db_20to_20disc_6',['excerpt: Save DB to disc.',['../d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html#autotoc_md41',1,'']]], + ['save_20function_20remotely_20from_20a_20client_3a_7',['Call the save function remotely from a client:',['../d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html#autotoc_md49',1,'']]], + ['save_20the_20database_20without_20creating_20a_20backup_3a_8',['Save the database without creating a backup:',['../d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html#autotoc_md48',1,'']]], + ['scheduled_20environment_20for_20extension_9',['excerpt: Scheduled Environment for extension.',['../d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html#autotoc_md137',1,'']]], + ['scheduler_10',['scheduler',['../d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html',1,'']]], + ['script_3a_11',['Use in a welcome script:',['../d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html#autotoc_md115',1,'']]], + ['send_20data_20to_20a_20specific_20client_3a_12',['Send data to a specific client:',['../d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html#autotoc_md90',1,'']]], + ['send_20it_20to_20a_20specific_20client_3a_13',['send it to a specific client:',['../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md173',1,'Retrieve data and send it to a specific client:'],['../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md187',1,'Retrieve data and send it to a specific client:'],['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md201',1,'Retrieve data and send it to a specific client:'],['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md215',1,'Retrieve data and send it to a specific client:'],['../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md303',1,'Retrieve data and send it to a specific client:']]], + ['send_20to_20a_20specific_20client_3a_14',['Retrieve data on the server and send to a specific client:',['../d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md32',1,'']]], + ['server_20and_20send_20to_20a_20specific_20client_3a_15',['Retrieve data on the server and send to a specific client:',['../d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md32',1,'']]], + ['server_20from_20a_20client_3a_16',['Delete a key on the server from a client:',['../df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md9',1,'']]], + ['server_3a_17',['server:',['../df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md8',1,'Delete a key in singleplayer or on the server:'],['../d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html#autotoc_md145',1,'Forward a callback to the server:'],['../d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md31',1,'Retrieve data in singleplayer or on the server:'],['../d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md159',1,'Test from client to server:']]], + ['set_18',['set',['../d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html',1,'']]], + ['set_20a_20field_20value_20in_20the_20current_20client_20s_20hash_20table_20in_20dragonflyclient_19',['excerpt: Set a field value in the current client's hash table in DragonflyClient.',['../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md220',1,'']]], + ['set_20an_20element_20in_20a_20list_20stored_20at_20a_20key_20in_20dragonflyclient_20',['excerpt: Set an element in a list stored at a key in DragonflyClient.',['../d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html#autotoc_md330',1,'']]], + ['set_20function_20remotely_20from_20a_20client_3a_21',['Call the set function remotely from a client:',['../d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md63',1,'']]], + ['set_20multiple_20fields_20in_20the_20current_20client_20s_20hash_20table_20in_20dragonflyclient_22',['excerpt: Set multiple fields in the current client's hash table in DragonflyClient.',['../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md234',1,'']]], + ['set_20the_20specified_20field_20to_20the_20respective_20value_20in_20the_20hash_20stored_20at_20key_20from_20dragonflyclient_23',['excerpt: Set the specified field to the respective value in the hash stored at key from DragonflyClient.',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md248',1,'']]], + ['set_20the_20specified_20fields_20to_20their_20respective_20values_20in_20the_20hash_20stored_20at_20key_20from_20dragonflyclient_24',['excerpt: Set the specified fields to their respective values in the hash stored at key from DragonflyClient.',['../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md262',1,'']]], + ['set_20the_20value_20of_20stored_20key_20from_20dragonflyclient_25',['excerpt: Set the value of stored key from DragonflyClient.',['../d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md54',1,'']]], + ['settings_26',['excerpt: Initial Extension settings.',['../dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.html#autotoc_md96',1,'']]], + ['settings_3a_27',['Store multiple player settings:',['../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md242',1,'']]], + ['simple_20array_3a_28',['Store a simple array:',['../d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md61',1,'']]], + ['simple_20string_3a_29',['Test with a simple string:',['../d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md157',1,'']]], + ['single_20callback_30',['excerpt: Handles data chunks received from the database extension when data is too large to be returned in a single callback.',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html#autotoc_md14',1,'']]], + ['singleplayer_20or_20on_20the_20server_3a_31',['singleplayer or on the server:',['../df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md8',1,'Delete a key in singleplayer or on the server:'],['../d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md31',1,'Retrieve data in singleplayer or on the server:']]], + ['specific_20client_3a_32',['specific client:',['../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md76',1,'Add a player-specific task that returns data to a specific client:'],['../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md173',1,'Retrieve data and send it to a specific client:'],['../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md187',1,'Retrieve data and send it to a specific client:'],['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md201',1,'Retrieve data and send it to a specific client:'],['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md215',1,'Retrieve data and send it to a specific client:'],['../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md303',1,'Retrieve data and send it to a specific client:'],['../d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md32',1,'Retrieve data on the server and send to a specific client:'],['../d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html#autotoc_md90',1,'Send data to a specific client:']]], + ['specific_20event_20log_20entry_3a_33',['Retrieve a specific event log entry:',['../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md301',1,'']]], + ['specific_20task_20that_20returns_20data_20to_20a_20specific_20client_3a_34',['Add a player-specific task that returns data to a specific client:',['../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md76',1,'']]], + ['specific_20vehicle_20property_20with_20synchronous_20callback_3a_35',['Retrieve a specific vehicle property with synchronous callback:',['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md214',1,'']]], + ['specified_20field_20to_20the_20respective_20value_20in_20the_20hash_20stored_20at_20key_20from_20dragonflyclient_36',['excerpt: Set the specified field to the respective value in the hash stored at key from DragonflyClient.',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md248',1,'']]], + ['specified_20fields_20to_20their_20respective_20values_20in_20the_20hash_20stored_20at_20key_20from_20dragonflyclient_37',['excerpt: Set the specified fields to their respective values in the hash stored at key from DragonflyClient.',['../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md262',1,'']]], + ['specified_20key_20from_20dragonflyclient_38',['excerpt: Remove the specified key from DragonflyClient.',['../df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md1',1,'']]], + ['specifying_20this_20as_20callback_20function_3a_39',['Test database retrieval by specifying this as callback function:',['../d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md158',1,'']]], + ['start_20processing_20the_20queue_20manually_3a_40',['Start processing the queue manually:',['../d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html#autotoc_md127',1,'']]], + ['store_20a_20player_20s_20loadout_20under_20their_20uid_3a_41',['Store a player's loadout under their UID:',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md255',1,'']]], + ['store_20a_20player_20s_20loadout_3a_42',['Store a player's loadout:',['../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md227',1,'']]], + ['store_20a_20simple_20array_3a_43',['Store a simple array:',['../d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md61',1,'']]], + ['store_20data_20from_20a_20client_3a_44',['Store data from a client:',['../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md229',1,'']]], + ['store_20multiple_20player_20settings_3a_45',['Store multiple player settings:',['../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md242',1,'']]], + ['store_20multiple_20vehicle_20properties_3a_46',['Store multiple vehicle properties:',['../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md270',1,'']]], + ['store_20player_20data_20from_20a_20client_3a_47',['Store player data from a client:',['../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md243',1,'Store player data from a client:'],['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md257',1,'Store player data from a client:'],['../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md271',1,'Store player data from a client:']]], + ['store_20player_20data_20under_20their_20uid_3a_48',['Store player data under their UID:',['../d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md62',1,'']]], + ['store_20player_20loadout_20and_20position_3a_49',['Store player loadout and position:',['../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md241',1,'Store player loadout and position:'],['../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md269',1,'Store player loadout and position:']]], + ['store_20player_20preferences_3a_50',['Store player preferences:',['../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md228',1,'']]], + ['store_20vehicle_20data_3a_51',['Store vehicle data:',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md256',1,'']]], + ['stored_20at_20a_20key_20from_20dragonflyclient_52',['excerpt: Get all elements of a list stored at a key from DragonflyClient.',['../d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html#autotoc_md308',1,'']]], + ['stored_20at_20a_20key_20in_20dragonflyclient_53',['stored at a key in DragonflyClient',['../d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html#autotoc_md319',1,'excerpt: Remove an element from a list stored at a key in DragonflyClient.'],['../d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html#autotoc_md330',1,'excerpt: Set an element in a list stored at a key in DragonflyClient.']]], + ['stored_20at_20key_20from_20dragonflyclient_54',['stored at key from DragonflyClient',['../da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md280',1,'excerpt: Add element to list stored at key from DragonflyClient.'],['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md192',1,'excerpt: Get all fields and values from the hash stored at key from DragonflyClient.'],['../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md294',1,'excerpt: Get element of list stored at key from DragonflyClient.'],['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md206',1,'excerpt: Get the value associated with field in hash stored at key from DragonflyClient.'],['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md248',1,'excerpt: Set the specified field to the respective value in the hash stored at key from DragonflyClient.'],['../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md262',1,'excerpt: Set the specified fields to their respective values in the hash stored at key from DragonflyClient.']]], + ['stored_20key_20from_20dragonflyclient_55',['stored key from DragonflyClient',['../d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md24',1,'excerpt: Get the value of stored key from DragonflyClient.'],['../d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md54',1,'excerpt: Set the value of stored key from DragonflyClient.']]], + ['string_3a_56',['Test with a simple string:',['../d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md157',1,'']]], + ['structure_57',['Function Documentation Structure',['../G:/ids/dragonfly/docs/README.md#autotoc_md354',1,'']]], + ['synchronous_20_3a_58',['Process data with direct call (synchronous):',['../d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html#autotoc_md91',1,'']]], + ['synchronous_20callback_3a_59',['synchronous callback:',['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md214',1,'Retrieve a specific vehicle property with synchronous callback:'],['../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md172',1,'Retrieve data with synchronous callback:'],['../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md186',1,'Retrieve data with synchronous callback:'],['../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md302',1,'Retrieve data with synchronous callback:'],['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md200',1,'Retrieve vehicle data with synchronous callback:']]], + ['syntax_60',['Syntax',['../df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md4',1,'Syntax'],['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html#autotoc_md17',1,'Syntax'],['../d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md27',1,'Syntax'],['../d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html#autotoc_md44',1,'Syntax'],['../d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md57',1,'Syntax'],['../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md71',1,'Syntax'],['../d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html#autotoc_md85',1,'Syntax'],['../dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.html#autotoc_md99',1,'Syntax'],['../d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html#autotoc_md110',1,'Syntax'],['../d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html#autotoc_md123',1,'Syntax'],['../d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html#autotoc_md140',1,'Syntax'],['../d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md153',1,'Syntax'],['../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md167',1,'Syntax'],['../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md181',1,'Syntax'],['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md195',1,'Syntax'],['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md209',1,'Syntax'],['../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md223',1,'Syntax'],['../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md237',1,'Syntax'],['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md251',1,'Syntax'],['../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md265',1,'Syntax'],['../da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md283',1,'Syntax'],['../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md297',1,'Syntax'],['../d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html#autotoc_md311',1,'Syntax'],['../d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html#autotoc_md322',1,'Syntax'],['../d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html#autotoc_md333',1,'Syntax']]], + ['system_20chat_61',['excerpt: Displays the addon name in system chat.',['../d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html#autotoc_md107',1,'']]] +]; diff --git a/api/html/search/all_13.js b/api/html/search/all_13.js new file mode 100644 index 0000000..2131f82 --- /dev/null +++ b/api/html/search/all_13.js @@ -0,0 +1,49 @@ +var searchData= +[ + ['table_20in_20dragonflyclient_0',['table in DragonflyClient',['../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md164',1,'excerpt: Get a field value from the current client's hash table in DragonflyClient.'],['../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md178',1,'excerpt: Get all fields from the current client's hash table in DragonflyClient.'],['../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md220',1,'excerpt: Set a field value in the current client's hash table in DragonflyClient.'],['../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md234',1,'excerpt: Set multiple fields in the current client's hash table in DragonflyClient.']]], + ['table_20retrieval_20task_3a_1',['Add a hash table retrieval task:',['../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md75',1,'']]], + ['task_20that_20returns_20data_20to_20a_20specific_20client_3a_2',['Add a player-specific task that returns data to a specific client:',['../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md76',1,'']]], + ['task_20to_20queue_3',['excerpt: Add task to queue.',['../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md68',1,'']]], + ['task_3a_4',['task:',['../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md75',1,'Add a hash table retrieval task:'],['../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md77',1,'Add a list operation task:']]], + ['tasks_20to_20be_20executed_5',['excerpt: Processes a queue of tasks to be executed.',['../d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html#autotoc_md120',1,'']]], + ['test_6',['test',['../d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html',1,'']]], + ['test_20database_20retrieval_20by_20specifying_20this_20as_20callback_20function_3a_7',['Test database retrieval by specifying this as callback function:',['../d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md158',1,'']]], + ['test_20from_20client_20to_20server_3a_8',['Test from client to server:',['../d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md159',1,'']]], + ['test_20function_9',['excerpt: Test Function.',['../d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md150',1,'']]], + ['test_20with_20a_20simple_20string_3a_10',['Test with a simple string:',['../d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md157',1,'']]], + ['that_20returns_20data_20to_20a_20specific_20client_3a_11',['Add a player-specific task that returns data to a specific client:',['../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md76',1,'']]], + ['the_20addon_20name_20in_20system_20chat_12',['excerpt: Displays the addon name in system chat.',['../d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html#autotoc_md107',1,'']]], + ['the_20addon_20name_20message_3a_13',['Display the addon name message:',['../d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html#autotoc_md114',1,'']]], + ['the_20current_20client_20s_20hash_20table_20in_20dragonflyclient_14',['the current client s hash table in DragonflyClient',['../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md164',1,'excerpt: Get a field value from the current client's hash table in DragonflyClient.'],['../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md178',1,'excerpt: Get all fields from the current client's hash table in DragonflyClient.'],['../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md220',1,'excerpt: Set a field value in the current client's hash table in DragonflyClient.'],['../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md234',1,'excerpt: Set multiple fields in the current client's hash table in DragonflyClient.']]], + ['the_20database_20extension_20when_20data_20is_20too_20large_20to_20be_20returned_20in_20a_20single_20callback_15',['excerpt: Handles data chunks received from the database extension when data is too large to be returned in a single callback.',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html#autotoc_md14',1,'']]], + ['the_20database_20without_20creating_20a_20backup_3a_16',['Save the database without creating a backup:',['../d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html#autotoc_md48',1,'']]], + ['the_20extension_3a_17',['Process a callback from the extension:',['../d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html#autotoc_md144',1,'']]], + ['the_20hash_20stored_20at_20key_20from_20dragonflyclient_18',['the hash stored at key from DragonflyClient',['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md192',1,'excerpt: Get all fields and values from the hash stored at key from DragonflyClient.'],['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md248',1,'excerpt: Set the specified field to the respective value in the hash stored at key from DragonflyClient.'],['../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md262',1,'excerpt: Set the specified fields to their respective values in the hash stored at key from DragonflyClient.']]], + ['the_20queue_20manually_3a_19',['Start processing the queue manually:',['../d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html#autotoc_md127',1,'']]], + ['the_20respective_20value_20in_20the_20hash_20stored_20at_20key_20from_20dragonflyclient_20',['excerpt: Set the specified field to the respective value in the hash stored at key from DragonflyClient.',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md248',1,'']]], + ['the_20save_20function_20remotely_20from_20a_20client_3a_21',['Call the save function remotely from a client:',['../d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html#autotoc_md49',1,'']]], + ['the_20server_20and_20send_20to_20a_20specific_20client_3a_22',['Retrieve data on the server and send to a specific client:',['../d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md32',1,'']]], + ['the_20server_20from_20a_20client_3a_23',['Delete a key on the server from a client:',['../df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md9',1,'']]], + ['the_20server_3a_24',['the server:',['../df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md8',1,'Delete a key in singleplayer or on the server:'],['../d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html#autotoc_md145',1,'Forward a callback to the server:'],['../d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md31',1,'Retrieve data in singleplayer or on the server:']]], + ['the_20set_20function_20remotely_20from_20a_20client_3a_25',['Call the set function remotely from a client:',['../d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md63',1,'']]], + ['the_20specified_20field_20to_20the_20respective_20value_20in_20the_20hash_20stored_20at_20key_20from_20dragonflyclient_26',['excerpt: Set the specified field to the respective value in the hash stored at key from DragonflyClient.',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md248',1,'']]], + ['the_20specified_20fields_20to_20their_20respective_20values_20in_20the_20hash_20stored_20at_20key_20from_20dragonflyclient_27',['excerpt: Set the specified fields to their respective values in the hash stored at key from DragonflyClient.',['../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md262',1,'']]], + ['the_20specified_20key_20from_20dragonflyclient_28',['excerpt: Remove the specified key from DragonflyClient.',['../df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md1',1,'']]], + ['the_20value_20associated_20with_20field_20in_20hash_20stored_20at_20key_20from_20dragonflyclient_29',['excerpt: Get the value associated with field in hash stored at key from DragonflyClient.',['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md206',1,'']]], + ['the_20value_20of_20stored_20key_20from_20dragonflyclient_30',['the value of stored key from DragonflyClient',['../d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md24',1,'excerpt: Get the value of stored key from DragonflyClient.'],['../d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md54',1,'excerpt: Set the value of stored key from DragonflyClient.']]], + ['their_20respective_20values_20in_20the_20hash_20stored_20at_20key_20from_20dragonflyclient_31',['excerpt: Set the specified fields to their respective values in the hash stored at key from DragonflyClient.',['../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md262',1,'']]], + ['their_20uid_3a_32',['their UID:',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md255',1,'Store a player's loadout under their UID:'],['../d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md62',1,'Store player data under their UID:']]], + ['this_20as_20callback_20function_3a_33',['Test database retrieval by specifying this as callback function:',['../d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md158',1,'']]], + ['to_20a_20specific_20client_3a_34',['to a specific client:',['../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md76',1,'Add a player-specific task that returns data to a specific client:'],['../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md173',1,'Retrieve data and send it to a specific client:'],['../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md187',1,'Retrieve data and send it to a specific client:'],['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md201',1,'Retrieve data and send it to a specific client:'],['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md215',1,'Retrieve data and send it to a specific client:'],['../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md303',1,'Retrieve data and send it to a specific client:'],['../d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md32',1,'Retrieve data on the server and send to a specific client:'],['../d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html#autotoc_md90',1,'Send data to a specific client:']]], + ['to_20be_20executed_35',['excerpt: Processes a queue of tasks to be executed.',['../d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html#autotoc_md120',1,'']]], + ['to_20be_20returned_20in_20a_20single_20callback_36',['excerpt: Handles data chunks received from the database extension when data is too large to be returned in a single callback.',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html#autotoc_md14',1,'']]], + ['to_20disc_37',['excerpt: Save DB to disc.',['../d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html#autotoc_md41',1,'']]], + ['to_20list_20stored_20at_20key_20from_20dragonflyclient_38',['excerpt: Add element to list stored at key from DragonflyClient.',['../da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md280',1,'']]], + ['to_20queue_39',['excerpt: Add task to queue.',['../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md68',1,'']]], + ['to_20server_3a_40',['Test from client to server:',['../d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md159',1,'']]], + ['to_20the_20respective_20value_20in_20the_20hash_20stored_20at_20key_20from_20dragonflyclient_41',['excerpt: Set the specified field to the respective value in the hash stored at key from DragonflyClient.',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md248',1,'']]], + ['to_20the_20server_3a_42',['Forward a callback to the server:',['../d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html#autotoc_md145',1,'']]], + ['to_20their_20respective_20values_20in_20the_20hash_20stored_20at_20key_20from_20dragonflyclient_43',['excerpt: Set the specified fields to their respective values in the hash stored at key from DragonflyClient.',['../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md262',1,'']]], + ['too_20large_20to_20be_20returned_20in_20a_20single_20callback_44',['excerpt: Handles data chunks received from the database extension when data is too large to be returned in a single callback.',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html#autotoc_md14',1,'']]], + ['trigger_20queue_20processing_20from_20a_20client_3a_45',['Trigger queue processing from a client:',['../d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html#autotoc_md128',1,'']]] +]; diff --git a/api/html/search/all_14.js b/api/html/search/all_14.js new file mode 100644 index 0000000..ccb5f09 --- /dev/null +++ b/api/html/search/all_14.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['uid_3a_0',['UID:',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md255',1,'Store a player's loadout under their UID:'],['../d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md62',1,'Store player data under their UID:']]], + ['under_20their_20uid_3a_1',['under their UID:',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md255',1,'Store a player's loadout under their UID:'],['../d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md62',1,'Store player data under their UID:']]], + ['usage_2',['Usage',['../G:/ids/dragonfly/docs/README.md#autotoc_md351',1,'Basic Usage'],['../G:/ids/dragonfly/docs/basic/README.md#autotoc_md38',1,'Example Usage'],['../G:/ids/dragonfly/docs/core/README.md#autotoc_md134',1,'Example Usage'],['../G:/ids/dragonfly/docs/hash/README.md#autotoc_md277',1,'Example Usage'],['../G:/ids/dragonfly/docs/list/README.md#autotoc_md342',1,'Example Usage']]], + ['usage_20examples_3',['Usage Examples',['../G:/ids/dragonfly/docs/README.md#autotoc_md350',1,'']]], + ['use_20in_20a_20welcome_20script_3a_4',['Use in a welcome script:',['../d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html#autotoc_md115',1,'']]] +]; diff --git a/api/html/search/all_15.js b/api/html/search/all_15.js new file mode 100644 index 0000000..912c7ed --- /dev/null +++ b/api/html/search/all_15.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['value_0',['Value',['../df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md6',1,'Return Value'],['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html#autotoc_md19',1,'Return Value'],['../d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md29',1,'Return Value'],['../d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html#autotoc_md46',1,'Return Value'],['../d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md59',1,'Return Value'],['../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md73',1,'Return Value'],['../d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html#autotoc_md87',1,'Return Value'],['../dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.html#autotoc_md101',1,'Return Value'],['../d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html#autotoc_md112',1,'Return Value'],['../d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html#autotoc_md125',1,'Return Value'],['../d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html#autotoc_md142',1,'Return Value'],['../d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md155',1,'Return Value'],['../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md169',1,'Return Value'],['../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md183',1,'Return Value'],['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md197',1,'Return Value'],['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md211',1,'Return Value'],['../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md225',1,'Return Value'],['../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md239',1,'Return Value'],['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md253',1,'Return Value'],['../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md267',1,'Return Value'],['../da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md285',1,'Return Value'],['../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md299',1,'Return Value'],['../d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html#autotoc_md313',1,'Return Value'],['../d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html#autotoc_md324',1,'Return Value'],['../d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html#autotoc_md335',1,'Return Value']]], + ['value_20associated_20with_20field_20in_20hash_20stored_20at_20key_20from_20dragonflyclient_1',['excerpt: Get the value associated with field in hash stored at key from DragonflyClient.',['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md206',1,'']]], + ['value_20from_20the_20current_20client_20s_20hash_20table_20in_20dragonflyclient_2',['excerpt: Get a field value from the current client's hash table in DragonflyClient.',['../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md164',1,'']]], + ['value_20in_20the_20current_20client_20s_20hash_20table_20in_20dragonflyclient_3',['excerpt: Set a field value in the current client's hash table in DragonflyClient.',['../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md220',1,'']]], + ['value_20in_20the_20hash_20stored_20at_20key_20from_20dragonflyclient_4',['excerpt: Set the specified field to the respective value in the hash stored at key from DragonflyClient.',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md248',1,'']]], + ['value_20of_20stored_20key_20from_20dragonflyclient_5',['value of stored key from DragonflyClient',['../d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md24',1,'excerpt: Get the value of stored key from DragonflyClient.'],['../d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md54',1,'excerpt: Set the value of stored key from DragonflyClient.']]], + ['values_20from_20the_20hash_20stored_20at_20key_20from_20dragonflyclient_6',['excerpt: Get all fields and values from the hash stored at key from DragonflyClient.',['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md192',1,'']]], + ['values_20in_20the_20hash_20stored_20at_20key_20from_20dragonflyclient_7',['excerpt: Set the specified fields to their respective values in the hash stored at key from DragonflyClient.',['../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md262',1,'']]], + ['vehicle_20data_20with_20synchronous_20callback_3a_8',['Retrieve vehicle data with synchronous callback:',['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md200',1,'']]], + ['vehicle_20data_3a_9',['Store vehicle data:',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md256',1,'']]], + ['vehicle_20properties_3a_10',['Store multiple vehicle properties:',['../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md270',1,'']]], + ['vehicle_20property_20with_20synchronous_20callback_3a_11',['Retrieve a specific vehicle property with synchronous callback:',['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md214',1,'']]] +]; diff --git a/api/html/search/all_16.js b/api/html/search/all_16.js new file mode 100644 index 0000000..2eb10af --- /dev/null +++ b/api/html/search/all_16.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['welcome_20script_3a_0',['Use in a welcome script:',['../d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html#autotoc_md115',1,'']]], + ['when_20data_20is_20too_20large_20to_20be_20returned_20in_20a_20single_20callback_1',['excerpt: Handles data chunks received from the database extension when data is too large to be returned in a single callback.',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html#autotoc_md14',1,'']]], + ['with_20a_20simple_20string_3a_2',['Test with a simple string:',['../d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md157',1,'']]], + ['with_20direct_20call_20synchronous_20_3a_3',['Process data with direct call (synchronous):',['../d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html#autotoc_md91',1,'']]], + ['with_20field_20in_20hash_20stored_20at_20key_20from_20dragonflyclient_4',['excerpt: Get the value associated with field in hash stored at key from DragonflyClient.',['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md206',1,'']]], + ['with_20synchronous_20callback_3a_5',['with synchronous callback:',['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md214',1,'Retrieve a specific vehicle property with synchronous callback:'],['../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md172',1,'Retrieve data with synchronous callback:'],['../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md186',1,'Retrieve data with synchronous callback:'],['../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md302',1,'Retrieve data with synchronous callback:'],['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md200',1,'Retrieve vehicle data with synchronous callback:']]], + ['without_20creating_20a_20backup_3a_6',['Save the database without creating a backup:',['../d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html#autotoc_md48',1,'']]] +]; diff --git a/api/html/search/all_2.js b/api/html/search/all_2.js new file mode 100644 index 0000000..eeab129 --- /dev/null +++ b/api/html/search/all_2.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['backup_3a_0',['Save the database without creating a backup:',['../d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html#autotoc_md48',1,'']]], + ['basic_20data_20operations_1',['@ref "G:/ids/dragonfly/docs/basic/README.md" "Basic Data Operations"',['../G:/ids/dragonfly/docs/README.md#autotoc_md347',1,'']]], + ['basic_20readme_20md_20basic_20data_20operations_2',['@ref "G:/ids/dragonfly/docs/basic/README.md" "Basic Data Operations"',['../G:/ids/dragonfly/docs/README.md#autotoc_md347',1,'']]], + ['basic_20usage_3',['Basic Usage',['../G:/ids/dragonfly/docs/README.md#autotoc_md351',1,'']]], + ['be_20executed_4',['excerpt: Processes a queue of tasks to be executed.',['../d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html#autotoc_md120',1,'']]], + ['be_20returned_20in_20a_20single_20callback_5',['excerpt: Handles data chunks received from the database extension when data is too large to be returned in a single callback.',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html#autotoc_md14',1,'']]], + ['by_20specifying_20this_20as_20callback_20function_3a_6',['Test database retrieval by specifying this as callback function:',['../d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md158',1,'']]] +]; diff --git a/api/html/search/all_3.js b/api/html/search/all_3.js new file mode 100644 index 0000000..7a39bd7 --- /dev/null +++ b/api/html/search/all_3.js @@ -0,0 +1,23 @@ +var searchData= +[ + ['call_20synchronous_20_3a_0',['Process data with direct call (synchronous):',['../d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html#autotoc_md91',1,'']]], + ['call_20the_20save_20function_20remotely_20from_20a_20client_3a_1',['Call the save function remotely from a client:',['../d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html#autotoc_md49',1,'']]], + ['call_20the_20set_20function_20remotely_20from_20a_20client_3a_2',['Call the set function remotely from a client:',['../d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md63',1,'']]], + ['callback_3',['excerpt: Handles data chunks received from the database extension when data is too large to be returned in a single callback.',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html#autotoc_md14',1,'']]], + ['callback_20from_20the_20extension_3a_4',['Process a callback from the extension:',['../d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html#autotoc_md144',1,'']]], + ['callback_20function_3a_5',['Test database retrieval by specifying this as callback function:',['../d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md158',1,'']]], + ['callback_20to_20the_20server_3a_6',['Forward a callback to the server:',['../d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html#autotoc_md145',1,'']]], + ['callback_3a_7',['callback:',['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md214',1,'Retrieve a specific vehicle property with synchronous callback:'],['../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md172',1,'Retrieve data with synchronous callback:'],['../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md186',1,'Retrieve data with synchronous callback:'],['../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md302',1,'Retrieve data with synchronous callback:'],['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md200',1,'Retrieve vehicle data with synchronous callback:']]], + ['categories_8',['Categories',['../G:/ids/dragonfly/docs/README.md#autotoc_md345',1,'Function Categories'],['../G:/ids/dragonfly/docs/basic/README.md#autotoc_md39',1,'Related Categories'],['../G:/ids/dragonfly/docs/core/README.md#autotoc_md135',1,'Related Categories'],['../G:/ids/dragonfly/docs/hash/README.md#autotoc_md278',1,'Related Categories'],['../G:/ids/dragonfly/docs/list/README.md#autotoc_md343',1,'Related Categories']]], + ['chat_9',['excerpt: Displays the addon name in system chat.',['../d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html#autotoc_md107',1,'']]], + ['chunks_20received_20from_20the_20database_20extension_20when_20data_20is_20too_20large_20to_20be_20returned_20in_20a_20single_20callback_10',['excerpt: Handles data chunks received from the database extension when data is too large to be returned in a single callback.',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html#autotoc_md14',1,'']]], + ['client_20hash_20data_3a_11',['Retrieve all client hash data:',['../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md185',1,'']]], + ['client_20s_20hash_20table_20in_20dragonflyclient_12',['client s hash table in DragonflyClient',['../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md164',1,'excerpt: Get a field value from the current client's hash table in DragonflyClient.'],['../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md178',1,'excerpt: Get all fields from the current client's hash table in DragonflyClient.'],['../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md220',1,'excerpt: Set a field value in the current client's hash table in DragonflyClient.'],['../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md234',1,'excerpt: Set multiple fields in the current client's hash table in DragonflyClient.']]], + ['client_20to_20server_3a_13',['Test from client to server:',['../d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md159',1,'']]], + ['client_3a_14',['client:',['../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md76',1,'Add a player-specific task that returns data to a specific client:'],['../da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md289',1,'Add data from a client:'],['../d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html#autotoc_md49',1,'Call the save function remotely from a client:'],['../d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md63',1,'Call the set function remotely from a client:'],['../df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md9',1,'Delete a key on the server from a client:'],['../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md173',1,'Retrieve data and send it to a specific client:'],['../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md187',1,'Retrieve data and send it to a specific client:'],['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md201',1,'Retrieve data and send it to a specific client:'],['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md215',1,'Retrieve data and send it to a specific client:'],['../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md303',1,'Retrieve data and send it to a specific client:'],['../d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md32',1,'Retrieve data on the server and send to a specific client:'],['../d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html#autotoc_md90',1,'Send data to a specific client:'],['../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md229',1,'Store data from a client:'],['../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md243',1,'Store player data from a client:'],['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md257',1,'Store player data from a client:'],['../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md271',1,'Store player data from a client:'],['../d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html#autotoc_md128',1,'Trigger queue processing from a client:']]], + ['complete_20hash_20data_3a_15',['Retrieve a player's complete hash data:',['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md199',1,'']]], + ['core_20functions_16',['@ref "G:/ids/dragonfly/docs/core/README.md" "Core Functions"',['../G:/ids/dragonfly/docs/README.md#autotoc_md346',1,'']]], + ['core_20readme_20md_20core_20functions_17',['@ref "G:/ids/dragonfly/docs/core/README.md" "Core Functions"',['../G:/ids/dragonfly/docs/README.md#autotoc_md346',1,'']]], + ['creating_20a_20backup_3a_18',['Save the database without creating a backup:',['../d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html#autotoc_md48',1,'']]], + ['current_20client_20s_20hash_20table_20in_20dragonflyclient_19',['current client s hash table in DragonflyClient',['../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md164',1,'excerpt: Get a field value from the current client's hash table in DragonflyClient.'],['../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md178',1,'excerpt: Get all fields from the current client's hash table in DragonflyClient.'],['../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md220',1,'excerpt: Set a field value in the current client's hash table in DragonflyClient.'],['../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md234',1,'excerpt: Set multiple fields in the current client's hash table in DragonflyClient.']]] +]; diff --git a/api/html/search/all_4.js b/api/html/search/all_4.js new file mode 100644 index 0000000..f5a24d2 --- /dev/null +++ b/api/html/search/all_4.js @@ -0,0 +1,65 @@ +var searchData= +[ + ['data_20and_20send_20it_20to_20a_20specific_20client_3a_0',['data and send it to a specific client:',['../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md173',1,'Retrieve data and send it to a specific client:'],['../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md187',1,'Retrieve data and send it to a specific client:'],['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md201',1,'Retrieve data and send it to a specific client:'],['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md215',1,'Retrieve data and send it to a specific client:'],['../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md303',1,'Retrieve data and send it to a specific client:']]], + ['data_20chunks_20received_20from_20the_20database_20extension_20when_20data_20is_20too_20large_20to_20be_20returned_20in_20a_20single_20callback_1',['excerpt: Handles data chunks received from the database extension when data is too large to be returned in a single callback.',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html#autotoc_md14',1,'']]], + ['data_20from_20a_20client_3a_2',['data from a client:',['../da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md289',1,'Add data from a client:'],['../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md229',1,'Store data from a client:'],['../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md243',1,'Store player data from a client:'],['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md257',1,'Store player data from a client:'],['../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md271',1,'Store player data from a client:']]], + ['data_20from_20db_3',['excerpt: Handle data from DB.',['../d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html#autotoc_md82',1,'']]], + ['data_20in_20singleplayer_20or_20on_20the_20server_3a_4',['Retrieve data in singleplayer or on the server:',['../d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md31',1,'']]], + ['data_20is_20too_20large_20to_20be_20returned_20in_20a_20single_20callback_5',['excerpt: Handles data chunks received from the database extension when data is too large to be returned in a single callback.',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html#autotoc_md14',1,'']]], + ['data_20locally_3a_6',['Process data locally:',['../d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html#autotoc_md89',1,'']]], + ['data_20on_20the_20server_20and_20send_20to_20a_20specific_20client_3a_7',['Retrieve data on the server and send to a specific client:',['../d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md32',1,'']]], + ['data_20operations_8',['@ref "G:/ids/dragonfly/docs/basic/README.md" "Basic Data Operations"',['../G:/ids/dragonfly/docs/README.md#autotoc_md347',1,'']]], + ['data_20to_20a_20specific_20client_3a_9',['data to a specific client:',['../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md76',1,'Add a player-specific task that returns data to a specific client:'],['../d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html#autotoc_md90',1,'Send data to a specific client:']]], + ['data_20under_20their_20uid_3a_10',['Store player data under their UID:',['../d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md62',1,'']]], + ['data_20with_20direct_20call_20synchronous_20_3a_11',['Process data with direct call (synchronous):',['../d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html#autotoc_md91',1,'']]], + ['data_20with_20synchronous_20callback_3a_12',['data with synchronous callback:',['../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md172',1,'Retrieve data with synchronous callback:'],['../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md186',1,'Retrieve data with synchronous callback:'],['../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md302',1,'Retrieve data with synchronous callback:'],['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md200',1,'Retrieve vehicle data with synchronous callback:']]], + ['data_3a_13',['data:',['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md199',1,'Retrieve a player's complete hash data:'],['../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md185',1,'Retrieve all client hash data:'],['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md256',1,'Store vehicle data:']]], + ['database_20extension_20when_20data_20is_20too_20large_20to_20be_20returned_20in_20a_20single_20callback_14',['excerpt: Handles data chunks received from the database extension when data is too large to be returned in a single callback.',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html#autotoc_md14',1,'']]], + ['database_20retrieval_20by_20specifying_20this_20as_20callback_20function_3a_15',['Test database retrieval by specifying this as callback function:',['../d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md158',1,'']]], + ['database_20without_20creating_20a_20backup_3a_16',['Save the database without creating a backup:',['../d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html#autotoc_md48',1,'']]], + ['db_17',['excerpt: Handle data from DB.',['../d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html#autotoc_md82',1,'']]], + ['db_20to_20disc_18',['excerpt: Save DB to disc.',['../d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html#autotoc_md41',1,'']]], + ['delete_19',['delete',['../df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html',1,'']]], + ['delete_20a_20key_20in_20singleplayer_20or_20on_20the_20server_3a_20',['Delete a key in singleplayer or on the server:',['../df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md8',1,'']]], + ['delete_20a_20key_20on_20the_20server_20from_20a_20client_3a_21',['Delete a key on the server from a client:',['../df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md9',1,'']]], + ['description_22',['Description',['../df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md3',1,'Description'],['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html#autotoc_md16',1,'Description'],['../d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md26',1,'Description'],['../d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html#autotoc_md43',1,'Description'],['../d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md56',1,'Description'],['../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md70',1,'Description'],['../d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html#autotoc_md84',1,'Description'],['../dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.html#autotoc_md98',1,'Description'],['../d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html#autotoc_md109',1,'Description'],['../d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html#autotoc_md122',1,'Description'],['../d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html#autotoc_md139',1,'Description'],['../d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md152',1,'Description'],['../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md166',1,'Description'],['../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md180',1,'Description'],['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md194',1,'Description'],['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md208',1,'Description'],['../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md222',1,'Description'],['../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md236',1,'Description'],['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md250',1,'Description'],['../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md264',1,'Description'],['../da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md282',1,'Description'],['../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md296',1,'Description'],['../d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html#autotoc_md310',1,'Description'],['../d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html#autotoc_md321',1,'Description'],['../d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html#autotoc_md332',1,'Description']]], + ['direct_20call_20synchronous_20_3a_23',['Process data with direct call (synchronous):',['../d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html#autotoc_md91',1,'']]], + ['disc_24',['excerpt: Save DB to disc.',['../d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html#autotoc_md41',1,'']]], + ['display_20the_20addon_20name_20message_3a_25',['Display the addon name message:',['../d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html#autotoc_md114',1,'']]], + ['displays_20the_20addon_20name_20in_20system_20chat_26',['excerpt: Displays the addon name in system chat.',['../d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html#autotoc_md107',1,'']]], + ['docs_20basic_20readme_20md_20basic_20data_20operations_27',['@ref "G:/ids/dragonfly/docs/basic/README.md" "Basic Data Operations"',['../G:/ids/dragonfly/docs/README.md#autotoc_md347',1,'']]], + ['docs_20core_20readme_20md_20core_20functions_28',['@ref "G:/ids/dragonfly/docs/core/README.md" "Core Functions"',['../G:/ids/dragonfly/docs/README.md#autotoc_md346',1,'']]], + ['docs_20hash_20readme_20md_20hash_20operations_29',['@ref "G:/ids/dragonfly/docs/hash/README.md" "Hash Operations"',['../G:/ids/dragonfly/docs/README.md#autotoc_md348',1,'']]], + ['docs_20list_20readme_20md_20list_20operations_30',['@ref "G:/ids/dragonfly/docs/list/README.md" "List Operations"',['../G:/ids/dragonfly/docs/README.md#autotoc_md349',1,'']]], + ['documentation_20structure_31',['Function Documentation Structure',['../G:/ids/dragonfly/docs/README.md#autotoc_md354',1,'']]], + ['dragonfly_20docs_20basic_20readme_20md_20basic_20data_20operations_32',['@ref "G:/ids/dragonfly/docs/basic/README.md" "Basic Data Operations"',['../G:/ids/dragonfly/docs/README.md#autotoc_md347',1,'']]], + ['dragonfly_20docs_20core_20readme_20md_20core_20functions_33',['@ref "G:/ids/dragonfly/docs/core/README.md" "Core Functions"',['../G:/ids/dragonfly/docs/README.md#autotoc_md346',1,'']]], + ['dragonfly_20docs_20hash_20readme_20md_20hash_20operations_34',['@ref "G:/ids/dragonfly/docs/hash/README.md" "Hash Operations"',['../G:/ids/dragonfly/docs/README.md#autotoc_md348',1,'']]], + ['dragonfly_20docs_20list_20readme_20md_20list_20operations_35',['@ref "G:/ids/dragonfly/docs/list/README.md" "List Operations"',['../G:/ids/dragonfly/docs/README.md#autotoc_md349',1,'']]], + ['dragonfly_5fdb_5ffnc_5faddtask_36',['dragonfly_db_fnc_addTask',['../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md69',1,'']]], + ['dragonfly_5fdb_5ffnc_5fdelete_37',['dragonfly_db_fnc_delete',['../df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md2',1,'']]], + ['dragonfly_5fdb_5ffnc_5ffetch_38',['dragonfly_db_fnc_fetch',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html#autotoc_md15',1,'']]], + ['dragonfly_5fdb_5ffnc_5fget_39',['dragonfly_db_fnc_get',['../d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md25',1,'']]], + ['dragonfly_5fdb_5ffnc_5fhandler_40',['dragonfly_db_fnc_handler',['../d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html#autotoc_md83',1,'']]], + ['dragonfly_5fdb_5ffnc_5fhashget_41',['dragonfly_db_fnc_hashGet',['../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md165',1,'']]], + ['dragonfly_5fdb_5ffnc_5fhashgetall_42',['dragonfly_db_fnc_hashGetAll',['../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md179',1,'']]], + ['dragonfly_5fdb_5ffnc_5fhashgetallid_43',['dragonfly_db_fnc_hashGetAllId',['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md193',1,'']]], + ['dragonfly_5fdb_5ffnc_5fhashgetid_44',['dragonfly_db_fnc_hashGetId',['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md207',1,'']]], + ['dragonfly_5fdb_5ffnc_5fhashset_45',['dragonfly_db_fnc_hashSet',['../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md221',1,'']]], + ['dragonfly_5fdb_5ffnc_5fhashsetbulk_46',['dragonfly_db_fnc_hashSetBulk',['../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md235',1,'']]], + ['dragonfly_5fdb_5ffnc_5fhashsetid_47',['dragonfly_db_fnc_hashSetId',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md249',1,'']]], + ['dragonfly_5fdb_5ffnc_5fhashsetidbulk_48',['dragonfly_db_fnc_hashSetIdBulk',['../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md263',1,'']]], + ['dragonfly_5fdb_5ffnc_5finit_49',['dragonfly_db_fnc_init',['../dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.html#autotoc_md97',1,'']]], + ['dragonfly_5fdb_5ffnc_5flistadd_50',['dragonfly_db_fnc_listAdd',['../da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md281',1,'']]], + ['dragonfly_5fdb_5ffnc_5flistget_51',['dragonfly_db_fnc_listGet',['../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md295',1,'']]], + ['dragonfly_5fdb_5ffnc_5flistload_52',['dragonfly_db_fnc_listLoad',['../d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html#autotoc_md309',1,'']]], + ['dragonfly_5fdb_5ffnc_5flistremove_53',['dragonfly_db_fnc_listRemove',['../d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html#autotoc_md320',1,'']]], + ['dragonfly_5fdb_5ffnc_5flistset_54',['dragonfly_db_fnc_listSet',['../d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html#autotoc_md331',1,'']]], + ['dragonfly_5fdb_5ffnc_5fprintaddonname_55',['dragonfly_db_fnc_printAddonName',['../d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html#autotoc_md108',1,'']]], + ['dragonfly_5fdb_5ffnc_5fprocessqueue_56',['dragonfly_db_fnc_processQueue',['../d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html#autotoc_md121',1,'']]], + ['dragonfly_5fdb_5ffnc_5fsave_57',['dragonfly_db_fnc_save',['../d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html#autotoc_md42',1,'']]], + ['dragonfly_5fdb_5ffnc_5fscheduler_58',['dragonfly_db_fnc_scheduler',['../d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html#autotoc_md138',1,'']]], + ['dragonfly_5fdb_5ffnc_5fset_59',['dragonfly_db_fnc_set',['../d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md55',1,'']]], + ['dragonfly_5fdb_5ffnc_5ftest_60',['dragonfly_db_fnc_test',['../d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md151',1,'']]], + ['dragonflyclient_61',['DragonflyClient',['../da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md280',1,'excerpt: Add element to list stored at key from DragonflyClient.'],['../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md164',1,'excerpt: Get a field value from the current client's hash table in DragonflyClient.'],['../d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html#autotoc_md308',1,'excerpt: Get all elements of a list stored at a key from DragonflyClient.'],['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md192',1,'excerpt: Get all fields and values from the hash stored at key from DragonflyClient.'],['../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md178',1,'excerpt: Get all fields from the current client's hash table in DragonflyClient.'],['../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md294',1,'excerpt: Get element of list stored at key from DragonflyClient.'],['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md206',1,'excerpt: Get the value associated with field in hash stored at key from DragonflyClient.'],['../d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md24',1,'excerpt: Get the value of stored key from DragonflyClient.'],['../d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html#autotoc_md319',1,'excerpt: Remove an element from a list stored at a key in DragonflyClient.'],['../df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md1',1,'excerpt: Remove the specified key from DragonflyClient.'],['../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md220',1,'excerpt: Set a field value in the current client's hash table in DragonflyClient.'],['../d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html#autotoc_md330',1,'excerpt: Set an element in a list stored at a key in DragonflyClient.'],['../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md234',1,'excerpt: Set multiple fields in the current client's hash table in DragonflyClient.'],['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md248',1,'excerpt: Set the specified field to the respective value in the hash stored at key from DragonflyClient.'],['../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md262',1,'excerpt: Set the specified fields to their respective values in the hash stored at key from DragonflyClient.'],['../d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md54',1,'excerpt: Set the value of stored key from DragonflyClient.']]] +]; diff --git a/api/html/search/all_5.js b/api/html/search/all_5.js new file mode 100644 index 0000000..d80399d --- /dev/null +++ b/api/html/search/all_5.js @@ -0,0 +1,43 @@ +var searchData= +[ + ['element_20from_20a_20list_20stored_20at_20a_20key_20in_20dragonflyclient_0',['excerpt: Remove an element from a list stored at a key in DragonflyClient.',['../d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html#autotoc_md319',1,'']]], + ['element_20in_20a_20list_20stored_20at_20a_20key_20in_20dragonflyclient_1',['excerpt: Set an element in a list stored at a key in DragonflyClient.',['../d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html#autotoc_md330',1,'']]], + ['element_20of_20list_20stored_20at_20key_20from_20dragonflyclient_2',['excerpt: Get element of list stored at key from DragonflyClient.',['../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md294',1,'']]], + ['element_20to_20list_20stored_20at_20key_20from_20dragonflyclient_3',['excerpt: Add element to list stored at key from DragonflyClient.',['../da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md280',1,'']]], + ['elements_20of_20a_20list_20stored_20at_20a_20key_20from_20dragonflyclient_4',['excerpt: Get all elements of a list stored at a key from DragonflyClient.',['../d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html#autotoc_md308',1,'']]], + ['entry_3a_5',['entry:',['../da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md287',1,'Add an event log entry:'],['../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md301',1,'Retrieve a specific event log entry:']]], + ['environment_20for_20extension_6',['excerpt: Scheduled Environment for extension.',['../d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html#autotoc_md137',1,'']]], + ['event_20log_20entry_3a_7',['event log entry:',['../da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md287',1,'Add an event log entry:'],['../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md301',1,'Retrieve a specific event log entry:']]], + ['example_20usage_8',['Example Usage',['../G:/ids/dragonfly/docs/basic/README.md#autotoc_md38',1,'Example Usage'],['../G:/ids/dragonfly/docs/core/README.md#autotoc_md134',1,'Example Usage'],['../G:/ids/dragonfly/docs/hash/README.md#autotoc_md277',1,'Example Usage'],['../G:/ids/dragonfly/docs/list/README.md#autotoc_md342',1,'Example Usage']]], + ['examples_9',['Examples',['../df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md7',1,'Examples'],['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html#autotoc_md20',1,'Examples'],['../d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md30',1,'Examples'],['../d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html#autotoc_md47',1,'Examples'],['../d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md60',1,'Examples'],['../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md74',1,'Examples'],['../d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html#autotoc_md88',1,'Examples'],['../dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.html#autotoc_md102',1,'Examples'],['../d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html#autotoc_md113',1,'Examples'],['../d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html#autotoc_md126',1,'Examples'],['../d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html#autotoc_md143',1,'Examples'],['../d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md156',1,'Examples'],['../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md170',1,'Examples'],['../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md184',1,'Examples'],['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md198',1,'Examples'],['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md212',1,'Examples'],['../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md226',1,'Examples'],['../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md240',1,'Examples'],['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md254',1,'Examples'],['../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md268',1,'Examples'],['../da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md286',1,'Examples'],['../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md300',1,'Examples'],['../d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html#autotoc_md314',1,'Examples'],['../d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html#autotoc_md325',1,'Examples'],['../d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html#autotoc_md336',1,'Examples'],['../G:/ids/dragonfly/docs/README.md#autotoc_md350',1,'Usage Examples']]], + ['excerpt_3a_20add_20element_20to_20list_20stored_20at_20key_20from_20dragonflyclient_10',['excerpt: Add element to list stored at key from DragonflyClient.',['../da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md280',1,'']]], + ['excerpt_3a_20add_20task_20to_20queue_11',['excerpt: Add task to queue.',['../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md68',1,'']]], + ['excerpt_3a_20displays_20the_20addon_20name_20in_20system_20chat_12',['excerpt: Displays the addon name in system chat.',['../d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html#autotoc_md107',1,'']]], + ['excerpt_3a_20get_20a_20field_20value_20from_20the_20current_20client_20s_20hash_20table_20in_20dragonflyclient_13',['excerpt: Get a field value from the current client's hash table in DragonflyClient.',['../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md164',1,'']]], + ['excerpt_3a_20get_20all_20elements_20of_20a_20list_20stored_20at_20a_20key_20from_20dragonflyclient_14',['excerpt: Get all elements of a list stored at a key from DragonflyClient.',['../d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html#autotoc_md308',1,'']]], + ['excerpt_3a_20get_20all_20fields_20and_20values_20from_20the_20hash_20stored_20at_20key_20from_20dragonflyclient_15',['excerpt: Get all fields and values from the hash stored at key from DragonflyClient.',['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md192',1,'']]], + ['excerpt_3a_20get_20all_20fields_20from_20the_20current_20client_20s_20hash_20table_20in_20dragonflyclient_16',['excerpt: Get all fields from the current client's hash table in DragonflyClient.',['../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md178',1,'']]], + ['excerpt_3a_20get_20element_20of_20list_20stored_20at_20key_20from_20dragonflyclient_17',['excerpt: Get element of list stored at key from DragonflyClient.',['../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md294',1,'']]], + ['excerpt_3a_20get_20the_20value_20associated_20with_20field_20in_20hash_20stored_20at_20key_20from_20dragonflyclient_18',['excerpt: Get the value associated with field in hash stored at key from DragonflyClient.',['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md206',1,'']]], + ['excerpt_3a_20get_20the_20value_20of_20stored_20key_20from_20dragonflyclient_19',['excerpt: Get the value of stored key from DragonflyClient.',['../d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md24',1,'']]], + ['excerpt_3a_20handle_20data_20from_20db_20',['excerpt: Handle data from DB.',['../d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html#autotoc_md82',1,'']]], + ['excerpt_3a_20handles_20data_20chunks_20received_20from_20the_20database_20extension_20when_20data_20is_20too_20large_20to_20be_20returned_20in_20a_20single_20callback_21',['excerpt: Handles data chunks received from the database extension when data is too large to be returned in a single callback.',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html#autotoc_md14',1,'']]], + ['excerpt_3a_20initial_20extension_20settings_22',['excerpt: Initial Extension settings.',['../dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.html#autotoc_md96',1,'']]], + ['excerpt_3a_20processes_20a_20queue_20of_20tasks_20to_20be_20executed_23',['excerpt: Processes a queue of tasks to be executed.',['../d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html#autotoc_md120',1,'']]], + ['excerpt_3a_20remove_20an_20element_20from_20a_20list_20stored_20at_20a_20key_20in_20dragonflyclient_24',['excerpt: Remove an element from a list stored at a key in DragonflyClient.',['../d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html#autotoc_md319',1,'']]], + ['excerpt_3a_20remove_20the_20specified_20key_20from_20dragonflyclient_25',['excerpt: Remove the specified key from DragonflyClient.',['../df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md1',1,'']]], + ['excerpt_3a_20save_20db_20to_20disc_26',['excerpt: Save DB to disc.',['../d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html#autotoc_md41',1,'']]], + ['excerpt_3a_20scheduled_20environment_20for_20extension_27',['excerpt: Scheduled Environment for extension.',['../d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html#autotoc_md137',1,'']]], + ['excerpt_3a_20set_20a_20field_20value_20in_20the_20current_20client_20s_20hash_20table_20in_20dragonflyclient_28',['excerpt: Set a field value in the current client's hash table in DragonflyClient.',['../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md220',1,'']]], + ['excerpt_3a_20set_20an_20element_20in_20a_20list_20stored_20at_20a_20key_20in_20dragonflyclient_29',['excerpt: Set an element in a list stored at a key in DragonflyClient.',['../d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html#autotoc_md330',1,'']]], + ['excerpt_3a_20set_20multiple_20fields_20in_20the_20current_20client_20s_20hash_20table_20in_20dragonflyclient_30',['excerpt: Set multiple fields in the current client's hash table in DragonflyClient.',['../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md234',1,'']]], + ['excerpt_3a_20set_20the_20specified_20field_20to_20the_20respective_20value_20in_20the_20hash_20stored_20at_20key_20from_20dragonflyclient_31',['excerpt: Set the specified field to the respective value in the hash stored at key from DragonflyClient.',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md248',1,'']]], + ['excerpt_3a_20set_20the_20specified_20fields_20to_20their_20respective_20values_20in_20the_20hash_20stored_20at_20key_20from_20dragonflyclient_32',['excerpt: Set the specified fields to their respective values in the hash stored at key from DragonflyClient.',['../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md262',1,'']]], + ['excerpt_3a_20set_20the_20value_20of_20stored_20key_20from_20dragonflyclient_33',['excerpt: Set the value of stored key from DragonflyClient.',['../d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md54',1,'']]], + ['excerpt_3a_20test_20function_34',['excerpt: Test Function.',['../d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md150',1,'']]], + ['executed_35',['excerpt: Processes a queue of tasks to be executed.',['../d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html#autotoc_md120',1,'']]], + ['extension_36',['excerpt: Scheduled Environment for extension.',['../d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html#autotoc_md137',1,'']]], + ['extension_20settings_37',['excerpt: Initial Extension settings.',['../dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.html#autotoc_md96',1,'']]], + ['extension_20when_20data_20is_20too_20large_20to_20be_20returned_20in_20a_20single_20callback_38',['excerpt: Handles data chunks received from the database extension when data is too large to be returned in a single callback.',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html#autotoc_md14',1,'']]], + ['extension_3a_39',['Process a callback from the extension:',['../d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html#autotoc_md144',1,'']]] +]; diff --git a/api/html/search/all_6.js b/api/html/search/all_6.js new file mode 100644 index 0000000..d2f9dc2 --- /dev/null +++ b/api/html/search/all_6.js @@ -0,0 +1,30 @@ +var searchData= +[ + ['fetch_0',['fetch',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html',1,'']]], + ['field_20in_20hash_20stored_20at_20key_20from_20dragonflyclient_1',['excerpt: Get the value associated with field in hash stored at key from DragonflyClient.',['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md206',1,'']]], + ['field_20to_20the_20respective_20value_20in_20the_20hash_20stored_20at_20key_20from_20dragonflyclient_2',['excerpt: Set the specified field to the respective value in the hash stored at key from DragonflyClient.',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md248',1,'']]], + ['field_20value_20from_20the_20current_20client_20s_20hash_20table_20in_20dragonflyclient_3',['excerpt: Get a field value from the current client's hash table in DragonflyClient.',['../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md164',1,'']]], + ['field_20value_20in_20the_20current_20client_20s_20hash_20table_20in_20dragonflyclient_4',['excerpt: Set a field value in the current client's hash table in DragonflyClient.',['../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md220',1,'']]], + ['field_3a_5',['Retrieve a player's loadout field:',['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md213',1,'']]], + ['fields_20and_20values_20from_20the_20hash_20stored_20at_20key_20from_20dragonflyclient_6',['excerpt: Get all fields and values from the hash stored at key from DragonflyClient.',['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md192',1,'']]], + ['fields_20from_20the_20current_20client_20s_20hash_20table_20in_20dragonflyclient_7',['excerpt: Get all fields from the current client's hash table in DragonflyClient.',['../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md178',1,'']]], + ['fields_20in_20the_20current_20client_20s_20hash_20table_20in_20dragonflyclient_8',['excerpt: Set multiple fields in the current client's hash table in DragonflyClient.',['../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md234',1,'']]], + ['fields_20to_20their_20respective_20values_20in_20the_20hash_20stored_20at_20key_20from_20dragonflyclient_9',['excerpt: Set the specified fields to their respective values in the hash stored at key from DragonflyClient.',['../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md262',1,'']]], + ['for_20extension_10',['excerpt: Scheduled Environment for extension.',['../d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html#autotoc_md137',1,'']]], + ['forward_20a_20callback_20to_20the_20server_3a_11',['Forward a callback to the server:',['../d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html#autotoc_md145',1,'']]], + ['from_20a_20client_3a_12',['from a client:',['../da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md289',1,'Add data from a client:'],['../d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html#autotoc_md49',1,'Call the save function remotely from a client:'],['../d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md63',1,'Call the set function remotely from a client:'],['../df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md9',1,'Delete a key on the server from a client:'],['../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md229',1,'Store data from a client:'],['../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md243',1,'Store player data from a client:'],['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md257',1,'Store player data from a client:'],['../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md271',1,'Store player data from a client:'],['../d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html#autotoc_md128',1,'Trigger queue processing from a client:']]], + ['from_20a_20list_20stored_20at_20a_20key_20in_20dragonflyclient_13',['excerpt: Remove an element from a list stored at a key in DragonflyClient.',['../d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html#autotoc_md319',1,'']]], + ['from_20client_20to_20server_3a_14',['Test from client to server:',['../d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md159',1,'']]], + ['from_20db_15',['excerpt: Handle data from DB.',['../d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html#autotoc_md82',1,'']]], + ['from_20dragonflyclient_16',['from DragonflyClient',['../da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md280',1,'excerpt: Add element to list stored at key from DragonflyClient.'],['../d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html#autotoc_md308',1,'excerpt: Get all elements of a list stored at a key from DragonflyClient.'],['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md192',1,'excerpt: Get all fields and values from the hash stored at key from DragonflyClient.'],['../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md294',1,'excerpt: Get element of list stored at key from DragonflyClient.'],['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md206',1,'excerpt: Get the value associated with field in hash stored at key from DragonflyClient.'],['../d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md24',1,'excerpt: Get the value of stored key from DragonflyClient.'],['../df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md1',1,'excerpt: Remove the specified key from DragonflyClient.'],['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md248',1,'excerpt: Set the specified field to the respective value in the hash stored at key from DragonflyClient.'],['../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md262',1,'excerpt: Set the specified fields to their respective values in the hash stored at key from DragonflyClient.'],['../d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md54',1,'excerpt: Set the value of stored key from DragonflyClient.']]], + ['from_20the_20current_20client_20s_20hash_20table_20in_20dragonflyclient_17',['from the current client s hash table in DragonflyClient',['../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md164',1,'excerpt: Get a field value from the current client's hash table in DragonflyClient.'],['../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md178',1,'excerpt: Get all fields from the current client's hash table in DragonflyClient.']]], + ['from_20the_20database_20extension_20when_20data_20is_20too_20large_20to_20be_20returned_20in_20a_20single_20callback_18',['excerpt: Handles data chunks received from the database extension when data is too large to be returned in a single callback.',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html#autotoc_md14',1,'']]], + ['from_20the_20extension_3a_19',['Process a callback from the extension:',['../d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html#autotoc_md144',1,'']]], + ['from_20the_20hash_20stored_20at_20key_20from_20dragonflyclient_20',['excerpt: Get all fields and values from the hash stored at key from DragonflyClient.',['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md192',1,'']]], + ['function_21',['excerpt: Test Function.',['../d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md150',1,'']]], + ['function_20categories_22',['Function Categories',['../G:/ids/dragonfly/docs/README.md#autotoc_md345',1,'']]], + ['function_20documentation_20structure_23',['Function Documentation Structure',['../G:/ids/dragonfly/docs/README.md#autotoc_md354',1,'']]], + ['function_20remotely_20from_20a_20client_3a_24',['function remotely from a client:',['../d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html#autotoc_md49',1,'Call the save function remotely from a client:'],['../d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md63',1,'Call the set function remotely from a client:']]], + ['function_3a_25',['Test database retrieval by specifying this as callback function:',['../d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md158',1,'']]], + ['functions_26',['Functions',['../G:/ids/dragonfly/docs/README.md#autotoc_md346',1,'@ref "G:/ids/dragonfly/docs/core/README.md" "Core Functions"'],['../G:/ids/dragonfly/docs/basic/README.md#autotoc_md37',1,'Available Functions'],['../G:/ids/dragonfly/docs/core/README.md#autotoc_md133',1,'Available Functions'],['../G:/ids/dragonfly/docs/hash/README.md#autotoc_md276',1,'Available Functions'],['../G:/ids/dragonfly/docs/list/README.md#autotoc_md341',1,'Available Functions'],['../df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md11',1,'Related Functions'],['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html#autotoc_md22',1,'Related Functions'],['../d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md34',1,'Related Functions'],['../d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html#autotoc_md51',1,'Related Functions'],['../d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md65',1,'Related Functions'],['../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md79',1,'Related Functions'],['../d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html#autotoc_md93',1,'Related Functions'],['../dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.html#autotoc_md104',1,'Related Functions'],['../d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html#autotoc_md117',1,'Related Functions'],['../d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html#autotoc_md130',1,'Related Functions'],['../d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html#autotoc_md147',1,'Related Functions'],['../d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md161',1,'Related Functions'],['../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md175',1,'Related Functions'],['../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md189',1,'Related Functions'],['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md203',1,'Related Functions'],['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md217',1,'Related Functions'],['../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md231',1,'Related Functions'],['../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md245',1,'Related Functions'],['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md259',1,'Related Functions'],['../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md273',1,'Related Functions'],['../da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md291',1,'Related Functions'],['../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md305',1,'Related Functions'],['../d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html#autotoc_md316',1,'Related Functions'],['../d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html#autotoc_md327',1,'Related Functions'],['../d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html#autotoc_md338',1,'Related Functions']]] +]; diff --git a/api/html/search/all_7.js b/api/html/search/all_7.js new file mode 100644 index 0000000..9a0dbd6 --- /dev/null +++ b/api/html/search/all_7.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['g_3a_20ids_20dragonfly_20docs_20basic_20readme_20md_20basic_20data_20operations_0',['@ref "G:/ids/dragonfly/docs/basic/README.md" "Basic Data Operations"',['../G:/ids/dragonfly/docs/README.md#autotoc_md347',1,'']]], + ['g_3a_20ids_20dragonfly_20docs_20core_20readme_20md_20core_20functions_1',['@ref "G:/ids/dragonfly/docs/core/README.md" "Core Functions"',['../G:/ids/dragonfly/docs/README.md#autotoc_md346',1,'']]], + ['g_3a_20ids_20dragonfly_20docs_20hash_20readme_20md_20hash_20operations_2',['@ref "G:/ids/dragonfly/docs/hash/README.md" "Hash Operations"',['../G:/ids/dragonfly/docs/README.md#autotoc_md348',1,'']]], + ['g_3a_20ids_20dragonfly_20docs_20list_20readme_20md_20list_20operations_3',['@ref "G:/ids/dragonfly/docs/list/README.md" "List Operations"',['../G:/ids/dragonfly/docs/README.md#autotoc_md349',1,'']]], + ['get_4',['get',['../d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html',1,'']]], + ['get_20a_20field_20value_20from_20the_20current_20client_20s_20hash_20table_20in_20dragonflyclient_5',['excerpt: Get a field value from the current client's hash table in DragonflyClient.',['../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md164',1,'']]], + ['get_20all_20elements_20of_20a_20list_20stored_20at_20a_20key_20from_20dragonflyclient_6',['excerpt: Get all elements of a list stored at a key from DragonflyClient.',['../d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html#autotoc_md308',1,'']]], + ['get_20all_20fields_20and_20values_20from_20the_20hash_20stored_20at_20key_20from_20dragonflyclient_7',['excerpt: Get all fields and values from the hash stored at key from DragonflyClient.',['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md192',1,'']]], + ['get_20all_20fields_20from_20the_20current_20client_20s_20hash_20table_20in_20dragonflyclient_8',['excerpt: Get all fields from the current client's hash table in DragonflyClient.',['../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md178',1,'']]], + ['get_20element_20of_20list_20stored_20at_20key_20from_20dragonflyclient_9',['excerpt: Get element of list stored at key from DragonflyClient.',['../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md294',1,'']]], + ['get_20the_20value_20associated_20with_20field_20in_20hash_20stored_20at_20key_20from_20dragonflyclient_10',['excerpt: Get the value associated with field in hash stored at key from DragonflyClient.',['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md206',1,'']]], + ['get_20the_20value_20of_20stored_20key_20from_20dragonflyclient_11',['excerpt: Get the value of stored key from DragonflyClient.',['../d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md24',1,'']]] +]; diff --git a/api/html/search/all_8.js b/api/html/search/all_8.js new file mode 100644 index 0000000..b00e9b9 --- /dev/null +++ b/api/html/search/all_8.js @@ -0,0 +1,20 @@ +var searchData= +[ + ['handle_20data_20from_20db_0',['excerpt: Handle data from DB.',['../d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html#autotoc_md82',1,'']]], + ['handler_1',['handler',['../d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html',1,'']]], + ['handles_20data_20chunks_20received_20from_20the_20database_20extension_20when_20data_20is_20too_20large_20to_20be_20returned_20in_20a_20single_20callback_2',['excerpt: Handles data chunks received from the database extension when data is too large to be returned in a single callback.',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html#autotoc_md14',1,'']]], + ['hash_20data_3a_3',['hash data:',['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md199',1,'Retrieve a player's complete hash data:'],['../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md185',1,'Retrieve all client hash data:']]], + ['hash_20operations_4',['Hash Operations',['../G:/ids/dragonfly/docs/README.md#autotoc_md348',1,'@ref "G:/ids/dragonfly/docs/hash/README.md" "Hash Operations"'],['../G:/ids/dragonfly/docs/README.md#autotoc_md352',1,'Hash Operations']]], + ['hash_20readme_20md_20hash_20operations_5',['@ref "G:/ids/dragonfly/docs/hash/README.md" "Hash Operations"',['../G:/ids/dragonfly/docs/README.md#autotoc_md348',1,'']]], + ['hash_20stored_20at_20key_20from_20dragonflyclient_6',['hash stored at key from DragonflyClient',['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md192',1,'excerpt: Get all fields and values from the hash stored at key from DragonflyClient.'],['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md206',1,'excerpt: Get the value associated with field in hash stored at key from DragonflyClient.'],['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md248',1,'excerpt: Set the specified field to the respective value in the hash stored at key from DragonflyClient.'],['../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md262',1,'excerpt: Set the specified fields to their respective values in the hash stored at key from DragonflyClient.']]], + ['hash_20table_20in_20dragonflyclient_7',['hash table in DragonflyClient',['../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md164',1,'excerpt: Get a field value from the current client's hash table in DragonflyClient.'],['../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md178',1,'excerpt: Get all fields from the current client's hash table in DragonflyClient.'],['../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md220',1,'excerpt: Set a field value in the current client's hash table in DragonflyClient.'],['../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md234',1,'excerpt: Set multiple fields in the current client's hash table in DragonflyClient.']]], + ['hash_20table_20retrieval_20task_3a_8',['Add a hash table retrieval task:',['../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md75',1,'']]], + ['hashget_9',['hashGet',['../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html',1,'']]], + ['hashgetall_10',['hashGetAll',['../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html',1,'']]], + ['hashgetallid_11',['hashGetAllId',['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html',1,'']]], + ['hashgetid_12',['hashGetId',['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html',1,'']]], + ['hashset_13',['hashSet',['../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html',1,'']]], + ['hashsetbulk_14',['hashSetBulk',['../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html',1,'']]], + ['hashsetid_15',['hashSetId',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html',1,'']]], + ['hashsetidbulk_16',['hashSetIdBulk',['../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html',1,'']]] +]; diff --git a/api/html/search/all_9.js b/api/html/search/all_9.js new file mode 100644 index 0000000..0e0f526 --- /dev/null +++ b/api/html/search/all_9.js @@ -0,0 +1,20 @@ +var searchData= +[ + ['ids_20dragonfly_20docs_20basic_20readme_20md_20basic_20data_20operations_0',['@ref "G:/ids/dragonfly/docs/basic/README.md" "Basic Data Operations"',['../G:/ids/dragonfly/docs/README.md#autotoc_md347',1,'']]], + ['ids_20dragonfly_20docs_20core_20readme_20md_20core_20functions_1',['@ref "G:/ids/dragonfly/docs/core/README.md" "Core Functions"',['../G:/ids/dragonfly/docs/README.md#autotoc_md346',1,'']]], + ['ids_20dragonfly_20docs_20hash_20readme_20md_20hash_20operations_2',['@ref "G:/ids/dragonfly/docs/hash/README.md" "Hash Operations"',['../G:/ids/dragonfly/docs/README.md#autotoc_md348',1,'']]], + ['ids_20dragonfly_20docs_20list_20readme_20md_20list_20operations_3',['@ref "G:/ids/dragonfly/docs/list/README.md" "List Operations"',['../G:/ids/dragonfly/docs/README.md#autotoc_md349',1,'']]], + ['in_20a_20list_20stored_20at_20a_20key_20in_20dragonflyclient_4',['excerpt: Set an element in a list stored at a key in DragonflyClient.',['../d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html#autotoc_md330',1,'']]], + ['in_20a_20single_20callback_5',['excerpt: Handles data chunks received from the database extension when data is too large to be returned in a single callback.',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html#autotoc_md14',1,'']]], + ['in_20a_20welcome_20script_3a_6',['Use in a welcome script:',['../d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html#autotoc_md115',1,'']]], + ['in_20dragonflyclient_7',['in DragonflyClient',['../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md164',1,'excerpt: Get a field value from the current client's hash table in DragonflyClient.'],['../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md178',1,'excerpt: Get all fields from the current client's hash table in DragonflyClient.'],['../d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html#autotoc_md319',1,'excerpt: Remove an element from a list stored at a key in DragonflyClient.'],['../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md220',1,'excerpt: Set a field value in the current client's hash table in DragonflyClient.'],['../d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html#autotoc_md330',1,'excerpt: Set an element in a list stored at a key in DragonflyClient.'],['../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md234',1,'excerpt: Set multiple fields in the current client's hash table in DragonflyClient.']]], + ['in_20hash_20stored_20at_20key_20from_20dragonflyclient_8',['excerpt: Get the value associated with field in hash stored at key from DragonflyClient.',['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md206',1,'']]], + ['in_20singleplayer_20or_20on_20the_20server_3a_9',['in singleplayer or on the server:',['../df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md8',1,'Delete a key in singleplayer or on the server:'],['../d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md31',1,'Retrieve data in singleplayer or on the server:']]], + ['in_20system_20chat_10',['excerpt: Displays the addon name in system chat.',['../d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html#autotoc_md107',1,'']]], + ['in_20the_20current_20client_20s_20hash_20table_20in_20dragonflyclient_11',['in the current client s hash table in DragonflyClient',['../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md220',1,'excerpt: Set a field value in the current client's hash table in DragonflyClient.'],['../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md234',1,'excerpt: Set multiple fields in the current client's hash table in DragonflyClient.']]], + ['in_20the_20hash_20stored_20at_20key_20from_20dragonflyclient_12',['in the hash stored at key from DragonflyClient',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md248',1,'excerpt: Set the specified field to the respective value in the hash stored at key from DragonflyClient.'],['../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md262',1,'excerpt: Set the specified fields to their respective values in the hash stored at key from DragonflyClient.']]], + ['init_13',['init',['../dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.html',1,'']]], + ['initial_20extension_20settings_14',['excerpt: Initial Extension settings.',['../dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.html#autotoc_md96',1,'']]], + ['is_20too_20large_20to_20be_20returned_20in_20a_20single_20callback_15',['excerpt: Handles data chunks received from the database extension when data is too large to be returned in a single callback.',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html#autotoc_md14',1,'']]], + ['it_20to_20a_20specific_20client_3a_16',['it to a specific client:',['../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md173',1,'Retrieve data and send it to a specific client:'],['../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md187',1,'Retrieve data and send it to a specific client:'],['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md201',1,'Retrieve data and send it to a specific client:'],['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md215',1,'Retrieve data and send it to a specific client:'],['../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md303',1,'Retrieve data and send it to a specific client:']]] +]; diff --git a/api/html/search/all_a.js b/api/html/search/all_a.js new file mode 100644 index 0000000..3915d61 --- /dev/null +++ b/api/html/search/all_a.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['key_20from_20dragonflyclient_0',['key from DragonflyClient',['../da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md280',1,'excerpt: Add element to list stored at key from DragonflyClient.'],['../d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html#autotoc_md308',1,'excerpt: Get all elements of a list stored at a key from DragonflyClient.'],['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md192',1,'excerpt: Get all fields and values from the hash stored at key from DragonflyClient.'],['../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md294',1,'excerpt: Get element of list stored at key from DragonflyClient.'],['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md206',1,'excerpt: Get the value associated with field in hash stored at key from DragonflyClient.'],['../d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md24',1,'excerpt: Get the value of stored key from DragonflyClient.'],['../df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md1',1,'excerpt: Remove the specified key from DragonflyClient.'],['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md248',1,'excerpt: Set the specified field to the respective value in the hash stored at key from DragonflyClient.'],['../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md262',1,'excerpt: Set the specified fields to their respective values in the hash stored at key from DragonflyClient.'],['../d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md54',1,'excerpt: Set the value of stored key from DragonflyClient.']]], + ['key_20in_20dragonflyclient_1',['key in DragonflyClient',['../d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html#autotoc_md319',1,'excerpt: Remove an element from a list stored at a key in DragonflyClient.'],['../d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html#autotoc_md330',1,'excerpt: Set an element in a list stored at a key in DragonflyClient.']]], + ['key_20in_20singleplayer_20or_20on_20the_20server_3a_2',['Delete a key in singleplayer or on the server:',['../df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md8',1,'']]], + ['key_20on_20the_20server_20from_20a_20client_3a_3',['Delete a key on the server from a client:',['../df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md9',1,'']]] +]; diff --git a/api/html/search/all_b.js b/api/html/search/all_b.js new file mode 100644 index 0000000..fd8a6ae --- /dev/null +++ b/api/html/search/all_b.js @@ -0,0 +1,23 @@ +var searchData= +[ + ['large_20to_20be_20returned_20in_20a_20single_20callback_0',['excerpt: Handles data chunks received from the database extension when data is too large to be returned in a single callback.',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html#autotoc_md14',1,'']]], + ['license_1',['License',['../G:/ids/dragonfly/docs/README.md#autotoc_md355',1,'']]], + ['links_2',['Links',['../df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md12',1,'Links'],['../d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md35',1,'Links'],['../d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html#autotoc_md52',1,'Links'],['../d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md66',1,'Links'],['../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md80',1,'Links'],['../d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html#autotoc_md94',1,'Links'],['../dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.html#autotoc_md105',1,'Links'],['../d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html#autotoc_md118',1,'Links'],['../d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html#autotoc_md131',1,'Links'],['../d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html#autotoc_md148',1,'Links'],['../d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md162',1,'Links'],['../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md176',1,'Links'],['../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md190',1,'Links'],['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md204',1,'Links'],['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md218',1,'Links'],['../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md232',1,'Links'],['../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md246',1,'Links'],['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md260',1,'Links'],['../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md274',1,'Links'],['../da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md292',1,'Links'],['../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md306',1,'Links'],['../d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html#autotoc_md317',1,'Links'],['../d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html#autotoc_md328',1,'Links'],['../d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html#autotoc_md339',1,'Links']]], + ['list_20operation_20task_3a_3',['Add a list operation task:',['../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md77',1,'']]], + ['list_20operations_4',['List Operations',['../G:/ids/dragonfly/docs/README.md#autotoc_md349',1,'@ref "G:/ids/dragonfly/docs/list/README.md" "List Operations"'],['../G:/ids/dragonfly/docs/README.md#autotoc_md353',1,'List Operations']]], + ['list_20readme_20md_20list_20operations_5',['@ref "G:/ids/dragonfly/docs/list/README.md" "List Operations"',['../G:/ids/dragonfly/docs/README.md#autotoc_md349',1,'']]], + ['list_20stored_20at_20a_20key_20from_20dragonflyclient_6',['excerpt: Get all elements of a list stored at a key from DragonflyClient.',['../d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html#autotoc_md308',1,'']]], + ['list_20stored_20at_20a_20key_20in_20dragonflyclient_7',['list stored at a key in DragonflyClient',['../d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html#autotoc_md319',1,'excerpt: Remove an element from a list stored at a key in DragonflyClient.'],['../d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html#autotoc_md330',1,'excerpt: Set an element in a list stored at a key in DragonflyClient.']]], + ['list_20stored_20at_20key_20from_20dragonflyclient_8',['list stored at key from DragonflyClient',['../da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md280',1,'excerpt: Add element to list stored at key from DragonflyClient.'],['../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md294',1,'excerpt: Get element of list stored at key from DragonflyClient.']]], + ['listadd_9',['listAdd',['../da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html',1,'']]], + ['listget_10',['listGet',['../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html',1,'']]], + ['listload_11',['listLoad',['../d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html',1,'']]], + ['listremove_12',['listRemove',['../d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html',1,'']]], + ['listset_13',['listSet',['../d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html',1,'']]], + ['loadout_20and_20position_3a_14',['loadout and position:',['../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md241',1,'Store player loadout and position:'],['../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md269',1,'Store player loadout and position:']]], + ['loadout_20field_3a_15',['Retrieve a player's loadout field:',['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md213',1,'']]], + ['loadout_20under_20their_20uid_3a_16',['Store a player's loadout under their UID:',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md255',1,'']]], + ['loadout_3a_17',['loadout:',['../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md171',1,'Retrieve a player's loadout:'],['../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md227',1,'Store a player's loadout:']]], + ['locally_3a_18',['Process data locally:',['../d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html#autotoc_md89',1,'']]], + ['log_20entry_3a_19',['log entry:',['../da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md287',1,'Add an event log entry:'],['../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md301',1,'Retrieve a specific event log entry:']]] +]; diff --git a/api/html/search/all_c.js b/api/html/search/all_c.js new file mode 100644 index 0000000..2636a2b --- /dev/null +++ b/api/html/search/all_c.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['manually_3a_0',['Start processing the queue manually:',['../d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html#autotoc_md127',1,'']]], + ['md_20basic_20data_20operations_1',['@ref "G:/ids/dragonfly/docs/basic/README.md" "Basic Data Operations"',['../G:/ids/dragonfly/docs/README.md#autotoc_md347',1,'']]], + ['md_20core_20functions_2',['@ref "G:/ids/dragonfly/docs/core/README.md" "Core Functions"',['../G:/ids/dragonfly/docs/README.md#autotoc_md346',1,'']]], + ['md_20hash_20operations_3',['@ref "G:/ids/dragonfly/docs/hash/README.md" "Hash Operations"',['../G:/ids/dragonfly/docs/README.md#autotoc_md348',1,'']]], + ['md_20list_20operations_4',['@ref "G:/ids/dragonfly/docs/list/README.md" "List Operations"',['../G:/ids/dragonfly/docs/README.md#autotoc_md349',1,'']]], + ['message_3a_5',['message:',['../da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md288',1,'Add a player message:'],['../d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html#autotoc_md114',1,'Display the addon name message:']]], + ['multiple_20fields_20in_20the_20current_20client_20s_20hash_20table_20in_20dragonflyclient_6',['excerpt: Set multiple fields in the current client's hash table in DragonflyClient.',['../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md234',1,'']]], + ['multiple_20player_20settings_3a_7',['Store multiple player settings:',['../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md242',1,'']]], + ['multiple_20vehicle_20properties_3a_8',['Store multiple vehicle properties:',['../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md270',1,'']]] +]; diff --git a/api/html/search/all_d.js b/api/html/search/all_d.js new file mode 100644 index 0000000..d862f15 --- /dev/null +++ b/api/html/search/all_d.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['name_20in_20system_20chat_0',['excerpt: Displays the addon name in system chat.',['../d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html#autotoc_md107',1,'']]], + ['name_20message_3a_1',['Display the addon name message:',['../d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html#autotoc_md114',1,'']]], + ['notes_2',['Notes',['../df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md10',1,'Notes'],['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html#autotoc_md21',1,'Notes'],['../d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md33',1,'Notes'],['../d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html#autotoc_md50',1,'Notes'],['../d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md64',1,'Notes'],['../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md78',1,'Notes'],['../d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html#autotoc_md92',1,'Notes'],['../dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.html#autotoc_md103',1,'Notes'],['../d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html#autotoc_md116',1,'Notes'],['../d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html#autotoc_md129',1,'Notes'],['../d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html#autotoc_md146',1,'Notes'],['../d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md160',1,'Notes'],['../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md174',1,'Notes'],['../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md188',1,'Notes'],['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md202',1,'Notes'],['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md216',1,'Notes'],['../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md230',1,'Notes'],['../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md244',1,'Notes'],['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md258',1,'Notes'],['../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md272',1,'Notes'],['../da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md290',1,'Notes'],['../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md304',1,'Notes'],['../d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html#autotoc_md315',1,'Notes'],['../d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html#autotoc_md326',1,'Notes'],['../d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html#autotoc_md337',1,'Notes']]] +]; diff --git a/api/html/search/all_e.js b/api/html/search/all_e.js new file mode 100644 index 0000000..2ddcbce --- /dev/null +++ b/api/html/search/all_e.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['of_20a_20list_20stored_20at_20a_20key_20from_20dragonflyclient_0',['excerpt: Get all elements of a list stored at a key from DragonflyClient.',['../d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html#autotoc_md308',1,'']]], + ['of_20list_20stored_20at_20key_20from_20dragonflyclient_1',['excerpt: Get element of list stored at key from DragonflyClient.',['../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md294',1,'']]], + ['of_20stored_20key_20from_20dragonflyclient_2',['of stored key from DragonflyClient',['../d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md24',1,'excerpt: Get the value of stored key from DragonflyClient.'],['../d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md54',1,'excerpt: Set the value of stored key from DragonflyClient.']]], + ['of_20tasks_20to_20be_20executed_3',['excerpt: Processes a queue of tasks to be executed.',['../d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html#autotoc_md120',1,'']]], + ['on_20the_20server_20and_20send_20to_20a_20specific_20client_3a_4',['Retrieve data on the server and send to a specific client:',['../d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md32',1,'']]], + ['on_20the_20server_20from_20a_20client_3a_5',['Delete a key on the server from a client:',['../df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md9',1,'']]], + ['on_20the_20server_3a_6',['on the server:',['../df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md8',1,'Delete a key in singleplayer or on the server:'],['../d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md31',1,'Retrieve data in singleplayer or on the server:']]], + ['operation_20task_3a_7',['Add a list operation task:',['../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md77',1,'']]], + ['operations_8',['Operations',['../G:/ids/dragonfly/docs/README.md#autotoc_md347',1,'@ref "G:/ids/dragonfly/docs/basic/README.md" "Basic Data Operations"'],['../G:/ids/dragonfly/docs/README.md#autotoc_md348',1,'@ref "G:/ids/dragonfly/docs/hash/README.md" "Hash Operations"'],['../G:/ids/dragonfly/docs/README.md#autotoc_md349',1,'@ref "G:/ids/dragonfly/docs/list/README.md" "List Operations"'],['../G:/ids/dragonfly/docs/README.md#autotoc_md352',1,'Hash Operations'],['../G:/ids/dragonfly/docs/README.md#autotoc_md353',1,'List Operations']]], + ['or_20on_20the_20server_3a_9',['or on the server:',['../df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md8',1,'Delete a key in singleplayer or on the server:'],['../d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md31',1,'Retrieve data in singleplayer or on the server:']]] +]; diff --git a/api/html/search/all_f.js b/api/html/search/all_f.js new file mode 100644 index 0000000..1342046 --- /dev/null +++ b/api/html/search/all_f.js @@ -0,0 +1,27 @@ +var searchData= +[ + ['parameters_0',['Parameters',['../df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html#autotoc_md5',1,'Parameters'],['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html#autotoc_md18',1,'Parameters'],['../d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html#autotoc_md28',1,'Parameters'],['../d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html#autotoc_md45',1,'Parameters'],['../d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md58',1,'Parameters'],['../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md72',1,'Parameters'],['../d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html#autotoc_md86',1,'Parameters'],['../dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.html#autotoc_md100',1,'Parameters'],['../d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html#autotoc_md111',1,'Parameters'],['../d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html#autotoc_md124',1,'Parameters'],['../d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html#autotoc_md141',1,'Parameters'],['../d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html#autotoc_md154',1,'Parameters'],['../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md168',1,'Parameters'],['../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html#autotoc_md182',1,'Parameters'],['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md196',1,'Parameters'],['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md210',1,'Parameters'],['../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md224',1,'Parameters'],['../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md238',1,'Parameters'],['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md252',1,'Parameters'],['../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md266',1,'Parameters'],['../da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md284',1,'Parameters'],['../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html#autotoc_md298',1,'Parameters'],['../d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html#autotoc_md312',1,'Parameters'],['../d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html#autotoc_md323',1,'Parameters'],['../d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html#autotoc_md334',1,'Parameters']]], + ['player_20data_20from_20a_20client_3a_1',['player data from a client:',['../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md243',1,'Store player data from a client:'],['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md257',1,'Store player data from a client:'],['../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md271',1,'Store player data from a client:']]], + ['player_20data_20under_20their_20uid_3a_2',['Store player data under their UID:',['../d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html#autotoc_md62',1,'']]], + ['player_20loadout_20and_20position_3a_3',['player loadout and position:',['../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md241',1,'Store player loadout and position:'],['../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md269',1,'Store player loadout and position:']]], + ['player_20message_3a_4',['Add a player message:',['../da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html#autotoc_md288',1,'']]], + ['player_20preferences_3a_5',['Store player preferences:',['../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md228',1,'']]], + ['player_20s_20complete_20hash_20data_3a_6',['Retrieve a player's complete hash data:',['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html#autotoc_md199',1,'']]], + ['player_20s_20loadout_20field_3a_7',['Retrieve a player's loadout field:',['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md213',1,'']]], + ['player_20s_20loadout_20under_20their_20uid_3a_8',['Store a player's loadout under their UID:',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html#autotoc_md255',1,'']]], + ['player_20s_20loadout_3a_9',['player s loadout:',['../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html#autotoc_md171',1,'Retrieve a player's loadout:'],['../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md227',1,'Store a player's loadout:']]], + ['player_20settings_3a_10',['Store multiple player settings:',['../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md242',1,'']]], + ['player_20specific_20task_20that_20returns_20data_20to_20a_20specific_20client_3a_11',['Add a player-specific task that returns data to a specific client:',['../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html#autotoc_md76',1,'']]], + ['position_3a_12',['position:',['../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html#autotoc_md241',1,'Store player loadout and position:'],['../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md269',1,'Store player loadout and position:']]], + ['preferences_3a_13',['Store player preferences:',['../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html#autotoc_md228',1,'']]], + ['printaddonname_14',['printAddonName',['../d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html',1,'']]], + ['process_20a_20callback_20from_20the_20extension_3a_15',['Process a callback from the extension:',['../d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html#autotoc_md144',1,'']]], + ['process_20data_20locally_3a_16',['Process data locally:',['../d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html#autotoc_md89',1,'']]], + ['process_20data_20with_20direct_20call_20synchronous_20_3a_17',['Process data with direct call (synchronous):',['../d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html#autotoc_md91',1,'']]], + ['processes_20a_20queue_20of_20tasks_20to_20be_20executed_18',['excerpt: Processes a queue of tasks to be executed.',['../d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html#autotoc_md120',1,'']]], + ['processing_20from_20a_20client_3a_19',['Trigger queue processing from a client:',['../d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html#autotoc_md128',1,'']]], + ['processing_20the_20queue_20manually_3a_20',['Start processing the queue manually:',['../d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html#autotoc_md127',1,'']]], + ['processqueue_21',['processQueue',['../d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html',1,'']]], + ['properties_3a_22',['Store multiple vehicle properties:',['../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html#autotoc_md270',1,'']]], + ['property_20with_20synchronous_20callback_3a_23',['Retrieve a specific vehicle property with synchronous callback:',['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html#autotoc_md214',1,'']]] +]; diff --git a/api/html/search/close.svg b/api/html/search/close.svg new file mode 100644 index 0000000..337d6cc --- /dev/null +++ b/api/html/search/close.svg @@ -0,0 +1,18 @@ + + + + + + diff --git a/api/html/search/mag.svg b/api/html/search/mag.svg new file mode 100644 index 0000000..ffb6cf0 --- /dev/null +++ b/api/html/search/mag.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/api/html/search/mag_d.svg b/api/html/search/mag_d.svg new file mode 100644 index 0000000..4122773 --- /dev/null +++ b/api/html/search/mag_d.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/api/html/search/mag_sel.svg b/api/html/search/mag_sel.svg new file mode 100644 index 0000000..553dba8 --- /dev/null +++ b/api/html/search/mag_sel.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/api/html/search/mag_seld.svg b/api/html/search/mag_seld.svg new file mode 100644 index 0000000..c906f84 --- /dev/null +++ b/api/html/search/mag_seld.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/api/html/search/pages_0.js b/api/html/search/pages_0.js new file mode 100644 index 0000000..0f96f4b --- /dev/null +++ b/api/html/search/pages_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['addtask_0',['addTask',['../dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.html',1,'']]] +]; diff --git a/api/html/search/pages_1.js b/api/html/search/pages_1.js new file mode 100644 index 0000000..1a9abba --- /dev/null +++ b/api/html/search/pages_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['delete_0',['delete',['../df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.html',1,'']]] +]; diff --git a/api/html/search/pages_2.js b/api/html/search/pages_2.js new file mode 100644 index 0000000..1f4f692 --- /dev/null +++ b/api/html/search/pages_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['fetch_0',['fetch',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.html',1,'']]] +]; diff --git a/api/html/search/pages_3.js b/api/html/search/pages_3.js new file mode 100644 index 0000000..ce362ed --- /dev/null +++ b/api/html/search/pages_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['get_0',['get',['../d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.html',1,'']]] +]; diff --git a/api/html/search/pages_4.js b/api/html/search/pages_4.js new file mode 100644 index 0000000..a730fe3 --- /dev/null +++ b/api/html/search/pages_4.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['handler_0',['handler',['../d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.html',1,'']]], + ['hashget_1',['hashGet',['../d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.html',1,'']]], + ['hashgetall_2',['hashGetAll',['../da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.html',1,'']]], + ['hashgetallid_3',['hashGetAllId',['../d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.html',1,'']]], + ['hashgetid_4',['hashGetId',['../d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.html',1,'']]], + ['hashset_5',['hashSet',['../d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.html',1,'']]], + ['hashsetbulk_6',['hashSetBulk',['../da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.html',1,'']]], + ['hashsetid_7',['hashSetId',['../d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.html',1,'']]], + ['hashsetidbulk_8',['hashSetIdBulk',['../de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.html',1,'']]] +]; diff --git a/api/html/search/pages_5.js b/api/html/search/pages_5.js new file mode 100644 index 0000000..8da64dc --- /dev/null +++ b/api/html/search/pages_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['init_0',['init',['../dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.html',1,'']]] +]; diff --git a/api/html/search/pages_6.js b/api/html/search/pages_6.js new file mode 100644 index 0000000..5b260c0 --- /dev/null +++ b/api/html/search/pages_6.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['listadd_0',['listAdd',['../da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.html',1,'']]], + ['listget_1',['listGet',['../d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.html',1,'']]], + ['listload_2',['listLoad',['../d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.html',1,'']]], + ['listremove_3',['listRemove',['../d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.html',1,'']]], + ['listset_4',['listSet',['../d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.html',1,'']]] +]; diff --git a/api/html/search/pages_7.js b/api/html/search/pages_7.js new file mode 100644 index 0000000..1e647c9 --- /dev/null +++ b/api/html/search/pages_7.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['printaddonname_0',['printAddonName',['../d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.html',1,'']]], + ['processqueue_1',['processQueue',['../d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.html',1,'']]] +]; diff --git a/api/html/search/pages_8.js b/api/html/search/pages_8.js new file mode 100644 index 0000000..16937b9 --- /dev/null +++ b/api/html/search/pages_8.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['save_0',['save',['../d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.html',1,'']]], + ['scheduler_1',['scheduler',['../d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.html',1,'']]], + ['set_2',['set',['../d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.html',1,'']]] +]; diff --git a/api/html/search/pages_9.js b/api/html/search/pages_9.js new file mode 100644 index 0000000..13b3a11 --- /dev/null +++ b/api/html/search/pages_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['test_0',['test',['../d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.html',1,'']]] +]; diff --git a/api/html/search/search.css b/api/html/search/search.css new file mode 100644 index 0000000..a53214f --- /dev/null +++ b/api/html/search/search.css @@ -0,0 +1,286 @@ +/*---------------- Search Box */ + +#MSearchBox { + position: absolute; + right: 5px; +} +/*---------------- Search box styling */ + +.SRPage * { + font-weight: normal; + line-height: normal; +} + +dark-mode-toggle { + margin-left: 5px; + display: flex; + float: right; +} + +#MSearchBox { + display: inline-block; + white-space : nowrap; + background: var(--search-background-color); + border-radius: 0.65em; + box-shadow: var(--search-box-shadow); + z-index: 102; +} + +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.4em; +} + +#MSearchSelect { + display: inline-block; + vertical-align: middle; + width: 20px; + height: 19px; + background-image: var(--search-magnification-select-image); + margin: 0 0 0 0.3em; + padding: 0; +} + +#MSearchSelectExt { + display: inline-block; + vertical-align: middle; + width: 10px; + height: 19px; + background-image: var(--search-magnification-image); + margin: 0 0 0 0.5em; + padding: 0; +} + + +#MSearchField { + display: inline-block; + vertical-align: middle; + width: 7.5em; + height: 19px; + margin: 0 0.15em; + padding: 0; + line-height: 1em; + border:none; + color: var(--search-foreground-color); + outline: none; + font-family: var(--font-family-search); + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + +@media(hover: none) { + /* to avoid zooming on iOS */ + #MSearchField { + font-size: 16px; + } +} + +#MSearchBox .right { + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.4em; +} + +#MSearchClose { + display: none; + font-size: inherit; + background : none; + border: none; + margin: 0; + padding: 0; + outline: none; + +} + +#MSearchCloseImg { + padding: 0.3em; + margin: 0; +} + +.MSearchBoxActive #MSearchField { + color: var(--search-active-color); +} + + + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid var(--search-filter-border-color); + background-color: var(--search-filter-background-color); + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt var(--font-family-search); + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: var(--font-family-monospace); + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: var(--search-filter-foreground-color); + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: var(--search-filter-foreground-color); + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: var(--search-filter-highlight-text-color); + background-color: var(--search-filter-highlight-bg-color); + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + /*width: 60ex;*/ + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid var(--search-results-border-color); + background-color: var(--search-results-background-color); + z-index:10000; + width: 300px; + height: 400px; + overflow: auto; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +div.SRPage { + margin: 5px 2px; + background-color: var(--search-results-background-color); +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: var(--search-results-foreground-color); + font-family: var(--font-family-search); + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: var(--search-results-foreground-color); + font-family: var(--font-family-search); + font-size: 8pt; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; + font-family: var(--font-family-search); +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + font-family: var(--font-family-search); +} + +.SRResult { + display: none; +} + +div.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: var(--nav-gradient-active-image-parent); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/api/html/search/search.js b/api/html/search/search.js new file mode 100644 index 0000000..666af01 --- /dev/null +++ b/api/html/search/search.js @@ -0,0 +1,694 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +const SEARCH_COOKIE_NAME = ''+'search_grp'; + +const searchResults = new SearchResults(); + +/* A class handling everything associated with the search panel. + + Parameters: + name - The name of the global variable that will be + storing this instance. Is needed to be able to set timeouts. + resultPath - path to use for external files +*/ +function SearchBox(name, resultsPath, extension) { + if (!name || !resultsPath) { alert("Missing parameters to SearchBox."); } + if (!extension || extension == "") { extension = ".html"; } + + function getXPos(item) { + let x = 0; + if (item.offsetWidth) { + while (item && item!=document.body) { + x += item.offsetLeft; + item = item.offsetParent; + } + } + return x; + } + + function getYPos(item) { + let y = 0; + if (item.offsetWidth) { + while (item && item!=document.body) { + y += item.offsetTop; + item = item.offsetParent; + } + } + return y; + } + + // ---------- Instance variables + this.name = name; + this.resultsPath = resultsPath; + this.keyTimeout = 0; + this.keyTimeoutLength = 500; + this.closeSelectionTimeout = 300; + this.lastSearchValue = ""; + this.lastResultsPage = ""; + this.hideTimeout = 0; + this.searchIndex = 0; + this.searchActive = false; + this.extension = extension; + + // ----------- DOM Elements + + this.DOMSearchField = () => document.getElementById("MSearchField"); + this.DOMSearchSelect = () => document.getElementById("MSearchSelect"); + this.DOMSearchSelectWindow = () => document.getElementById("MSearchSelectWindow"); + this.DOMPopupSearchResults = () => document.getElementById("MSearchResults"); + this.DOMPopupSearchResultsWindow = () => document.getElementById("MSearchResultsWindow"); + this.DOMSearchClose = () => document.getElementById("MSearchClose"); + this.DOMSearchBox = () => document.getElementById("MSearchBox"); + + // ------------ Event Handlers + + // Called when focus is added or removed from the search field. + this.OnSearchFieldFocus = function(isActive) { + this.Activate(isActive); + } + + this.OnSearchSelectShow = function() { + const searchSelectWindow = this.DOMSearchSelectWindow(); + const searchField = this.DOMSearchSelect(); + + const left = getXPos(searchField); + const top = getYPos(searchField) + searchField.offsetHeight; + + // show search selection popup + searchSelectWindow.style.display='block'; + searchSelectWindow.style.left = left + 'px'; + searchSelectWindow.style.top = top + 'px'; + + // stop selection hide timer + if (this.hideTimeout) { + clearTimeout(this.hideTimeout); + this.hideTimeout=0; + } + return false; // to avoid "image drag" default event + } + + this.OnSearchSelectHide = function() { + this.hideTimeout = setTimeout(this.CloseSelectionWindow.bind(this), + this.closeSelectionTimeout); + } + + // Called when the content of the search field is changed. + this.OnSearchFieldChange = function(evt) { + if (this.keyTimeout) { // kill running timer + clearTimeout(this.keyTimeout); + this.keyTimeout = 0; + } + + const e = evt ? evt : window.event; // for IE + if (e.keyCode==40 || e.keyCode==13) { + if (e.shiftKey==1) { + this.OnSearchSelectShow(); + const win=this.DOMSearchSelectWindow(); + for (let i=0;i do a search + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) { // Up + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } else if (e.keyCode==13 || e.keyCode==27) { + e.stopPropagation(); + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() { + this.keyTimeout = 0; + + // strip leading whitespace + const searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + const code = searchValue.toLowerCase().charCodeAt(0); + let idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) { // surrogate pair + idxChar = searchValue.substr(0, 2); + } + + let jsFile; + let idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) { + const hexCode=idx.toString(16); + jsFile = this.resultsPath + indexSectionNames[this.searchIndex] + '_' + hexCode + '.js'; + } + + const loadJS = function(url, impl, loc) { + const scriptTag = document.createElement('script'); + scriptTag.src = url; + scriptTag.onload = impl; + scriptTag.onreadystatechange = impl; + loc.appendChild(scriptTag); + } + + const domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + const domSearchBox = this.DOMSearchBox(); + const domPopupSearchResults = this.DOMPopupSearchResults(); + const domSearchClose = this.DOMSearchClose(); + const resultsPath = this.resultsPath; + + const handleResults = function() { + document.getElementById("Loading").style.display="none"; + if (typeof searchData !== 'undefined') { + createResults(resultsPath); + document.getElementById("NoMatches").style.display="none"; + } + + if (idx!=-1) { + searchResults.Search(searchValue); + } else { // no file with search results => force empty search results + searchResults.Search('===='); + } + + if (domPopupSearchResultsWindow.style.display!='block') { + domSearchClose.style.display = 'inline-block'; + let left = getXPos(domSearchBox) + 150; + let top = getYPos(domSearchBox) + 20; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + const maxWidth = document.body.clientWidth; + const maxHeight = document.body.clientHeight; + let width = 300; + if (left<10) left=10; + if (width+left+8>maxWidth) width=maxWidth-left-8; + let height = 400; + if (height+top+8>maxHeight) height=maxHeight-top-8; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResultsWindow.style.height = height + 'px'; + } + } + + if (jsFile) { + loadJS(jsFile, handleResults, this.DOMPopupSearchResultsWindow()); + } else { + handleResults(); + } + + this.lastSearchValue = searchValue; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) { + this.DOMSearchBox().className = 'MSearchBoxActive'; + this.searchActive = true; + } else if (!isActive) { // directly remove the panel + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + this.DOMSearchField().value = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults() { + + function convertToId(search) { + let result = ''; + for (let i=0;i. + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) { + const parentElement = document.getElementById(id); + let element = parentElement.firstChild; + + while (element && element!=parentElement) { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') { + return element; + } + + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) { + element = element.firstChild; + } else if (element.nextSibling) { + element = element.nextSibling; + } else { + do { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) { + const element = this.FindChildElement(id); + if (element) { + if (element.style.display == 'block') { + element.style.display = 'none'; + } else { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) { + if (!search) { // get search word from URL + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + const resultRows = document.getElementsByTagName("div"); + let matches = 0; + + let i = 0; + while (i < resultRows.length) { + const row = resultRows.item(i); + if (row.className == "SRResult") { + let rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) { + row.style.display = 'block'; + matches++; + } else { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) { // no results + document.getElementById("NoMatches").style.display='block'; + } else { // at least one result + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) { + let focusItem; + for (;;) { + const focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { + break; + } else if (!focusItem) { // last element + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) { + let focusItem; + for (;;) { + const focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { + break; + } else if (!focusItem) { // last element + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) { + if (e.type == "keydown") { + this.repeatOn = false; + this.lastKey = e.keyCode; + } else if (e.type == "keypress") { + if (!this.repeatOn) { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } else if (e.type == "keyup") { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) { // Up + const newIndex = itemIndex-1; + let focusItem = this.NavPrev(newIndex); + if (focusItem) { + let child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') { // children visible + let n=0; + let tmpElem; + for (;;) { // search for last child + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) { + focusItem = tmpElem; + } else { // found it! + break; + } + n++; + } + } + } + if (focusItem) { + focusItem.focus(); + } else { // return focus to search field + document.getElementById("MSearchField").focus(); + } + } else if (this.lastKey==40) { // Down + const newIndex = itemIndex+1; + let focusItem; + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') { // children visible + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } else if (this.lastKey==39) { // Right + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } else if (this.lastKey==37) { // Left + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } else if (this.lastKey==27) { // Escape + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } else if (this.lastKey==13) { // Enter + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) { // Up + if (childIndex>0) { + const newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } else { // already at first child, jump to parent + document.getElementById('Item'+itemIndex).focus(); + } + } else if (this.lastKey==40) { // Down + const newIndex = childIndex+1; + let elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) { // last child, jump to parent next parent + elem = this.NavNext(itemIndex+1); + } + if (elem) { + elem.focus(); + } + } else if (this.lastKey==27) { // Escape + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } else if (this.lastKey==13) { // Enter + return true; + } + return false; + } +} + +function createResults(resultsPath) { + + function setKeyActions(elem,action) { + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); + } + + function setClassAttr(elem,attr) { + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); + } + + const results = document.getElementById("SRResults"); + results.innerHTML = ''; + searchData.forEach((elem,index) => { + const id = elem[0]; + const srResult = document.createElement('div'); + srResult.setAttribute('id','SR_'+id); + setClassAttr(srResult,'SRResult'); + const srEntry = document.createElement('div'); + setClassAttr(srEntry,'SREntry'); + const srLink = document.createElement('a'); + srLink.setAttribute('id','Item'+index); + setKeyActions(srLink,'return searchResults.Nav(event,'+index+')'); + setClassAttr(srLink,'SRSymbol'); + srLink.innerHTML = elem[1][0]; + srEntry.appendChild(srLink); + if (elem[1].length==2) { // single result + srLink.setAttribute('href',resultsPath+elem[1][1][0]); + srLink.setAttribute('onclick','searchBox.CloseResultsWindow()'); + if (elem[1][1][1]) { + srLink.setAttribute('target','_parent'); + } else { + srLink.setAttribute('target','_blank'); + } + const srScope = document.createElement('span'); + setClassAttr(srScope,'SRScope'); + srScope.innerHTML = elem[1][1][2]; + srEntry.appendChild(srScope); + } else { // multiple results + srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")'); + const srChildren = document.createElement('div'); + setClassAttr(srChildren,'SRChildren'); + for (let c=0; cli>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:var(--nav-menu-button-color);-webkit-transition:all .25s;transition:all .25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px,1px,1px,1px)}#main-menu-state:not(:checked) ~ #main-menu{display:none}#main-menu-state:checked ~ #main-menu{display:block}@media(min-width:768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked) ~ #main-menu{display:block}}.sm-dox{background-image:var(--nav-gradient-image)}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:var(--font-family-nav);font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:var(--nav-text-normal-shadow);color:var(--nav-text-normal-color);outline:0}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:var(--nav-menu-toggle-color);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:var(--nav-menu-background-color)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:var(--nav-menu-background-color);background-image:none}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:var(--nav-gradient-image);line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:var(--nav-text-normal-color) transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:var(--nav-separator-image);background-repeat:no-repeat;background-position:right;-moz-border-radius:0 !important;-webkit-border-radius:0;border-radius:0 !important}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a:hover span.sub-arrow{border-color:var(--nav-text-hover-color) transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent var(--nav-menu-background-color) transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:var(--nav-menu-background-color);-moz-border-radius:5px !important;-webkit-border-radius:5px;border-radius:5px !important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent var(--nav-menu-foreground-color);border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:var(--nav-menu-foreground-color);background-image:none;border:0 !important}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent var(--nav-text-hover-color)}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:var(--nav-menu-background-color);height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent var(--nav-menu-foreground-color) transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:var(--nav-menu-foreground-color) transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:var(--nav-gradient-image)}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:var(--nav-menu-background-color)}} diff --git a/api/latex/Makefile b/api/latex/Makefile new file mode 100644 index 0000000..8e14614 --- /dev/null +++ b/api/latex/Makefile @@ -0,0 +1,42 @@ +LATEX_CMD?=pdflatex +MKIDX_CMD?=makeindex +BIBTEX_CMD?=bibtex +LATEX_COUNT?=8 +MANUAL_FILE?=refman + +all: $(MANUAL_FILE).pdf + +pdf: $(MANUAL_FILE).pdf + +$(MANUAL_FILE).pdf: clean $(MANUAL_FILE).tex + $(LATEX_CMD) $(MANUAL_FILE) || \ + if [ $$? != 0 ] ; then \ + \echo "Please consult $(MANUAL_FILE).log to see the error messages" ; \ + false; \ + fi + $(MKIDX_CMD) $(MANUAL_FILE).idx + $(LATEX_CMD) $(MANUAL_FILE) || \ + if [ $$? != 0 ] ; then \ + \echo "Please consult $(MANUAL_FILE).log to see the error messages" ; \ + false; \ + fi + latex_count=$(LATEX_COUNT) ; \ + while grep -E -s 'Rerun (LaTeX|to get cross-references right|to get bibliographical references right)' $(MANUAL_FILE).log && [ $$latex_count -gt 0 ] ;\ + do \ + echo "Rerunning latex...." ;\ + $(LATEX_CMD) $(MANUAL_FILE) || \ + if [ $$? != 0 ] ; then \ + \echo "Please consult $(MANUAL_FILE).log to see the error messages" ; \ + false; \ + fi; \ + latex_count=`expr $$latex_count - 1` ;\ + done + $(MKIDX_CMD) $(MANUAL_FILE).idx + $(LATEX_CMD) $(MANUAL_FILE) || \ + if [ $$? != 0 ] ; then \ + \echo "Please consult $(MANUAL_FILE).log to see the error messages" ; \ + false; \ + fi + +clean: + rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out *.brf *.blg *.bbl $(MANUAL_FILE).pdf diff --git a/api/latex/d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.tex b/api/latex/d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.tex new file mode 100644 index 0000000..f272add --- /dev/null +++ b/api/latex/d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue.tex @@ -0,0 +1,49 @@ +\chapter{process\+Queue} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2process_queue}{}\label{md__g_1_2ids_2dragonfly_2docs_2core_2process_queue}\index{processQueue@{processQueue}} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2process_queue_autotoc_md119}{}\doxysubsection{\texorpdfstring{autotoc\+\_\+md119}{autotoc\+\_\+md119}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2process_queue_autotoc_md119} +title\+: Arma\+Dragonfly\+Client -\/ Process Queue icon\+: mdi\+:file-\/text-\/outline \hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2process_queue_autotoc_md120}{}\doxysubsection{\texorpdfstring{excerpt\+: Processes a queue of tasks to be executed.}{excerpt\+: Processes a queue of tasks to be executed.}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2process_queue_autotoc_md120} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2process_queue_autotoc_md121}{}\doxysection{\texorpdfstring{dragonfly\+\_\+db\+\_\+fnc\+\_\+process\+Queue}{dragonfly\+\_\+db\+\_\+fnc\+\_\+process\+Queue}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2process_queue_autotoc_md121} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2process_queue_autotoc_md122}{}\doxysubsection{\texorpdfstring{Description}{Description}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2process_queue_autotoc_md122} +Processes the queue of pending database tasks sequentially. This function executes each task in the queue one by one, handling various database operations based on the task type. It continues processing until the queue is empty.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2process_queue_autotoc_md123}{}\doxysubsection{\texorpdfstring{Syntax}{Syntax}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2process_queue_autotoc_md123} + +\begin{DoxyCode}{0} +\DoxyCodeLine{[]\ spawn\ dragonfly\_db\_fnc\_processQueue} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2process_queue_autotoc_md124}{}\doxysubsection{\texorpdfstring{Parameters}{Parameters}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2process_queue_autotoc_md124} +None. This function does not require any parameters.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2process_queue_autotoc_md125}{}\doxysubsection{\texorpdfstring{Return Value}{Return Value}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2process_queue_autotoc_md125} +None. The function processes tasks in the queue and updates the processing state.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2process_queue_autotoc_md126}{}\doxysubsection{\texorpdfstring{Examples}{Examples}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2process_queue_autotoc_md126} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2process_queue_autotoc_md127}{}\doxysubsubsection{\texorpdfstring{Start processing the queue manually\+:}{Start processing the queue manually\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2process_queue_autotoc_md127} + +\begin{DoxyCode}{0} +\DoxyCodeLine{[]\ spawn\ dragonfly\_db\_fnc\_processQueue;} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2process_queue_autotoc_md128}{}\doxysubsubsection{\texorpdfstring{Trigger queue processing from a client\+:}{Trigger queue processing from a client\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2process_queue_autotoc_md128} + +\begin{DoxyCode}{0} +\DoxyCodeLine{[]\ remoteExec\ ["{}dragonfly\_db\_fnc\_processQueue"{},\ 2,\ false];} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2process_queue_autotoc_md129}{}\doxysubsection{\texorpdfstring{Notes}{Notes}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2process_queue_autotoc_md129} + +\begin{DoxyItemize} +\item Sets {\ttfamily GVAR(is\+Processing)} to true while running and false when complete +\item Processes one task per second to prevent overloading +\item Handles a wide range of database operations including\+: +\begin{DoxyItemize} +\item Key-\/value operations (get, set, delete) +\item Hash table operations (hget, hset, hgetall, etc.) +\item List operations (listadd, listrng, listset, etc.) +\end{DoxyItemize} +\item Automatically started by {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+add\+Task} when new tasks are added +\item Each task execution is logged for debugging purposes +\item Should typically be spawned rather than called to avoid blocking +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2process_queue_autotoc_md130}{}\doxysubsection{\texorpdfstring{Related Functions}{Related Functions}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2process_queue_autotoc_md130} + +\begin{DoxyItemize} +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+add\+Task}\+: Adds tasks to the queue for processing +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+handler}\+: Handles data returned from database operations +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+scheduler}\+: Manages callback responses from the database +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2process_queue_autotoc_md131}{}\doxysubsection{\texorpdfstring{Links}{Links}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2process_queue_autotoc_md131} +\doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2add_task}{Add Task}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2handler}{Handler}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2init}{Init}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name}{Print Addon Name}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2process_queue}{Process Queue}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2scheduler}{Scheduler}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2test}{Test}{0} \ No newline at end of file diff --git a/api/latex/d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.tex b/api/latex/d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.tex new file mode 100644 index 0000000..32bc06b --- /dev/null +++ b/api/latex/d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set.tex @@ -0,0 +1,67 @@ +\chapter{hash\+Set} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set}{}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set}\index{hashSet@{hashSet}} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_autotoc_md219}{}\doxysubsection{\texorpdfstring{autotoc\+\_\+md219}{autotoc\+\_\+md219}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_autotoc_md219} +title\+: Arma\+Dragonfly\+Client -\/ Hash Set icon\+: mdi\+:file-\/text-\/outline \hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_autotoc_md220}{}\doxysubsection{\texorpdfstring{excerpt\+: Set a field value in the current client\textquotesingle{}s hash table in Dragonfly\+Client.}{excerpt\+: Set a field value in the current client\textquotesingle{}s hash table in Dragonfly\+Client.}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_autotoc_md220} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_autotoc_md221}{}\doxysection{\texorpdfstring{dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Set}{dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Set}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_autotoc_md221} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_autotoc_md222}{}\doxysubsection{\texorpdfstring{Description}{Description}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_autotoc_md222} +Sets the value of a specified field in the hash table associated with the current client/player. This function automatically determines the appropriate hash ID based on the caller\textquotesingle{}s identity, making it more convenient than {\ttfamily hash\+Set\+Id} which requires manually specifying an ID. It allows storing various data types (arrays, strings, numbers, or booleans) in a field of the client-\/specific hash structure.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_autotoc_md223}{}\doxysubsection{\texorpdfstring{Syntax}{Syntax}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_autotoc_md223} + +\begin{DoxyCode}{0} +\DoxyCodeLine{[\_keyField,\ \_data]\ call\ dragonfly\_db\_fnc\_hashSet} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_autotoc_md224}{}\doxysubsection{\texorpdfstring{Parameters}{Parameters}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_autotoc_md224} +\tabulinesep=1mm +\begin{longtabu}spread 0pt [c]{*{4}{|X[-1]}|} +\hline +\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Parameter }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Type }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Description }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Default }\\\cline{1-4} +\endfirsthead +\hline +\endfoot +\hline +\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Parameter }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Type }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Description }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Default }\\\cline{1-4} +\endhead +{\ttfamily \+\_\+key\+Field} &String &Name of the field in the hash to set &"{}"{} \\\cline{1-4} +{\ttfamily \+\_\+data} &Array, String, Number, or Boolean &The value to store in the hash field &\mbox{[}\mbox{]} \\\cline{1-4} +\end{longtabu} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_autotoc_md225}{}\doxysubsection{\texorpdfstring{Return Value}{Return Value}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_autotoc_md225} +None. The operation runs synchronously to store the data.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_autotoc_md226}{}\doxysubsection{\texorpdfstring{Examples}{Examples}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_autotoc_md226} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_autotoc_md227}{}\doxysubsubsection{\texorpdfstring{Store a player\textquotesingle{}s loadout\+:}{Store a player\textquotesingle{}s loadout\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_autotoc_md227} + +\begin{DoxyCode}{0} +\DoxyCodeLine{["{}loadout"{},\ [getUnitLoadout\ player]]\ call\ dragonfly\_db\_fnc\_hashSet;} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_autotoc_md228}{}\doxysubsubsection{\texorpdfstring{Store player preferences\+:}{Store player preferences\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_autotoc_md228} + +\begin{DoxyCode}{0} +\DoxyCodeLine{["{}settings"{},\ [true,\ 30,\ "{}normal"{}]]\ call\ dragonfly\_db\_fnc\_hashSet;} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_autotoc_md229}{}\doxysubsubsection{\texorpdfstring{Store data from a client\+:}{Store data from a client\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_autotoc_md229} + +\begin{DoxyCode}{0} +\DoxyCodeLine{["{}clientInfo"{},\ [name\ player,\ getPlayerUID\ player]]\ remoteExecCall\ ["{}dragonfly\_db\_fnc\_hashSet"{},\ 2,\ false];} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_autotoc_md230}{}\doxysubsection{\texorpdfstring{Notes}{Notes}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_autotoc_md230} + +\begin{DoxyItemize} +\item Stores a single field-\/value pair in the current client\textquotesingle{}s hash table +\item Both the field name and data parameters are required and validated +\item If the field already exists, its value will be overwritten +\item Supports various data types\+: arrays, strings, numbers, and booleans +\item This function automatically determines which hash table to use based on the caller\textquotesingle{}s identity +\item Use {\ttfamily hash\+Set\+Id} when you need to specify a particular hash table by ID +\item Complex data structures should be serialized into arrays +\item The operation is executed immediately and synchronously +\item All operations are logged for debugging purposes +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_autotoc_md231}{}\doxysubsection{\texorpdfstring{Related Functions}{Related Functions}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_autotoc_md231} + +\begin{DoxyItemize} +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Set\+Id}\+: Sets a field value in a specific hash table (when you need to specify the ID) +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Get}\+: Retrieves a field value from the current client\textquotesingle{}s hash table +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Get\+All}\+: Retrieves all fields from the current client\textquotesingle{}s hash table +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Set\+Bulk}\+: Sets multiple fields in the current client\textquotesingle{}s hash table +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_autotoc_md232}{}\doxysubsection{\texorpdfstring{Links}{Links}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_autotoc_md232} +\doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get}{Hash Get}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all}{Hash Get All}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id}{Hash Get All ID}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id}{Hash Get ID}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set}{Hash Set}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk}{Hash Set Bulk}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id}{Hash Set ID}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk}{Hash Set ID Bulk}{0} \ No newline at end of file diff --git a/api/latex/d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.tex b/api/latex/d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.tex new file mode 100644 index 0000000..5c6b09f --- /dev/null +++ b/api/latex/d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler.tex @@ -0,0 +1,57 @@ +\chapter{scheduler} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2scheduler}{}\label{md__g_1_2ids_2dragonfly_2docs_2core_2scheduler}\index{scheduler@{scheduler}} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2scheduler_autotoc_md136}{}\doxysubsection{\texorpdfstring{autotoc\+\_\+md136}{autotoc\+\_\+md136}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2scheduler_autotoc_md136} +title\+: Arma\+Dragonfly\+Client -\/ Scheduler icon\+: mdi\+:file-\/text-\/outline \hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2scheduler_autotoc_md137}{}\doxysubsection{\texorpdfstring{excerpt\+: Scheduled Environment for extension.}{excerpt\+: Scheduled Environment for extension.}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2scheduler_autotoc_md137} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2scheduler_autotoc_md138}{}\doxysection{\texorpdfstring{dragonfly\+\_\+db\+\_\+fnc\+\_\+scheduler}{dragonfly\+\_\+db\+\_\+fnc\+\_\+scheduler}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2scheduler_autotoc_md138} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2scheduler_autotoc_md139}{}\doxysubsection{\texorpdfstring{Description}{Description}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2scheduler_autotoc_md139} +Manages the callback system for the Arma\+Dragonfly\+Client extension. This function receives task IDs from the extension\textquotesingle{}s asynchronous callbacks, parses them, and registers them in a hashmap for later processing. It acts as the bridge between the extension\textquotesingle{}s asynchronous operations and the game\textquotesingle{}s execution environment.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2scheduler_autotoc_md140}{}\doxysubsection{\texorpdfstring{Syntax}{Syntax}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2scheduler_autotoc_md140} + +\begin{DoxyCode}{0} +\DoxyCodeLine{[\_taskID]\ call\ dragonfly\_db\_fnc\_scheduler} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2scheduler_autotoc_md141}{}\doxysubsection{\texorpdfstring{Parameters}{Parameters}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2scheduler_autotoc_md141} +\tabulinesep=1mm +\begin{longtabu}spread 0pt [c]{*{4}{|X[-1]}|} +\hline +\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Parameter }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Type }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Description }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Default }\\\cline{1-4} +\endfirsthead +\hline +\endfoot +\hline +\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Parameter }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Type }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Description }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Default }\\\cline{1-4} +\endhead +{\ttfamily \+\_\+task\+ID} &String &Task identifier returned from extension callback &"{}"{} \\\cline{1-4} +\end{longtabu} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2scheduler_autotoc_md142}{}\doxysubsection{\texorpdfstring{Return Value}{Return Value}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2scheduler_autotoc_md142} +None. The function registers the task ID in a hashmap for later processing.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2scheduler_autotoc_md143}{}\doxysubsection{\texorpdfstring{Examples}{Examples}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2scheduler_autotoc_md143} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2scheduler_autotoc_md144}{}\doxysubsubsection{\texorpdfstring{Process a callback from the extension\+:}{Process a callback from the extension\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2scheduler_autotoc_md144} + +\begin{DoxyCode}{0} +\DoxyCodeLine{["{}1689524160123\_get"{}]\ call\ dragonfly\_db\_fnc\_scheduler;} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2scheduler_autotoc_md145}{}\doxysubsubsection{\texorpdfstring{Forward a callback to the server\+:}{Forward a callback to the server\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2scheduler_autotoc_md145} + +\begin{DoxyCode}{0} +\DoxyCodeLine{["{}1689524160123\_hgetall"{}]\ remoteExecCall\ ["{}dragonfly\_db\_fnc\_scheduler"{},\ 2,\ false];} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2scheduler_autotoc_md146}{}\doxysubsection{\texorpdfstring{Notes}{Notes}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2scheduler_autotoc_md146} + +\begin{DoxyItemize} +\item Parses the task ID to extract the timestamp and operation type +\item Registers the task in a type-\/specific hashmap using the mission namespace +\item Each operation type (get, hgetall, etc.) has its own hashmap for tracking +\item The format of task IDs is typically\+: {\ttfamily \mbox{[}timestamp\mbox{]}\+\_\+\mbox{[}operation\mbox{]}} +\item This function is automatically called by the extension callback mechanism +\item Creates hashmaps on demand if they don\textquotesingle{}t already exist +\item Critical for handling asynchronous database operations +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2scheduler_autotoc_md147}{}\doxysubsection{\texorpdfstring{Related Functions}{Related Functions}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2scheduler_autotoc_md147} + +\begin{DoxyItemize} +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+fetch}\+: Assembles data chunks for large datasets +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+handler}\+: Processes the data retrieved from database operations +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+process\+Queue}\+: Executes queued database operations +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2scheduler_autotoc_md148}{}\doxysubsection{\texorpdfstring{Links}{Links}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2scheduler_autotoc_md148} +\doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2add_task}{Add Task}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2handler}{Handler}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2init}{Init}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name}{Print Addon Name}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2process_queue}{Process Queue}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2scheduler}{Scheduler}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2test}{Test}{0} \ No newline at end of file diff --git a/api/latex/d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.tex b/api/latex/d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.tex new file mode 100644 index 0000000..3f7f4ad --- /dev/null +++ b/api/latex/d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove.tex @@ -0,0 +1,67 @@ +\chapter{list\+Remove} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_remove}{}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_remove}\index{listRemove@{listRemove}} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_remove_autotoc_md318}{}\doxysubsection{\texorpdfstring{autotoc\+\_\+md318}{autotoc\+\_\+md318}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_remove_autotoc_md318} +title\+: Arma\+Dragonfly\+Client -\/ List Remove icon\+: mdi\+:file-\/text-\/outline \hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_remove_autotoc_md319}{}\doxysubsection{\texorpdfstring{excerpt\+: Remove an element from a list stored at a key in Dragonfly\+Client.}{excerpt\+: Remove an element from a list stored at a key in Dragonfly\+Client.}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_remove_autotoc_md319} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_remove_autotoc_md320}{}\doxysection{\texorpdfstring{dragonfly\+\_\+db\+\_\+fnc\+\_\+list\+Remove}{dragonfly\+\_\+db\+\_\+fnc\+\_\+list\+Remove}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_remove_autotoc_md320} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_remove_autotoc_md321}{}\doxysubsection{\texorpdfstring{Description}{Description}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_remove_autotoc_md321} +Removes a specific element from a list stored at a specified key in the Dragonfly\+Client database. This function allows for precise control over list content by targeting individual elements by their index, without affecting other elements in the list. This is particularly useful for removing outdated or no longer needed entries.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_remove_autotoc_md322}{}\doxysubsection{\texorpdfstring{Syntax}{Syntax}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_remove_autotoc_md322} + +\begin{DoxyCode}{0} +\DoxyCodeLine{[\_key,\ \_index]\ call\ dragonfly\_db\_fnc\_listRemove} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_remove_autotoc_md323}{}\doxysubsection{\texorpdfstring{Parameters}{Parameters}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_remove_autotoc_md323} +\tabulinesep=1mm +\begin{longtabu}spread 0pt [c]{*{4}{|X[-1]}|} +\hline +\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Parameter }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Type }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Description }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Default }\\\cline{1-4} +\endfirsthead +\hline +\endfoot +\hline +\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Parameter }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Type }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Description }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Default }\\\cline{1-4} +\endhead +\+\_\+key &String &The key identifying the list from which to remove an element &"{}"{} \\\cline{1-4} +\+\_\+index &Number &The zero-\/based index of the element to remove from the list &-\/1 \\\cline{1-4} +\end{longtabu} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_remove_autotoc_md324}{}\doxysubsection{\texorpdfstring{Return Value}{Return Value}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_remove_autotoc_md324} +None. The operation runs synchronously to remove the element immediately.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_remove_autotoc_md325}{}\doxysubsection{\texorpdfstring{Examples}{Examples}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_remove_autotoc_md325} +{\bfseries{Remove the first element from an event log\+:}} +\begin{DoxyCode}{0} +\DoxyCodeLine{["{}eventLog"{},\ 0]\ call\ dragonfly\_db\_fnc\_listRemove;} + +\end{DoxyCode} + + +{\bfseries{Remove a specific player record\+:}} +\begin{DoxyCode}{0} +\DoxyCodeLine{["{}playerRecords"{},\ 5]\ call\ dragonfly\_db\_fnc\_listRemove;} + +\end{DoxyCode} + + +{\bfseries{Remove an element from a multiplayer environment\+:}} +\begin{DoxyCode}{0} +\DoxyCodeLine{["{}sharedData"{},\ 2]\ remoteExecCall\ ["{}dragonfly\_db\_fnc\_listRemove"{},\ 2,\ false];} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_remove_autotoc_md326}{}\doxysubsection{\texorpdfstring{Notes}{Notes}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_remove_autotoc_md326} + +\begin{DoxyItemize} +\item This function removes only the element at the specified index. All other elements remain unchanged, though their indices may shift. +\item The index is zero-\/based, meaning the first element is at index 0, the second at index 1, and so on. +\item If an invalid index is provided (negative or exceeding the list length), the operation will not remove any elements. +\item The {\ttfamily \+\_\+key} parameter must be a non-\/empty string, otherwise the function will exit without performing any action. +\item After removing an element, all subsequent elements shift down by one index to maintain a contiguous list. +\item The removal operation is permanent and cannot be undone except by re-\/adding the element. +\item All list operations are logged for debugging purposes. +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_remove_autotoc_md327}{}\doxysubsection{\texorpdfstring{Related Functions}{Related Functions}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_remove_autotoc_md327} + +\begin{DoxyItemize} +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+list\+Add}\+: Adds an element to a list +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+list\+Get}\+: Retrieves a specific element from a list +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+list\+Load}\+: Retrieves a range of elements from a list +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+list\+Set}\+: Replaces a specific element in a list +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+scheduler}\+: Processes the callback from the database extension +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_remove_autotoc_md328}{}\doxysubsection{\texorpdfstring{Links}{Links}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_remove_autotoc_md328} +\doxysectlink{md__g_1_2ids_2dragonfly_2docs_2list_2list_add}{List Add}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2list_2list_get}{List Get}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2list_2list_load}{List Load}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2list_2list_remove}{List Remove}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2list_2list_set}{List Set}{0} \ No newline at end of file diff --git a/api/latex/d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.tex b/api/latex/d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.tex new file mode 100644 index 0000000..3f0a54b --- /dev/null +++ b/api/latex/d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id.tex @@ -0,0 +1,70 @@ +\chapter{hash\+Get\+All\+Id} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id}{}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id}\index{hashGetAllId@{hashGetAllId}} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id_autotoc_md191}{}\doxysubsection{\texorpdfstring{autotoc\+\_\+md191}{autotoc\+\_\+md191}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id_autotoc_md191} +title\+: Arma\+Dragonfly\+Client -\/ Hash Get All ID icon\+: mdi\+:file-\/text-\/outline \hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id_autotoc_md192}{}\doxysubsection{\texorpdfstring{excerpt\+: Get all fields and values from the hash stored at key from Dragonfly\+Client.}{excerpt\+: Get all fields and values from the hash stored at key from Dragonfly\+Client.}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id_autotoc_md192} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id_autotoc_md193}{}\doxysection{\texorpdfstring{dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Get\+All\+Id}{dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Get\+All\+Id}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id_autotoc_md193} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id_autotoc_md194}{}\doxysubsection{\texorpdfstring{Description}{Description}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id_autotoc_md194} +Retrieves all fields and values from a specific hash table identified by its key. This function returns the complete hash table data for a specific ID through a callback function, allowing access to all stored key-\/value pairs associated with that ID. It\textquotesingle{}s particularly useful for retrieving player-\/specific or entity-\/specific hash data.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id_autotoc_md195}{}\doxysubsection{\texorpdfstring{Syntax}{Syntax}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id_autotoc_md195} + +\begin{DoxyCode}{0} +\DoxyCodeLine{[\_key,\ \_function,\ \_call,\ \_netId]\ call\ dragonfly\_db\_fnc\_hashGetAllId} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id_autotoc_md196}{}\doxysubsection{\texorpdfstring{Parameters}{Parameters}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id_autotoc_md196} +\tabulinesep=1mm +\begin{longtabu}spread 0pt [c]{*{4}{|X[-1]}|} +\hline +\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Parameter }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Type }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Description }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Default }\\\cline{1-4} +\endfirsthead +\hline +\endfoot +\hline +\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Parameter }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Type }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Description }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Default }\\\cline{1-4} +\endhead +{\ttfamily \+\_\+key} &String &Identifier of the hash table to retrieve &"{}"{} \\\cline{1-4} +{\ttfamily \+\_\+function} &String &Name of the function to receive the retrieved data &"{}"{} \\\cline{1-4} +{\ttfamily \+\_\+call} &Boolean &Whether to call the function directly (true) or spawn (false) &false \\\cline{1-4} +{\ttfamily \+\_\+net\+Id} &String &(Optional) Net\+ID of the player to receive the data &"{}"{} \\\cline{1-4} +\end{longtabu} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id_autotoc_md197}{}\doxysubsection{\texorpdfstring{Return Value}{Return Value}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id_autotoc_md197} +None. The retrieved data is passed to the specified callback function asynchronously.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id_autotoc_md198}{}\doxysubsection{\texorpdfstring{Examples}{Examples}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id_autotoc_md198} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id_autotoc_md199}{}\doxysubsubsection{\texorpdfstring{Retrieve a player\textquotesingle{}s complete hash data\+:}{Retrieve a player\textquotesingle{}s complete hash data\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id_autotoc_md199} + +\begin{DoxyCode}{0} +\DoxyCodeLine{[getPlayerUID\ player,\ "{}dragonfly\_db\_fnc\_test"{}]\ call\ dragonfly\_db\_fnc\_hashGetAllId;} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id_autotoc_md200}{}\doxysubsubsection{\texorpdfstring{Retrieve vehicle data with synchronous callback\+:}{Retrieve vehicle data with synchronous callback\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id_autotoc_md200} + +\begin{DoxyCode}{0} +\DoxyCodeLine{["{}vehicle\_123"{},\ "{}dragonfly\_db\_fnc\_processVehicleData"{},\ true]\ call\ dragonfly\_db\_fnc\_hashGetAllId;} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id_autotoc_md201}{}\doxysubsubsection{\texorpdfstring{Retrieve data and send it to a specific client\+:}{Retrieve data and send it to a specific client\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id_autotoc_md201} + +\begin{DoxyCode}{0} +\DoxyCodeLine{[getPlayerUID\ player,\ "{}dragonfly\_db\_fnc\_test"{},\ false,\ netId\ player]\ remoteExecCall\ ["{}dragonfly\_db\_fnc\_hashGetAllId"{},\ 2,\ false];} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id_autotoc_md202}{}\doxysubsection{\texorpdfstring{Notes}{Notes}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id_autotoc_md202} + +\begin{DoxyItemize} +\item Returns the complete hash table with all fields and values as a nested array +\item Both the key and callback function parameters are required and validated +\item The data is retrieved asynchronously through the extension\textquotesingle{}s callback system +\item When a net\+Id is provided, the data is sent to that specific client +\item The {\ttfamily \+\_\+call} parameter determines whether the function is called directly (synchronous) or spawned (asynchronous) +\item This function retrieves from a specific hash table identified by {\ttfamily \+\_\+key} -\/ use {\ttfamily hash\+Get\+All} for the global hash table +\item Player UIDs are commonly used as keys to store player-\/specific data +\item For large hash tables, retrieving all data may impact performance +\item All operations are logged for debugging purposes +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id_autotoc_md203}{}\doxysubsection{\texorpdfstring{Related Functions}{Related Functions}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id_autotoc_md203} + +\begin{DoxyItemize} +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Get\+All}\+: Retrieves all fields from the global hash table +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Get\+Id}\+: Retrieves a specific field value from a specific hash table +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Get}\+: Retrieves a specific field value from the global hash table +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Set\+Id}\+: Sets a field value in a specific hash table +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+scheduler}\+: Processes the callback from the database extension +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id_autotoc_md204}{}\doxysubsection{\texorpdfstring{Links}{Links}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id_autotoc_md204} +\doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get}{Hash Get}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all}{Hash Get All}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id}{Hash Get All ID}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id}{Hash Get ID}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set}{Hash Set}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk}{Hash Set Bulk}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id}{Hash Set ID}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk}{Hash Set ID Bulk}{0} \ No newline at end of file diff --git a/api/latex/d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.tex b/api/latex/d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.tex new file mode 100644 index 0000000..4f674b5 --- /dev/null +++ b/api/latex/d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id.tex @@ -0,0 +1,71 @@ +\chapter{hash\+Get\+Id} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id}{}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id}\index{hashGetId@{hashGetId}} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id_autotoc_md205}{}\doxysubsection{\texorpdfstring{autotoc\+\_\+md205}{autotoc\+\_\+md205}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id_autotoc_md205} +title\+: Arma\+Dragonfly\+Client -\/ Hash Get ID icon\+: mdi\+:file-\/text-\/outline \hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id_autotoc_md206}{}\doxysubsection{\texorpdfstring{excerpt\+: Get the value associated with field in hash stored at key from Dragonfly\+Client.}{excerpt\+: Get the value associated with field in hash stored at key from Dragonfly\+Client.}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id_autotoc_md206} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id_autotoc_md207}{}\doxysection{\texorpdfstring{dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Get\+Id}{dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Get\+Id}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id_autotoc_md207} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id_autotoc_md208}{}\doxysubsection{\texorpdfstring{Description}{Description}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id_autotoc_md208} +Retrieves the value of a specific field from a hash table identified by its key. This function allows targeted access to individual fields within a specific hash table, making it ideal for accessing particular attributes of player or entity data. The retrieved data is returned through a callback function.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id_autotoc_md209}{}\doxysubsection{\texorpdfstring{Syntax}{Syntax}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id_autotoc_md209} + +\begin{DoxyCode}{0} +\DoxyCodeLine{[\_key,\ \_keyField,\ \_function,\ \_call,\ \_netId]\ call\ dragonfly\_db\_fnc\_hashGetId} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id_autotoc_md210}{}\doxysubsection{\texorpdfstring{Parameters}{Parameters}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id_autotoc_md210} +\tabulinesep=1mm +\begin{longtabu}spread 0pt [c]{*{4}{|X[-1]}|} +\hline +\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Parameter }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Type }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Description }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Default }\\\cline{1-4} +\endfirsthead +\hline +\endfoot +\hline +\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Parameter }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Type }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Description }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Default }\\\cline{1-4} +\endhead +{\ttfamily \+\_\+key} &String &Identifier of the hash table &"{}"{} \\\cline{1-4} +{\ttfamily \+\_\+key\+Field} &String &Name of the field in the hash to retrieve &"{}"{} \\\cline{1-4} +{\ttfamily \+\_\+function} &String &Name of the function to receive the retrieved data &"{}"{} \\\cline{1-4} +{\ttfamily \+\_\+call} &Boolean &Whether to call the function directly (true) or spawn (false) &false \\\cline{1-4} +{\ttfamily \+\_\+net\+Id} &String &(Optional) Net\+ID of the player to receive the data &"{}"{} \\\cline{1-4} +\end{longtabu} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id_autotoc_md211}{}\doxysubsection{\texorpdfstring{Return Value}{Return Value}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id_autotoc_md211} +None. The retrieved data is passed to the specified callback function asynchronously.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id_autotoc_md212}{}\doxysubsection{\texorpdfstring{Examples}{Examples}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id_autotoc_md212} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id_autotoc_md213}{}\doxysubsubsection{\texorpdfstring{Retrieve a player\textquotesingle{}s loadout field\+:}{Retrieve a player\textquotesingle{}s loadout field\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id_autotoc_md213} + +\begin{DoxyCode}{0} +\DoxyCodeLine{[getPlayerUID\ player,\ "{}loadout"{},\ "{}dragonfly\_db\_fnc\_test"{}]\ call\ dragonfly\_db\_fnc\_hashGetId;} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id_autotoc_md214}{}\doxysubsubsection{\texorpdfstring{Retrieve a specific vehicle property with synchronous callback\+:}{Retrieve a specific vehicle property with synchronous callback\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id_autotoc_md214} + +\begin{DoxyCode}{0} +\DoxyCodeLine{["{}vehicle\_123"{},\ "{}fuel"{},\ "{}dragonfly\_db\_fnc\_processFuelData"{},\ true]\ call\ dragonfly\_db\_fnc\_hashGetId;} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id_autotoc_md215}{}\doxysubsubsection{\texorpdfstring{Retrieve data and send it to a specific client\+:}{Retrieve data and send it to a specific client\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id_autotoc_md215} + +\begin{DoxyCode}{0} +\DoxyCodeLine{[getPlayerUID\ player,\ "{}stats"{},\ "{}dragonfly\_db\_fnc\_test"{},\ false,\ netId\ player]\ remoteExecCall\ ["{}dragonfly\_db\_fnc\_hashGetId"{},\ 2,\ false];} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id_autotoc_md216}{}\doxysubsection{\texorpdfstring{Notes}{Notes}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id_autotoc_md216} + +\begin{DoxyItemize} +\item Retrieves a single field value from a specific hash table +\item All three primary parameters (key, key\+Field, and function) are required and validated +\item The data is retrieved asynchronously through the extension\textquotesingle{}s callback system +\item When a net\+Id is provided, the data is sent to that specific client +\item The {\ttfamily \+\_\+call} parameter determines whether the function is called directly (synchronous) or spawned (asynchronous) +\item This function targets both a specific hash table ({\ttfamily \+\_\+key}) and a specific field ({\ttfamily \+\_\+key\+Field}) +\item More efficient than retrieving all hash fields when only one is needed +\item Player UIDs are commonly used as keys to store player-\/specific data +\item All operations are logged for debugging purposes +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id_autotoc_md217}{}\doxysubsection{\texorpdfstring{Related Functions}{Related Functions}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id_autotoc_md217} + +\begin{DoxyItemize} +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Get}\+: Retrieves a field value from the global hash table +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Get\+All\+Id}\+: Retrieves all fields from a specific hash table +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Get\+All}\+: Retrieves all fields from the global hash table +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Set\+Id}\+: Sets a field value in a specific hash table +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+scheduler}\+: Processes the callback from the database extension +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id_autotoc_md218}{}\doxysubsection{\texorpdfstring{Links}{Links}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id_autotoc_md218} +\doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get}{Hash Get}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all}{Hash Get All}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id}{Hash Get All ID}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id}{Hash Get ID}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set}{Hash Set}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk}{Hash Set Bulk}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id}{Hash Set ID}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk}{Hash Set ID Bulk}{0} \ No newline at end of file diff --git a/api/latex/d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.tex b/api/latex/d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.tex new file mode 100644 index 0000000..f540165 --- /dev/null +++ b/api/latex/d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set.tex @@ -0,0 +1,68 @@ +\chapter{list\+Set} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_set}{}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_set}\index{listSet@{listSet}} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_set_autotoc_md329}{}\doxysubsection{\texorpdfstring{autotoc\+\_\+md329}{autotoc\+\_\+md329}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_set_autotoc_md329} +title\+: Arma\+Dragonfly\+Client -\/ List Set icon\+: mdi\+:file-\/text-\/outline \hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_set_autotoc_md330}{}\doxysubsection{\texorpdfstring{excerpt\+: Set an element in a list stored at a key in Dragonfly\+Client.}{excerpt\+: Set an element in a list stored at a key in Dragonfly\+Client.}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_set_autotoc_md330} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_set_autotoc_md331}{}\doxysection{\texorpdfstring{dragonfly\+\_\+db\+\_\+fnc\+\_\+list\+Set}{dragonfly\+\_\+db\+\_\+fnc\+\_\+list\+Set}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_set_autotoc_md331} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_set_autotoc_md332}{}\doxysubsection{\texorpdfstring{Description}{Description}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_set_autotoc_md332} +Updates or sets the value of a specific element at a given index in a list stored at a specified key in the Dragonfly\+Client database. This function allows for precise modification of list contents by targeting individual elements without affecting other elements in the list. It is particularly useful for updating record information, modifying configuration data, or correcting entries.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_set_autotoc_md333}{}\doxysubsection{\texorpdfstring{Syntax}{Syntax}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_set_autotoc_md333} + +\begin{DoxyCode}{0} +\DoxyCodeLine{[\_key,\ \_index,\ \_data]\ call\ dragonfly\_db\_fnc\_listSet} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_set_autotoc_md334}{}\doxysubsection{\texorpdfstring{Parameters}{Parameters}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_set_autotoc_md334} +\tabulinesep=1mm +\begin{longtabu}spread 0pt [c]{*{4}{|X[-1]}|} +\hline +\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Parameter }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Type }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Description }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Default }\\\cline{1-4} +\endfirsthead +\hline +\endfoot +\hline +\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Parameter }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Type }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Description }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Default }\\\cline{1-4} +\endhead +\+\_\+key &String &The key identifying the list in which to set an element &"{}"{} \\\cline{1-4} +\+\_\+index &Number &The zero-\/based index of the element to set in the list &-\/1 \\\cline{1-4} +\+\_\+data &Array/\+String/\+Number/\+Boolean &The value to set at the specified index &\mbox{[}\mbox{]} \\\cline{1-4} +\end{longtabu} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_set_autotoc_md335}{}\doxysubsection{\texorpdfstring{Return Value}{Return Value}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_set_autotoc_md335} +None. The operation runs synchronously to update the element immediately.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_set_autotoc_md336}{}\doxysubsection{\texorpdfstring{Examples}{Examples}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_set_autotoc_md336} +{\bfseries{Update an event log entry\+:}} +\begin{DoxyCode}{0} +\DoxyCodeLine{["{}eventLog"{},\ 0,\ ["{}Updated\ event\ information"{}]]\ call\ dragonfly\_db\_fnc\_listSet;} + +\end{DoxyCode} + + +{\bfseries{Modify player statistics\+:}} +\begin{DoxyCode}{0} +\DoxyCodeLine{["{}playerStats"{},\ 3,\ [name\ player,\ score\ player,\ alive\ player]]\ call\ dragonfly\_db\_fnc\_listSet;} + +\end{DoxyCode} + + +{\bfseries{Update configuration in multiplayer\+:}} +\begin{DoxyCode}{0} +\DoxyCodeLine{["{}missionConfig"{},\ 1,\ ["{}difficulty"{},\ "{}veteran"{}]]\ remoteExecCall\ ["{}dragonfly\_db\_fnc\_listSet"{},\ 2,\ false];} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_set_autotoc_md337}{}\doxysubsection{\texorpdfstring{Notes}{Notes}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_set_autotoc_md337} + +\begin{DoxyItemize} +\item This function updates only the element at the specified index. All other elements remain unchanged. +\item The index is zero-\/based, meaning the first element is at index 0, the second at index 1, and so on. +\item If the specified index does not exist in the list, the operation may fail or have no effect. +\item Both the {\ttfamily \+\_\+key} parameter and {\ttfamily \+\_\+data} parameter must be valid (non-\/empty string for key, non-\/nil for data), otherwise the function will exit without performing any action. +\item The function supports various data types, including arrays, strings, numbers, and booleans. +\item The update operation is permanent and will overwrite any previous value at the specified index. +\item All list operations are logged for debugging purposes. +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_set_autotoc_md338}{}\doxysubsection{\texorpdfstring{Related Functions}{Related Functions}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_set_autotoc_md338} + +\begin{DoxyItemize} +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+list\+Add}\+: Adds an element to a list +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+list\+Get}\+: Retrieves a specific element from a list +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+list\+Load}\+: Retrieves a range of elements from a list +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+list\+Remove}\+: Removes a specific element from a list +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+scheduler}\+: Processes the callback from the database extension +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_set_autotoc_md339}{}\doxysubsection{\texorpdfstring{Links}{Links}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_set_autotoc_md339} +\doxysectlink{md__g_1_2ids_2dragonfly_2docs_2list_2list_add}{List Add}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2list_2list_get}{List Get}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2list_2list_load}{List Load}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2list_2list_remove}{List Remove}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2list_2list_set}{List Set}{0} \ No newline at end of file diff --git a/api/latex/d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.tex b/api/latex/d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.tex new file mode 100644 index 0000000..94e449b --- /dev/null +++ b/api/latex/d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save.tex @@ -0,0 +1,36 @@ +\chapter{save} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2save}{}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2save}\index{save@{save}} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2save_autotoc_md40}{}\doxysubsection{\texorpdfstring{autotoc\+\_\+md40}{autotoc\+\_\+md40}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2save_autotoc_md40} +title\+: Arma\+Dragonfly\+Client -\/ Save DB icon\+: mdi\+:file-\/text-\/outline \hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2save_autotoc_md41}{}\doxysubsection{\texorpdfstring{excerpt\+: Save DB to disc.}{excerpt\+: Save DB to disc.}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2save_autotoc_md41} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2save_autotoc_md42}{}\doxysection{\texorpdfstring{dragonfly\+\_\+db\+\_\+fnc\+\_\+save}{dragonfly\+\_\+db\+\_\+fnc\+\_\+save}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2save_autotoc_md42} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2save_autotoc_md43}{}\doxysubsection{\texorpdfstring{Description}{Description}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2save_autotoc_md43} +Saves the entire database to disk storage. This function persists all data (key-\/value pairs, hash tables, and lists) to a file, allowing it to be retrieved later even after server restart.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2save_autotoc_md44}{}\doxysubsection{\texorpdfstring{Syntax}{Syntax}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2save_autotoc_md44} + +\begin{DoxyCode}{0} +\DoxyCodeLine{[]\ call\ dragonfly\_db\_fnc\_save} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2save_autotoc_md45}{}\doxysubsection{\texorpdfstring{Parameters}{Parameters}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2save_autotoc_md45} +None. The function saves the database without any parameters.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2save_autotoc_md46}{}\doxysubsection{\texorpdfstring{Return Value}{Return Value}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2save_autotoc_md46} +None. The operation runs synchronously and saves the database immediately.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2save_autotoc_md47}{}\doxysubsection{\texorpdfstring{Examples}{Examples}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2save_autotoc_md47} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2save_autotoc_md48}{}\doxysubsubsection{\texorpdfstring{Save the database without creating a backup\+:}{Save the database without creating a backup\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2save_autotoc_md48} + +\begin{DoxyCode}{0} +\DoxyCodeLine{[]\ call\ dragonfly\_db\_fnc\_save;} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2save_autotoc_md49}{}\doxysubsubsection{\texorpdfstring{Call the save function remotely from a client\+:}{Call the save function remotely from a client\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2save_autotoc_md49} + +\begin{DoxyCode}{0} +\DoxyCodeLine{[]\ remoteExecCall\ ["{}dragonfly\_db\_fnc\_save"{},\ 2,\ false];} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2save_autotoc_md50}{}\doxysubsection{\texorpdfstring{Notes}{Notes}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2save_autotoc_md50} + +\begin{DoxyItemize} +\item This function should be called periodically to ensure data persistence +\item Saving is a resource-\/intensive operation, so it shouldn\textquotesingle{}t be called too frequently +\item Consider saving before mission end or during low-\/activity periods +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2save_autotoc_md51}{}\doxysubsection{\texorpdfstring{Related Functions}{Related Functions}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2save_autotoc_md51} +None.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2save_autotoc_md52}{}\doxysubsection{\texorpdfstring{Links}{Links}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2save_autotoc_md52} +None. \ No newline at end of file diff --git a/api/latex/d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.tex b/api/latex/d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.tex new file mode 100644 index 0000000..cbccff2 --- /dev/null +++ b/api/latex/d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get.tex @@ -0,0 +1,58 @@ +\chapter{get} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2get}{}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2get}\index{get@{get}} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2get_autotoc_md23}{}\doxysubsection{\texorpdfstring{autotoc\+\_\+md23}{autotoc\+\_\+md23}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2get_autotoc_md23} +title\+: Arma\+Dragonfly\+Client -\/ Get Key icon\+: mdi\+:file-\/text-\/outline \hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2get_autotoc_md24}{}\doxysubsection{\texorpdfstring{excerpt\+: Get the value of stored key from Dragonfly\+Client.}{excerpt\+: Get the value of stored key from Dragonfly\+Client.}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2get_autotoc_md24} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2get_autotoc_md25}{}\doxysection{\texorpdfstring{dragonfly\+\_\+db\+\_\+fnc\+\_\+get}{dragonfly\+\_\+db\+\_\+fnc\+\_\+get}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2get_autotoc_md25} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2get_autotoc_md26}{}\doxysubsection{\texorpdfstring{Description}{Description}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2get_autotoc_md26} +Retrieves the value of a stored key from the database. This function performs an asynchronous request to the database and passes the retrieved data to the specified callback function.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2get_autotoc_md27}{}\doxysubsection{\texorpdfstring{Syntax}{Syntax}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2get_autotoc_md27} + +\begin{DoxyCode}{0} +\DoxyCodeLine{[\_key,\ \_function,\ \_call,\ \_netId]\ call\ dragonfly\_db\_fnc\_get} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2get_autotoc_md28}{}\doxysubsection{\texorpdfstring{Parameters}{Parameters}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2get_autotoc_md28} +\tabulinesep=1mm +\begin{longtabu}spread 0pt [c]{*{3}{|X[-1]}|} +\hline +\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Parameter }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Type }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Description }\\\cline{1-3} +\endfirsthead +\hline +\endfoot +\hline +\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Parameter }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Type }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Description }\\\cline{1-3} +\endhead +{\ttfamily \+\_\+key} &String &Name of the stored key to retrieve from the database \\\cline{1-3} +{\ttfamily \+\_\+function} &String &Name of the function to call when data is retrieved \\\cline{1-3} +{\ttfamily \+\_\+call} &Boolean &Whether to call the function directly (true) or spawn (false) \\\cline{1-3} +{\ttfamily \+\_\+net\+Id} &String &(Optional) Net\+ID of the player to whom the data should be returned \\\cline{1-3} +\end{longtabu} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2get_autotoc_md29}{}\doxysubsection{\texorpdfstring{Return Value}{Return Value}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2get_autotoc_md29} +None. When data is retrieved, it will be passed to the specified function. The operation runs asynchronously.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2get_autotoc_md30}{}\doxysubsection{\texorpdfstring{Examples}{Examples}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2get_autotoc_md30} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2get_autotoc_md31}{}\doxysubsubsection{\texorpdfstring{Retrieve data in singleplayer or on the server\+:}{Retrieve data in singleplayer or on the server\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2get_autotoc_md31} + +\begin{DoxyCode}{0} +\DoxyCodeLine{[getPlayerUID\ player,\ "{}dragonfly\_db\_fnc\_test"{}]\ call\ dragonfly\_db\_fnc\_get;} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2get_autotoc_md32}{}\doxysubsubsection{\texorpdfstring{Retrieve data on the server and send to a specific client\+:}{Retrieve data on the server and send to a specific client\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2get_autotoc_md32} + +\begin{DoxyCode}{0} +\DoxyCodeLine{[getPlayerUID\ player,\ "{}dragonfly\_db\_fnc\_test"{},\ false,\ netId\ player]\ remoteExecCall\ ["{}dragonfly\_db\_fnc\_get"{},\ 2,\ false];} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2get_autotoc_md33}{}\doxysubsection{\texorpdfstring{Notes}{Notes}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2get_autotoc_md33} + +\begin{DoxyItemize} +\item The function exit with an error if the key or function parameters are empty +\item Data is processed through the scheduler system, which manages callback responses +\item For large data that exceeds buffer limits, it will be automatically chunked and reassembled +\item The callback function must be defined to accept the retrieved data +\item The {\ttfamily \+\_\+call} parameter determines whether the callback is executed directly or spawned in a separate thread +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2get_autotoc_md34}{}\doxysubsection{\texorpdfstring{Related Functions}{Related Functions}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2get_autotoc_md34} + +\begin{DoxyItemize} +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+set}\+: Stores a value by key +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+delete}\+: Removes a value by key +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+scheduler}\+: Processes the callback response +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2get_autotoc_md35}{}\doxysubsection{\texorpdfstring{Links}{Links}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2get_autotoc_md35} +\doxysectlink{md__g_1_2ids_2dragonfly_2docs_2basic_2delete}{Delete Key}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2basic_2get}{Get Key}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2basic_2set}{Set Key}{0} \ No newline at end of file diff --git a/api/latex/d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.tex b/api/latex/d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.tex new file mode 100644 index 0000000..c3971e9 --- /dev/null +++ b/api/latex/d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get.tex @@ -0,0 +1,71 @@ +\chapter{list\+Get} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_get}{}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_get}\index{listGet@{listGet}} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_get_autotoc_md293}{}\doxysubsection{\texorpdfstring{autotoc\+\_\+md293}{autotoc\+\_\+md293}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_get_autotoc_md293} +title\+: Arma\+Dragonfly\+Client -\/ List Get icon\+: mdi\+:file-\/text-\/outline \hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_get_autotoc_md294}{}\doxysubsection{\texorpdfstring{excerpt\+: Get element of list stored at key from Dragonfly\+Client.}{excerpt\+: Get element of list stored at key from Dragonfly\+Client.}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_get_autotoc_md294} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_get_autotoc_md295}{}\doxysection{\texorpdfstring{dragonfly\+\_\+db\+\_\+fnc\+\_\+list\+Get}{dragonfly\+\_\+db\+\_\+fnc\+\_\+list\+Get}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_get_autotoc_md295} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_get_autotoc_md296}{}\doxysubsection{\texorpdfstring{Description}{Description}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_get_autotoc_md296} +Retrieves a specific element from a list stored in the database by its index. This function accesses a single item from a list using its position number and returns the data through a callback function. It\textquotesingle{}s useful for accessing individual pieces of data from a sequence without retrieving the entire list.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_get_autotoc_md297}{}\doxysubsection{\texorpdfstring{Syntax}{Syntax}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_get_autotoc_md297} + +\begin{DoxyCode}{0} +\DoxyCodeLine{[\_key,\ \_index,\ \_function,\ \_call,\ \_netId]\ call\ dragonfly\_db\_fnc\_listGet} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_get_autotoc_md298}{}\doxysubsection{\texorpdfstring{Parameters}{Parameters}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_get_autotoc_md298} +\tabulinesep=1mm +\begin{longtabu}spread 0pt [c]{*{4}{|X[-1]}|} +\hline +\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Parameter }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Type }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Description }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Default }\\\cline{1-4} +\endfirsthead +\hline +\endfoot +\hline +\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Parameter }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Type }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Description }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Default }\\\cline{1-4} +\endhead +{\ttfamily \+\_\+key} &String &Name of the list &"{}"{} \\\cline{1-4} +{\ttfamily \+\_\+index} &Number &Index position of the element to retrieve (0-\/based) &-\/1 \\\cline{1-4} +{\ttfamily \+\_\+function} &String &Name of the function to receive the retrieved data &"{}"{} \\\cline{1-4} +{\ttfamily \+\_\+call} &Boolean &Whether to call the function directly (true) or spawn (false) &false \\\cline{1-4} +{\ttfamily \+\_\+net\+Id} &String &(Optional) Net\+ID of the player to receive the data &"{}"{} \\\cline{1-4} +\end{longtabu} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_get_autotoc_md299}{}\doxysubsection{\texorpdfstring{Return Value}{Return Value}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_get_autotoc_md299} +None. The retrieved data is passed to the specified callback function asynchronously.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_get_autotoc_md300}{}\doxysubsection{\texorpdfstring{Examples}{Examples}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_get_autotoc_md300} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_get_autotoc_md301}{}\doxysubsubsection{\texorpdfstring{Retrieve a specific event log entry\+:}{Retrieve a specific event log entry\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_get_autotoc_md301} + +\begin{DoxyCode}{0} +\DoxyCodeLine{["{}events"{},\ 0,\ "{}dragonfly\_db\_fnc\_test"{}]\ call\ dragonfly\_db\_fnc\_listGet;} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_get_autotoc_md302}{}\doxysubsubsection{\texorpdfstring{Retrieve data with synchronous callback\+:}{Retrieve data with synchronous callback\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_get_autotoc_md302} + +\begin{DoxyCode}{0} +\DoxyCodeLine{["{}messages"{},\ 5,\ "{}dragonfly\_db\_fnc\_processMessage"{},\ true]\ call\ dragonfly\_db\_fnc\_listGet;} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_get_autotoc_md303}{}\doxysubsubsection{\texorpdfstring{Retrieve data and send it to a specific client\+:}{Retrieve data and send it to a specific client\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_get_autotoc_md303} + +\begin{DoxyCode}{0} +\DoxyCodeLine{["{}notifications"{},\ 0,\ "{}dragonfly\_db\_fnc\_displayNotification"{},\ false,\ netId\ player]\ remoteExecCall\ ["{}dragonfly\_db\_fnc\_listGet"{},\ 2,\ false];} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_get_autotoc_md304}{}\doxysubsection{\texorpdfstring{Notes}{Notes}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_get_autotoc_md304} + +\begin{DoxyItemize} +\item Retrieves a single element from a list by its index position +\item The key, index, and function parameters are required and validated +\item Index is zero-\/based (the first element is at index 0) +\item If the index is out of bounds or the list doesn\textquotesingle{}t exist, no data will be returned +\item The data is retrieved asynchronously through the extension\textquotesingle{}s callback system +\item When a net\+Id is provided, the data is sent to that specific client +\item The {\ttfamily \+\_\+call} parameter determines whether the function is called directly (synchronous) or spawned (asynchronous) +\item For retrieving multiple elements, use {\ttfamily list\+Load} instead +\item All operations are logged for debugging purposes +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_get_autotoc_md305}{}\doxysubsection{\texorpdfstring{Related Functions}{Related Functions}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_get_autotoc_md305} + +\begin{DoxyItemize} +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+list\+Add}\+: Adds an element to a list +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+list\+Load}\+: Retrieves a range of elements from a list +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+list\+Set}\+: Replaces a specific element in a list +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+list\+Remove}\+: Removes a specific element from a list +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+scheduler}\+: Processes the callback from the database extension +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_get_autotoc_md306}{}\doxysubsection{\texorpdfstring{Links}{Links}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_get_autotoc_md306} +\doxysectlink{md__g_1_2ids_2dragonfly_2docs_2list_2list_add}{List Add}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2list_2list_get}{List Get}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2list_2list_load}{List Load}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2list_2list_remove}{List Remove}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2list_2list_set}{List Set}{0} \ No newline at end of file diff --git a/api/latex/d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.tex b/api/latex/d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.tex new file mode 100644 index 0000000..cc7ead8 --- /dev/null +++ b/api/latex/d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler.tex @@ -0,0 +1,65 @@ +\chapter{handler} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2handler}{}\label{md__g_1_2ids_2dragonfly_2docs_2core_2handler}\index{handler@{handler}} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2handler_autotoc_md81}{}\doxysubsection{\texorpdfstring{autotoc\+\_\+md81}{autotoc\+\_\+md81}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2handler_autotoc_md81} +title\+: Arma\+Dragonfly\+Client -\/ Handler icon\+: mdi\+:file-\/text-\/outline \hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2handler_autotoc_md82}{}\doxysubsection{\texorpdfstring{excerpt\+: Handle data from DB.}{excerpt\+: Handle data from DB.}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2handler_autotoc_md82} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2handler_autotoc_md83}{}\doxysection{\texorpdfstring{dragonfly\+\_\+db\+\_\+fnc\+\_\+handler}{dragonfly\+\_\+db\+\_\+fnc\+\_\+handler}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2handler_autotoc_md83} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2handler_autotoc_md84}{}\doxysubsection{\texorpdfstring{Description}{Description}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2handler_autotoc_md84} +Handles data received from the database and routes it to the appropriate function. This function is a critical component of the callback system, receiving data from database operations and directing it to the specified function, either locally or to a remote client.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2handler_autotoc_md85}{}\doxysubsection{\texorpdfstring{Syntax}{Syntax}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2handler_autotoc_md85} + +\begin{DoxyCode}{0} +\DoxyCodeLine{[\_uniqueID,\ \_function,\ \_call,\ \_data,\ \_netId]\ call\ dragonfly\_db\_fnc\_handler} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2handler_autotoc_md86}{}\doxysubsection{\texorpdfstring{Parameters}{Parameters}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2handler_autotoc_md86} +\tabulinesep=1mm +\begin{longtabu}spread 0pt [c]{*{4}{|X[-1]}|} +\hline +\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Parameter }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Type }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Description }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Default }\\\cline{1-4} +\endfirsthead +\hline +\endfoot +\hline +\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Parameter }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Type }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Description }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Default }\\\cline{1-4} +\endhead +{\ttfamily \+\_\+unique\+ID} &String &Unique identifier for the data chunk &"{}"{} \\\cline{1-4} +{\ttfamily \+\_\+function} &String &Name of function to receive the data &"{}"{} \\\cline{1-4} +{\ttfamily \+\_\+call} &Boolean &Whether to call the function directly (true) or spawn (false) &false \\\cline{1-4} +{\ttfamily \+\_\+data} &Array, String, Number, or Boolean &The data retrieved from the database &\mbox{[}\mbox{]} \\\cline{1-4} +{\ttfamily \+\_\+net\+Id} &String &(Optional) Net\+ID of the player to receive the data &nil \\\cline{1-4} +\end{longtabu} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2handler_autotoc_md87}{}\doxysubsection{\texorpdfstring{Return Value}{Return Value}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2handler_autotoc_md87} +None. The data is passed to the specified function for processing.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2handler_autotoc_md88}{}\doxysubsection{\texorpdfstring{Examples}{Examples}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2handler_autotoc_md88} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2handler_autotoc_md89}{}\doxysubsubsection{\texorpdfstring{Process data locally\+:}{Process data locally\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2handler_autotoc_md89} + +\begin{DoxyCode}{0} +\DoxyCodeLine{["{}0123456789"{},\ "{}dragonfly\_db\_fnc\_test"{},\ false,\ ["{}Hello\ World!"{}]]\ call\ dragonfly\_db\_fnc\_handler;} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2handler_autotoc_md90}{}\doxysubsubsection{\texorpdfstring{Send data to a specific client\+:}{Send data to a specific client\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2handler_autotoc_md90} + +\begin{DoxyCode}{0} +\DoxyCodeLine{["{}0123456789"{},\ "{}dragonfly\_db\_fnc\_test"{},\ false,\ ["{}Hello\ World!"{}],\ netId\ player]\ remoteExecCall\ ["{}dragonfly\_db\_fnc\_handler"{},\ 2,\ false];} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2handler_autotoc_md91}{}\doxysubsubsection{\texorpdfstring{Process data with direct call (synchronous)\+:}{Process data with direct call (synchronous)\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2handler_autotoc_md91} + +\begin{DoxyCode}{0} +\DoxyCodeLine{["{}0123456789"{},\ "{}dragonfly\_db\_fnc\_processInventory"{},\ true,\ [["{}weapon1"{},\ 30],\ ["{}item2"{},\ 5]]]\ call\ dragonfly\_db\_fnc\_handler;} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2handler_autotoc_md92}{}\doxysubsection{\texorpdfstring{Notes}{Notes}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2handler_autotoc_md92} + +\begin{DoxyItemize} +\item The function validates that both the function name and data are valid before proceeding +\item When a net\+Id is provided, the data is sent to that specific client using remote\+Exec +\item The {\ttfamily \+\_\+call} parameter determines whether the function is called directly (synchronous) or spawned (asynchronous) +\item This function is typically called by the scheduler or other core components rather than directly by user code +\item Each handler call is logged, which is useful for debugging data flow +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2handler_autotoc_md93}{}\doxysubsection{\texorpdfstring{Related Functions}{Related Functions}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2handler_autotoc_md93} + +\begin{DoxyItemize} +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+scheduler}\+: Processes callbacks from the database extension +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+fetch}\+: Assembles data chunks for large datasets +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+add\+Task}\+: Adds tasks to the database operation queue +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2handler_autotoc_md94}{}\doxysubsection{\texorpdfstring{Links}{Links}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2handler_autotoc_md94} +\doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2add_task}{Add Task}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2handler}{Handler}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2init}{Init}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name}{Print Addon Name}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2process_queue}{Process Queue}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2scheduler}{Scheduler}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2test}{Test}{0} \ No newline at end of file diff --git a/api/latex/d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.tex b/api/latex/d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.tex new file mode 100644 index 0000000..03140f0 --- /dev/null +++ b/api/latex/d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name.tex @@ -0,0 +1,42 @@ +\chapter{print\+Addon\+Name} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name}{}\label{md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name}\index{printAddonName@{printAddonName}} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name_autotoc_md106}{}\doxysubsection{\texorpdfstring{autotoc\+\_\+md106}{autotoc\+\_\+md106}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name_autotoc_md106} +title\+: Arma\+Dragonfly\+Client -\/ Print Addon Name icon\+: mdi\+:file-\/text-\/outline \hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name_autotoc_md107}{}\doxysubsection{\texorpdfstring{excerpt\+: Displays the addon name in system chat.}{excerpt\+: Displays the addon name in system chat.}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name_autotoc_md107} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name_autotoc_md108}{}\doxysection{\texorpdfstring{dragonfly\+\_\+db\+\_\+fnc\+\_\+print\+Addon\+Name}{dragonfly\+\_\+db\+\_\+fnc\+\_\+print\+Addon\+Name}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name_autotoc_md108} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name_autotoc_md109}{}\doxysubsection{\texorpdfstring{Description}{Description}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name_autotoc_md109} +Displays a thank you message with the addon name in the system chat. This is a simple utility function that can be used to acknowledge the use of the framework or to verify that the addon is properly loaded.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name_autotoc_md110}{}\doxysubsection{\texorpdfstring{Syntax}{Syntax}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name_autotoc_md110} + +\begin{DoxyCode}{0} +\DoxyCodeLine{[]\ call\ dragonfly\_db\_fnc\_printAddonName} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name_autotoc_md111}{}\doxysubsection{\texorpdfstring{Parameters}{Parameters}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name_autotoc_md111} +None. This function does not require any parameters.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name_autotoc_md112}{}\doxysubsection{\texorpdfstring{Return Value}{Return Value}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name_autotoc_md112} +None. The function outputs a message to the system chat.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name_autotoc_md113}{}\doxysubsection{\texorpdfstring{Examples}{Examples}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name_autotoc_md113} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name_autotoc_md114}{}\doxysubsubsection{\texorpdfstring{Display the addon name message\+:}{Display the addon name message\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name_autotoc_md114} + +\begin{DoxyCode}{0} +\DoxyCodeLine{[]\ call\ dragonfly\_db\_fnc\_printAddonName;} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name_autotoc_md115}{}\doxysubsubsection{\texorpdfstring{Use in a welcome script\+:}{Use in a welcome script\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name_autotoc_md115} + +\begin{DoxyCode}{0} +\DoxyCodeLine{if\ (isServer)\ then\ \{} +\DoxyCodeLine{\ \ \ \ []\ remoteExec\ ["{}dragonfly\_db\_fnc\_printAddonName"{},\ 0,\ true];} +\DoxyCodeLine{\};} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name_autotoc_md116}{}\doxysubsection{\texorpdfstring{Notes}{Notes}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name_autotoc_md116} + +\begin{DoxyItemize} +\item The function uses the ADDON macro defined in script\+\_\+component.\+hpp +\item This displays a message directly in the player\textquotesingle{}s system chat +\item Can be useful as a quick verification that the addon is loaded correctly +\item Often used during development or for first-\/time users +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name_autotoc_md117}{}\doxysubsection{\texorpdfstring{Related Functions}{Related Functions}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name_autotoc_md117} + +\begin{DoxyItemize} +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+init}\+: Initializes the database system +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name_autotoc_md118}{}\doxysubsection{\texorpdfstring{Links}{Links}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name_autotoc_md118} +\doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2add_task}{Add Task}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2handler}{Handler}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2init}{Init}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name}{Print Addon Name}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2process_queue}{Process Queue}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2scheduler}{Scheduler}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2test}{Test}{0} \ No newline at end of file diff --git a/api/latex/d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.tex b/api/latex/d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.tex new file mode 100644 index 0000000..4f6eff7 --- /dev/null +++ b/api/latex/d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch.tex @@ -0,0 +1,51 @@ +\chapter{fetch} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2fetch}{}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2fetch}\index{fetch@{fetch}} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2fetch_autotoc_md13}{}\doxysubsection{\texorpdfstring{autotoc\+\_\+md13}{autotoc\+\_\+md13}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2fetch_autotoc_md13} +title\+: Arma\+Dragonfly\+Client -\/ Fetch icon\+: mdi\+:file-\/text-\/outline \hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2fetch_autotoc_md14}{}\doxysubsection{\texorpdfstring{excerpt\+: Handles data chunks received from the database extension when data is too large to be returned in a single callback.}{excerpt\+: Handles data chunks received from the database extension when data is too large to be returned in a single callback.}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2fetch_autotoc_md14} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2fetch_autotoc_md15}{}\doxysection{\texorpdfstring{dragonfly\+\_\+db\+\_\+fnc\+\_\+fetch}{dragonfly\+\_\+db\+\_\+fnc\+\_\+fetch}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2fetch_autotoc_md15} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2fetch_autotoc_md16}{}\doxysubsection{\texorpdfstring{Description}{Description}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2fetch_autotoc_md16} +Handles data chunks received from the database extension when data is too large to be returned in a single callback. This function collects all chunks of data, reassembles them in the correct order, and then passes the complete data to the handler function.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2fetch_autotoc_md17}{}\doxysubsection{\texorpdfstring{Syntax}{Syntax}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2fetch_autotoc_md17} + +\begin{DoxyCode}{0} +\DoxyCodeLine{[\_uniqueID,\ \_function,\ \_index,\ \_total,\ \_datachunk,\ \_call,\ \_netId]\ call\ dragonfly\_db\_fnc\_fetch} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2fetch_autotoc_md18}{}\doxysubsection{\texorpdfstring{Parameters}{Parameters}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2fetch_autotoc_md18} +\tabulinesep=1mm +\begin{longtabu}spread 0pt [c]{*{3}{|X[-1]}|} +\hline +\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Parameter }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Type }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Description }\\\cline{1-3} +\endfirsthead +\hline +\endfoot +\hline +\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Parameter }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Type }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Description }\\\cline{1-3} +\endhead +{\ttfamily \+\_\+unique\+ID} &String &Unique identifier for this data fetch operation \\\cline{1-3} +{\ttfamily \+\_\+function} &String &Name of the function to call after data is assembled \\\cline{1-3} +{\ttfamily \+\_\+index} &Number &Current chunk index (0-\/based) \\\cline{1-3} +{\ttfamily \+\_\+total} &Number &Total number of chunks expected \\\cline{1-3} +{\ttfamily \+\_\+datachunk} &String &The chunk of data being received \\\cline{1-3} +{\ttfamily \+\_\+call} &Boolean &Whether to call the function directly (true) or spawn (false) \\\cline{1-3} +{\ttfamily \+\_\+net\+Id} &String &(Optional) Net\+ID of the player to whom the data belongs \\\cline{1-3} +\end{longtabu} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2fetch_autotoc_md19}{}\doxysubsection{\texorpdfstring{Return Value}{Return Value}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2fetch_autotoc_md19} +None. When all chunks are received, the function will\+: +\begin{DoxyEnumerate} +\item Assemble the complete data string +\item Parse it as a simple array +\item Call the specified handler function with the parsed data +\end{DoxyEnumerate}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2fetch_autotoc_md20}{}\doxysubsection{\texorpdfstring{Examples}{Examples}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2fetch_autotoc_md20} +This function is typically not called directly but is triggered by the extension\textquotesingle{}s callback mechanism when large datasets are retrieved.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2fetch_autotoc_md21}{}\doxysubsection{\texorpdfstring{Notes}{Notes}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2fetch_autotoc_md21} + +\begin{DoxyItemize} +\item The function stores received chunks in the global array {\ttfamily dragonfly\+\_\+db\+\_\+fetch\+\_\+array} +\item Chunks are sorted by their index to ensure correct assembly regardless of arrival order +\item After successful processing, the chunks for this unique\+ID are removed from the array +\item This function is essential for handling large datasets that exceed the callback buffer limit +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2fetch_autotoc_md22}{}\doxysubsection{\texorpdfstring{Related Functions}{Related Functions}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2fetch_autotoc_md22} + +\begin{DoxyItemize} +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+handler}\+: Receives the assembled data and routes it to the appropriate function +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+scheduler}\+: Manages the callback queue and triggers data fetching +\end{DoxyItemize} \ No newline at end of file diff --git a/api/latex/d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.tex b/api/latex/d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.tex new file mode 100644 index 0000000..0bd41e6 --- /dev/null +++ b/api/latex/d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id.tex @@ -0,0 +1,68 @@ +\chapter{hash\+Set\+Id} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id}{}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id}\index{hashSetId@{hashSetId}} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_autotoc_md247}{}\doxysubsection{\texorpdfstring{autotoc\+\_\+md247}{autotoc\+\_\+md247}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_autotoc_md247} +title\+: Arma\+Dragonfly\+Client -\/ Hash Set ID icon\+: mdi\+:file-\/text-\/outline \hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_autotoc_md248}{}\doxysubsection{\texorpdfstring{excerpt\+: Set the specified field to the respective value in the hash stored at key from Dragonfly\+Client.}{excerpt\+: Set the specified field to the respective value in the hash stored at key from Dragonfly\+Client.}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_autotoc_md248} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_autotoc_md249}{}\doxysection{\texorpdfstring{dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Set\+Id}{dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Set\+Id}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_autotoc_md249} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_autotoc_md250}{}\doxysubsection{\texorpdfstring{Description}{Description}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_autotoc_md250} +Sets the value of a specified field in a specific hash table identified by its key. This function allows storing various data types (arrays, strings, numbers, or booleans) in a targeted hash table, making it ideal for player-\/specific or entity-\/specific data storage. It provides a way to organize related data under a common identifier.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_autotoc_md251}{}\doxysubsection{\texorpdfstring{Syntax}{Syntax}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_autotoc_md251} + +\begin{DoxyCode}{0} +\DoxyCodeLine{[\_key,\ \_keyField,\ \_data]\ call\ dragonfly\_db\_fnc\_hashSetId} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_autotoc_md252}{}\doxysubsection{\texorpdfstring{Parameters}{Parameters}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_autotoc_md252} +\tabulinesep=1mm +\begin{longtabu}spread 0pt [c]{*{4}{|X[-1]}|} +\hline +\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Parameter }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Type }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Description }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Default }\\\cline{1-4} +\endfirsthead +\hline +\endfoot +\hline +\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Parameter }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Type }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Description }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Default }\\\cline{1-4} +\endhead +{\ttfamily \+\_\+key} &String &Identifier of the hash table &"{}"{} \\\cline{1-4} +{\ttfamily \+\_\+key\+Field} &String &Name of the field in the hash to set &"{}"{} \\\cline{1-4} +{\ttfamily \+\_\+data} &Array, String, Number, or Boolean &The value to store in the hash field &\mbox{[}\mbox{]} \\\cline{1-4} +\end{longtabu} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_autotoc_md253}{}\doxysubsection{\texorpdfstring{Return Value}{Return Value}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_autotoc_md253} +None. The operation runs synchronously to store the data.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_autotoc_md254}{}\doxysubsection{\texorpdfstring{Examples}{Examples}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_autotoc_md254} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_autotoc_md255}{}\doxysubsubsection{\texorpdfstring{Store a player\textquotesingle{}s loadout under their UID\+:}{Store a player\textquotesingle{}s loadout under their UID\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_autotoc_md255} + +\begin{DoxyCode}{0} +\DoxyCodeLine{[getPlayerUID\ player,\ "{}loadout"{},\ [getUnitLoadout\ player]]\ call\ dragonfly\_db\_fnc\_hashSetId;} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_autotoc_md256}{}\doxysubsubsection{\texorpdfstring{Store vehicle data\+:}{Store vehicle data\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_autotoc_md256} + +\begin{DoxyCode}{0} +\DoxyCodeLine{["{}vehicle\_123"{},\ "{}status"{},\ [true,\ 100,\ 75,\ "{}active"{}]]\ call\ dragonfly\_db\_fnc\_hashSetId;} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_autotoc_md257}{}\doxysubsubsection{\texorpdfstring{Store player data from a client\+:}{Store player data from a client\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_autotoc_md257} + +\begin{DoxyCode}{0} +\DoxyCodeLine{[getPlayerUID\ player,\ "{}stats"{},\ [rank\ player,\ score\ player,\ name\ player]]\ remoteExecCall\ ["{}dragonfly\_db\_fnc\_hashSetId"{},\ 2,\ false];} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_autotoc_md258}{}\doxysubsection{\texorpdfstring{Notes}{Notes}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_autotoc_md258} + +\begin{DoxyItemize} +\item Stores a single field-\/value pair in a specific hash table identified by {\ttfamily \+\_\+key} +\item All three parameters (key, key\+Field, and data) are required and validated +\item If the hash table doesn\textquotesingle{}t exist, it will be created automatically +\item If the field already exists in the hash table, its value will be overwritten +\item Supports various data types\+: arrays, strings, numbers, and booleans +\item Player UIDs are commonly used as keys to store player-\/specific data +\item Complex data structures should be serialized into arrays +\item The operation is executed immediately and synchronously +\item All operations are logged for debugging purposes +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_autotoc_md259}{}\doxysubsection{\texorpdfstring{Related Functions}{Related Functions}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_autotoc_md259} + +\begin{DoxyItemize} +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Set}\+: Sets a field value in the global hash table +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Get\+Id}\+: Retrieves a field value from a specific hash table +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Get\+All\+Id}\+: Retrieves all fields from a specific hash table +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Set\+Id\+Bulk}\+: Sets multiple field-\/value pairs in multiple hash tables +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_autotoc_md260}{}\doxysubsection{\texorpdfstring{Links}{Links}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_autotoc_md260} +\doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get}{Hash Get}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all}{Hash Get All}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id}{Hash Get All ID}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id}{Hash Get ID}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set}{Hash Set}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk}{Hash Set Bulk}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id}{Hash Set ID}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk}{Hash Set ID Bulk}{0} \ No newline at end of file diff --git a/api/latex/d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.tex b/api/latex/d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.tex new file mode 100644 index 0000000..c581eb4 --- /dev/null +++ b/api/latex/d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test.tex @@ -0,0 +1,62 @@ +\chapter{test} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2test}{}\label{md__g_1_2ids_2dragonfly_2docs_2core_2test}\index{test@{test}} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2test_autotoc_md149}{}\doxysubsection{\texorpdfstring{autotoc\+\_\+md149}{autotoc\+\_\+md149}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2test_autotoc_md149} +title\+: Arma\+Dragonfly\+Client -\/ Test icon\+: mdi\+:file-\/text-\/outline \hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2test_autotoc_md150}{}\doxysubsection{\texorpdfstring{excerpt\+: Test Function.}{excerpt\+: Test Function.}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2test_autotoc_md150} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2test_autotoc_md151}{}\doxysection{\texorpdfstring{dragonfly\+\_\+db\+\_\+fnc\+\_\+test}{dragonfly\+\_\+db\+\_\+fnc\+\_\+test}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2test_autotoc_md151} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2test_autotoc_md152}{}\doxysubsection{\texorpdfstring{Description}{Description}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2test_autotoc_md152} +A simple test function for verifying database operations. This function displays the received data in a hint message and logs it to the RPT file. It\textquotesingle{}s primarily used for testing database retrieval operations and callback functionality.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2test_autotoc_md153}{}\doxysubsection{\texorpdfstring{Syntax}{Syntax}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2test_autotoc_md153} + +\begin{DoxyCode}{0} +\DoxyCodeLine{[\_value]\ spawn\ dragonfly\_db\_fnc\_test} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2test_autotoc_md154}{}\doxysubsection{\texorpdfstring{Parameters}{Parameters}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2test_autotoc_md154} +\tabulinesep=1mm +\begin{longtabu}spread 0pt [c]{*{4}{|X[-1]}|} +\hline +\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Parameter }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Type }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Description }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Default }\\\cline{1-4} +\endfirsthead +\hline +\endfoot +\hline +\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Parameter }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Type }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Description }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Default }\\\cline{1-4} +\endhead +{\ttfamily \+\_\+value} &Array, String, Number, or Boolean &The value to display and log &\mbox{[}\mbox{]} \\\cline{1-4} +\end{longtabu} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2test_autotoc_md155}{}\doxysubsection{\texorpdfstring{Return Value}{Return Value}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2test_autotoc_md155} +The same value that was passed to the function. Also sets the global variable {\ttfamily dragonfly\+\_\+db\+\_\+test} to this value.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2test_autotoc_md156}{}\doxysubsection{\texorpdfstring{Examples}{Examples}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2test_autotoc_md156} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2test_autotoc_md157}{}\doxysubsubsection{\texorpdfstring{Test with a simple string\+:}{Test with a simple string\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2test_autotoc_md157} + +\begin{DoxyCode}{0} +\DoxyCodeLine{["{}Hello\ World!"{}]\ spawn\ dragonfly\_db\_fnc\_test;} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2test_autotoc_md158}{}\doxysubsubsection{\texorpdfstring{Test database retrieval by specifying this as callback function\+:}{Test database retrieval by specifying this as callback function\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2test_autotoc_md158} + +\begin{DoxyCode}{0} +\DoxyCodeLine{["{}playerStats"{},\ "{}dragonfly\_db\_fnc\_test"{}]\ call\ dragonfly\_db\_fnc\_get;} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2test_autotoc_md159}{}\doxysubsubsection{\texorpdfstring{Test from client to server\+:}{Test from client to server\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2test_autotoc_md159} + +\begin{DoxyCode}{0} +\DoxyCodeLine{["{}Database\ is\ working!"{}]\ remoteExec\ ["{}dragonfly\_db\_fnc\_test"{},\ 2,\ false];} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2test_autotoc_md160}{}\doxysubsection{\texorpdfstring{Notes}{Notes}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2test_autotoc_md160} + +\begin{DoxyItemize} +\item Displays the received value using {\ttfamily hint} +\item Logs the same value to the RPT file +\item Stores the value in the global variable {\ttfamily dragonfly\+\_\+db\+\_\+test} for later inspection +\item Commonly used as a callback function for database operations +\item Useful for debugging and verifying data flow +\item Can be called directly or specified as a callback in other functions +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2test_autotoc_md161}{}\doxysubsection{\texorpdfstring{Related Functions}{Related Functions}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2test_autotoc_md161} + +\begin{DoxyItemize} +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+get}\+: Retrieves values from the database +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+handler}\+: Routes data to callback functions +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+scheduler}\+: Manages the callback system +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2test_autotoc_md162}{}\doxysubsection{\texorpdfstring{Links}{Links}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2test_autotoc_md162} +\doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2add_task}{Add Task}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2handler}{Handler}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2init}{Init}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name}{Print Addon Name}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2process_queue}{Process Queue}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2scheduler}{Scheduler}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2test}{Test}{0} \ No newline at end of file diff --git a/api/latex/d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.tex b/api/latex/d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.tex new file mode 100644 index 0000000..20bcda0 --- /dev/null +++ b/api/latex/d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set.tex @@ -0,0 +1,62 @@ +\chapter{set} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2set}{}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2set}\index{set@{set}} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2set_autotoc_md53}{}\doxysubsection{\texorpdfstring{autotoc\+\_\+md53}{autotoc\+\_\+md53}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2set_autotoc_md53} +title\+: Arma\+Dragonfly\+Client -\/ Set Key icon\+: mdi\+:file-\/text-\/outline \hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2set_autotoc_md54}{}\doxysubsection{\texorpdfstring{excerpt\+: Set the value of stored key from Dragonfly\+Client.}{excerpt\+: Set the value of stored key from Dragonfly\+Client.}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2set_autotoc_md54} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2set_autotoc_md55}{}\doxysection{\texorpdfstring{dragonfly\+\_\+db\+\_\+fnc\+\_\+set}{dragonfly\+\_\+db\+\_\+fnc\+\_\+set}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2set_autotoc_md55} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2set_autotoc_md56}{}\doxysubsection{\texorpdfstring{Description}{Description}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2set_autotoc_md56} +Stores a value in the database with the specified key. This function allows saving various data types (arrays, strings, numbers, or booleans) that can be retrieved later using the key.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2set_autotoc_md57}{}\doxysubsection{\texorpdfstring{Syntax}{Syntax}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2set_autotoc_md57} + +\begin{DoxyCode}{0} +\DoxyCodeLine{[\_key,\ \_data]\ call\ dragonfly\_db\_fnc\_set} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2set_autotoc_md58}{}\doxysubsection{\texorpdfstring{Parameters}{Parameters}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2set_autotoc_md58} +\tabulinesep=1mm +\begin{longtabu}spread 0pt [c]{*{4}{|X[-1]}|} +\hline +\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Parameter }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Type }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Description }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Default }\\\cline{1-4} +\endfirsthead +\hline +\endfoot +\hline +\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Parameter }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Type }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Description }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Default }\\\cline{1-4} +\endhead +{\ttfamily \+\_\+key} &String &Name of the key to store the data under &"{}"{} \\\cline{1-4} +{\ttfamily \+\_\+data} &Array, String, Number, or Boolean &The value to store in the database &\mbox{[}\mbox{]} \\\cline{1-4} +\end{longtabu} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2set_autotoc_md59}{}\doxysubsection{\texorpdfstring{Return Value}{Return Value}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2set_autotoc_md59} +None. The operation runs asynchronously.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2set_autotoc_md60}{}\doxysubsection{\texorpdfstring{Examples}{Examples}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2set_autotoc_md60} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2set_autotoc_md61}{}\doxysubsubsection{\texorpdfstring{Store a simple array\+:}{Store a simple array\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2set_autotoc_md61} + +\begin{DoxyCode}{0} +\DoxyCodeLine{["{}playerInventory"{},\ ["{}item1"{},\ "{}item2"{},\ "{}item3"{}]]\ call\ dragonfly\_db\_fnc\_set;} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2set_autotoc_md62}{}\doxysubsubsection{\texorpdfstring{Store player data under their UID\+:}{Store player data under their UID\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2set_autotoc_md62} + +\begin{DoxyCode}{0} +\DoxyCodeLine{[getPlayerUID\ player,\ [name\ player,\ getPos\ player,\ getAllGear\ player]]\ call\ dragonfly\_db\_fnc\_set;} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2set_autotoc_md63}{}\doxysubsubsection{\texorpdfstring{Call the set function remotely from a client\+:}{Call the set function remotely from a client\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2set_autotoc_md63} + +\begin{DoxyCode}{0} +\DoxyCodeLine{["{}serverSetting"{},\ [true,\ 30,\ "{}normal"{}]]\ remoteExecCall\ ["{}dragonfly\_db\_fnc\_set"{},\ 2,\ false];} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2set_autotoc_md64}{}\doxysubsection{\texorpdfstring{Notes}{Notes}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2set_autotoc_md64} + +\begin{DoxyItemize} +\item The function validates both the key and data before attempting to store +\item If the key already exists, its value will be overwritten +\item Complex data structures should be serialized into arrays +\item There are no size limits for data, but extremely large values might impact performance +\item For structured data, consider using hash tables instead of key-\/value pairs +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2set_autotoc_md65}{}\doxysubsection{\texorpdfstring{Related Functions}{Related Functions}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2set_autotoc_md65} + +\begin{DoxyItemize} +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+get}\+: Retrieves a value by key +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+delete}\+: Removes a value by key +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+scheduler}\+: Processes the callback response +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2set_autotoc_md66}{}\doxysubsection{\texorpdfstring{Links}{Links}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2set_autotoc_md66} +\doxysectlink{md__g_1_2ids_2dragonfly_2docs_2basic_2delete}{Delete Key}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2basic_2get}{Get Key}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2basic_2set}{Set Key}{0} \ No newline at end of file diff --git a/api/latex/d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.tex b/api/latex/d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.tex new file mode 100644 index 0000000..af00fe5 --- /dev/null +++ b/api/latex/d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load.tex @@ -0,0 +1,69 @@ +\chapter{list\+Load} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_load}{}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_load}\index{listLoad@{listLoad}} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_load_autotoc_md307}{}\doxysubsection{\texorpdfstring{autotoc\+\_\+md307}{autotoc\+\_\+md307}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_load_autotoc_md307} +title\+: Arma\+Dragonfly\+Client -\/ List Load icon\+: mdi\+:file-\/text-\/outline \hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_load_autotoc_md308}{}\doxysubsection{\texorpdfstring{excerpt\+: Get all elements of a list stored at a key from Dragonfly\+Client.}{excerpt\+: Get all elements of a list stored at a key from Dragonfly\+Client.}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_load_autotoc_md308} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_load_autotoc_md309}{}\doxysection{\texorpdfstring{dragonfly\+\_\+db\+\_\+fnc\+\_\+list\+Load}{dragonfly\+\_\+db\+\_\+fnc\+\_\+list\+Load}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_load_autotoc_md309} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_load_autotoc_md310}{}\doxysubsection{\texorpdfstring{Description}{Description}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_load_autotoc_md310} +Retrieves all elements of a list stored at a specified key from the Dragonfly\+Client database. This function is useful when you need to access the complete list data rather than individual elements, allowing operations on the entire dataset. The retrieved data is passed to a callback function for processing.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_load_autotoc_md311}{}\doxysubsection{\texorpdfstring{Syntax}{Syntax}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_load_autotoc_md311} + +\begin{DoxyCode}{0} +\DoxyCodeLine{[\_key,\ \_function,\ \_call,\ \_netId]\ call\ dragonfly\_db\_fnc\_listLoad} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_load_autotoc_md312}{}\doxysubsection{\texorpdfstring{Parameters}{Parameters}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_load_autotoc_md312} +\tabulinesep=1mm +\begin{longtabu}spread 0pt [c]{*{4}{|X[-1]}|} +\hline +\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Parameter }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Type }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Description }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Default }\\\cline{1-4} +\endfirsthead +\hline +\endfoot +\hline +\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Parameter }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Type }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Description }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Default }\\\cline{1-4} +\endhead +\+\_\+key &String &The key identifying the list to be retrieved &"{}"{} \\\cline{1-4} +\+\_\+function &String &The name of the function that will receive the retrieved data &"{}"{} \\\cline{1-4} +\+\_\+call &Boolean &Whether to call the function in an unscheduled environment &false \\\cline{1-4} +\+\_\+net\+Id &String &The Net\+ID of the target to return data from the function (multiplayer only) &"{}"{} \\\cline{1-4} +\end{longtabu} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_load_autotoc_md313}{}\doxysubsection{\texorpdfstring{Return Value}{Return Value}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_load_autotoc_md313} +No value is returned directly. The retrieved list data is passed to the specified callback function asynchronously.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_load_autotoc_md314}{}\doxysubsection{\texorpdfstring{Examples}{Examples}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_load_autotoc_md314} +{\bfseries{Retrieve all event logs\+:}} +\begin{DoxyCode}{0} +\DoxyCodeLine{["{}events"{},\ "{}myProject\_fnc\_processEventLogs"{}]\ call\ dragonfly\_db\_fnc\_listLoad;} + +\end{DoxyCode} + + +{\bfseries{Retrieve a player list with synchronous callback\+:}} +\begin{DoxyCode}{0} +\DoxyCodeLine{["{}playerList"{},\ "{}myProject\_fnc\_processPlayerList"{},\ true]\ call\ dragonfly\_db\_fnc\_listLoad;} + +\end{DoxyCode} + + +{\bfseries{Send mission data to a specific client\+:}} +\begin{DoxyCode}{0} +\DoxyCodeLine{["{}missionData"{},\ "{}myProject\_fnc\_processMissionData"{},\ false,\ netId\ player]\ remoteExecCall\ ["{}dragonfly\_db\_fnc\_listLoad"{},\ 2,\ false];} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_load_autotoc_md315}{}\doxysubsection{\texorpdfstring{Notes}{Notes}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_load_autotoc_md315} + +\begin{DoxyItemize} +\item This function retrieves the entire list stored at the specified key, making it useful when you need to process multiple elements together. +\item Both the {\ttfamily \+\_\+key} and {\ttfamily \+\_\+function} parameters are required. The function will exit without action if either is empty. +\item The retrieved data is processed asynchronously through the scheduler system and passed to the specified callback function. +\item For multiplayer scenarios, you can specify a target client using the {\ttfamily \+\_\+net\+Id} parameter to send the retrieved data to that specific client. +\item The {\ttfamily \+\_\+call} parameter determines whether the callback function is executed in an unscheduled environment (true) or scheduled environment (false). +\item This function uses the underlying "{}listrng"{} extension with a range from 0 to -\/1, which retrieves all elements in the list. +\item All list operations are logged for debugging purposes. +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_load_autotoc_md316}{}\doxysubsection{\texorpdfstring{Related Functions}{Related Functions}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_load_autotoc_md316} + +\begin{DoxyItemize} +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+list\+Add}\+: Adds an element to a list +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+list\+Get}\+: Retrieves a specific element from a list +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+list\+Set}\+: Replaces a specific element in a list +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+list\+Remove}\+: Removes a specific element from a list +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+scheduler}\+: Processes the callback from the database extension +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_load_autotoc_md317}{}\doxysubsection{\texorpdfstring{Links}{Links}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_load_autotoc_md317} +\doxysectlink{md__g_1_2ids_2dragonfly_2docs_2list_2list_add}{List Add}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2list_2list_get}{List Get}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2list_2list_load}{List Load}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2list_2list_remove}{List Remove}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2list_2list_set}{List Set}{0} \ No newline at end of file diff --git a/api/latex/d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.tex b/api/latex/d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.tex new file mode 100644 index 0000000..1a19220 --- /dev/null +++ b/api/latex/d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get.tex @@ -0,0 +1,70 @@ +\chapter{hash\+Get} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get}{}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get}\index{hashGet@{hashGet}} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_autotoc_md163}{}\doxysubsection{\texorpdfstring{autotoc\+\_\+md163}{autotoc\+\_\+md163}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_autotoc_md163} +title\+: Arma\+Dragonfly\+Client -\/ Hash Get icon\+: mdi\+:file-\/text-\/outline \hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_autotoc_md164}{}\doxysubsection{\texorpdfstring{excerpt\+: Get a field value from the current client\textquotesingle{}s hash table in Dragonfly\+Client.}{excerpt\+: Get a field value from the current client\textquotesingle{}s hash table in Dragonfly\+Client.}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_autotoc_md164} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_autotoc_md165}{}\doxysection{\texorpdfstring{dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Get}{dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Get}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_autotoc_md165} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_autotoc_md166}{}\doxysubsection{\texorpdfstring{Description}{Description}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_autotoc_md166} +Retrieves the value associated with a specific field in the hash table of the current client/player. This function automatically determines the appropriate hash ID based on the caller\textquotesingle{}s identity, making it more convenient than {\ttfamily hash\+Get\+Id} which requires manually specifying an ID. It accesses hash data asynchronously and returns the result through a callback function.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_autotoc_md167}{}\doxysubsection{\texorpdfstring{Syntax}{Syntax}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_autotoc_md167} + +\begin{DoxyCode}{0} +\DoxyCodeLine{[\_keyField,\ \_function,\ \_call,\ \_netId]\ call\ dragonfly\_db\_fnc\_hashGet} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_autotoc_md168}{}\doxysubsection{\texorpdfstring{Parameters}{Parameters}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_autotoc_md168} +\tabulinesep=1mm +\begin{longtabu}spread 0pt [c]{*{4}{|X[-1]}|} +\hline +\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Parameter }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Type }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Description }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Default }\\\cline{1-4} +\endfirsthead +\hline +\endfoot +\hline +\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Parameter }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Type }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Description }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Default }\\\cline{1-4} +\endhead +{\ttfamily \+\_\+key\+Field} &String &Name of the field in the hash to retrieve &"{}"{} \\\cline{1-4} +{\ttfamily \+\_\+function} &String &Name of the function to receive the retrieved data &"{}"{} \\\cline{1-4} +{\ttfamily \+\_\+call} &Boolean &Whether to call the function directly (true) or spawn (false) &false \\\cline{1-4} +{\ttfamily \+\_\+net\+Id} &String &(Optional) Net\+ID of the player to receive the data &"{}"{} \\\cline{1-4} +\end{longtabu} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_autotoc_md169}{}\doxysubsection{\texorpdfstring{Return Value}{Return Value}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_autotoc_md169} +None. The retrieved data is passed to the specified callback function asynchronously.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_autotoc_md170}{}\doxysubsection{\texorpdfstring{Examples}{Examples}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_autotoc_md170} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_autotoc_md171}{}\doxysubsubsection{\texorpdfstring{Retrieve a player\textquotesingle{}s loadout\+:}{Retrieve a player\textquotesingle{}s loadout\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_autotoc_md171} + +\begin{DoxyCode}{0} +\DoxyCodeLine{["{}loadout"{},\ "{}dragonfly\_db\_fnc\_test"{}]\ call\ dragonfly\_db\_fnc\_hashGet;} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_autotoc_md172}{}\doxysubsubsection{\texorpdfstring{Retrieve data with synchronous callback\+:}{Retrieve data with synchronous callback\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_autotoc_md172} + +\begin{DoxyCode}{0} +\DoxyCodeLine{["{}playerScore"{},\ "{}dragonfly\_db\_fnc\_processScore"{},\ true]\ call\ dragonfly\_db\_fnc\_hashGet;} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_autotoc_md173}{}\doxysubsubsection{\texorpdfstring{Retrieve data and send it to a specific client\+:}{Retrieve data and send it to a specific client\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_autotoc_md173} + +\begin{DoxyCode}{0} +\DoxyCodeLine{["{}loadout"{},\ "{}dragonfly\_db\_fnc\_test"{},\ false,\ netId\ player]\ remoteExecCall\ ["{}dragonfly\_db\_fnc\_hashGet"{},\ 2,\ false];} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_autotoc_md174}{}\doxysubsection{\texorpdfstring{Notes}{Notes}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_autotoc_md174} + +\begin{DoxyItemize} +\item Retrieves a value from the current client\textquotesingle{}s hash table +\item The data is retrieved asynchronously through the extension\textquotesingle{}s callback system +\item Both the field name and callback function name must be provided +\item Input validation ensures both required parameters are non-\/empty +\item When a net\+Id is provided, the data is sent to that specific client +\item The {\ttfamily \+\_\+call} parameter determines whether the function is called directly (synchronous) or spawned (asynchronous) +\item This function automatically determines which hash table to use based on the caller\textquotesingle{}s identity +\item Use {\ttfamily hash\+Get\+Id} when you need to specify a particular hash table by ID +\item All operations are logged for debugging purposes +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_autotoc_md175}{}\doxysubsection{\texorpdfstring{Related Functions}{Related Functions}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_autotoc_md175} + +\begin{DoxyItemize} +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Get\+Id}\+: Retrieves a field value from a specific hash table (when you need to specify the ID) +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Get\+All}\+: Retrieves all fields from the current client\textquotesingle{}s hash table +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Get\+All\+Id}\+: Retrieves all fields from a specific hash table +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Set}\+: Sets a field value in the current client\textquotesingle{}s hash table +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+scheduler}\+: Processes the callback from the database extension +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_autotoc_md176}{}\doxysubsection{\texorpdfstring{Links}{Links}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_autotoc_md176} +\doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get}{Hash Get}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all}{Hash Get All}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id}{Hash Get All ID}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id}{Hash Get ID}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set}{Hash Set}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk}{Hash Set Bulk}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id}{Hash Set ID}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk}{Hash Set ID Bulk}{0} \ No newline at end of file diff --git a/api/latex/da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.tex b/api/latex/da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.tex new file mode 100644 index 0000000..e4762d4 --- /dev/null +++ b/api/latex/da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all.tex @@ -0,0 +1,69 @@ +\chapter{hash\+Get\+All} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all}{}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all}\index{hashGetAll@{hashGetAll}} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_autotoc_md177}{}\doxysubsection{\texorpdfstring{autotoc\+\_\+md177}{autotoc\+\_\+md177}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_autotoc_md177} +title\+: Arma\+Dragonfly\+Client -\/ Hash Get All icon\+: mdi\+:file-\/text-\/outline \hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_autotoc_md178}{}\doxysubsection{\texorpdfstring{excerpt\+: Get all fields from the current client\textquotesingle{}s hash table in Dragonfly\+Client.}{excerpt\+: Get all fields from the current client\textquotesingle{}s hash table in Dragonfly\+Client.}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_autotoc_md178} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_autotoc_md179}{}\doxysection{\texorpdfstring{dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Get\+All}{dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Get\+All}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_autotoc_md179} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_autotoc_md180}{}\doxysubsection{\texorpdfstring{Description}{Description}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_autotoc_md180} +Retrieves all fields and values from the hash table associated with the current client/player. This function automatically determines the appropriate hash ID based on the caller\textquotesingle{}s identity, making it more convenient than {\ttfamily hash\+Get\+All\+Id} which requires manually specifying an ID. It returns the entire hash table data through a callback function, allowing access to all stored key-\/value pairs at once.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_autotoc_md181}{}\doxysubsection{\texorpdfstring{Syntax}{Syntax}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_autotoc_md181} + +\begin{DoxyCode}{0} +\DoxyCodeLine{[\_function,\ \_call,\ \_netId]\ call\ dragonfly\_db\_fnc\_hashGetAll} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_autotoc_md182}{}\doxysubsection{\texorpdfstring{Parameters}{Parameters}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_autotoc_md182} +\tabulinesep=1mm +\begin{longtabu}spread 0pt [c]{*{4}{|X[-1]}|} +\hline +\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Parameter }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Type }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Description }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Default }\\\cline{1-4} +\endfirsthead +\hline +\endfoot +\hline +\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Parameter }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Type }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Description }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Default }\\\cline{1-4} +\endhead +{\ttfamily \+\_\+function} &String &Name of the function to receive the retrieved data &"{}"{} \\\cline{1-4} +{\ttfamily \+\_\+call} &Boolean &Whether to call the function directly (true) or spawn (false) &false \\\cline{1-4} +{\ttfamily \+\_\+net\+Id} &String &(Optional) Net\+ID of the player to receive the data &"{}"{} \\\cline{1-4} +\end{longtabu} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_autotoc_md183}{}\doxysubsection{\texorpdfstring{Return Value}{Return Value}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_autotoc_md183} +None. The retrieved data is passed to the specified callback function asynchronously.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_autotoc_md184}{}\doxysubsection{\texorpdfstring{Examples}{Examples}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_autotoc_md184} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_autotoc_md185}{}\doxysubsubsection{\texorpdfstring{Retrieve all client hash data\+:}{Retrieve all client hash data\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_autotoc_md185} + +\begin{DoxyCode}{0} +\DoxyCodeLine{["{}dragonfly\_db\_fnc\_test"{}]\ call\ dragonfly\_db\_fnc\_hashGetAll;} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_autotoc_md186}{}\doxysubsubsection{\texorpdfstring{Retrieve data with synchronous callback\+:}{Retrieve data with synchronous callback\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_autotoc_md186} + +\begin{DoxyCode}{0} +\DoxyCodeLine{["{}dragonfly\_db\_fnc\_processAllData"{},\ true]\ call\ dragonfly\_db\_fnc\_hashGetAll;} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_autotoc_md187}{}\doxysubsubsection{\texorpdfstring{Retrieve data and send it to a specific client\+:}{Retrieve data and send it to a specific client\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_autotoc_md187} + +\begin{DoxyCode}{0} +\DoxyCodeLine{["{}dragonfly\_db\_fnc\_test"{},\ false,\ netId\ player]\ remoteExecCall\ ["{}dragonfly\_db\_fnc\_hashGetAll"{},\ 2,\ false];} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_autotoc_md188}{}\doxysubsection{\texorpdfstring{Notes}{Notes}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_autotoc_md188} + +\begin{DoxyItemize} +\item Returns the complete hash table for the current client with all fields and values as a nested array +\item The data is retrieved asynchronously through the extension\textquotesingle{}s callback system +\item The callback function name must be provided and is validated +\item When a net\+Id is provided, the data is sent to that specific client +\item The {\ttfamily \+\_\+call} parameter determines whether the function is called directly (synchronous) or spawned (asynchronous) +\item This function automatically determines which hash table to use based on the caller\textquotesingle{}s identity +\item Use {\ttfamily hash\+Get\+All\+Id} when you need to specify a particular hash table by ID +\item For large hash tables, retrieving all data may impact performance +\item All operations are logged for debugging purposes +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_autotoc_md189}{}\doxysubsection{\texorpdfstring{Related Functions}{Related Functions}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_autotoc_md189} + +\begin{DoxyItemize} +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Get}\+: Retrieves a specific field value from the current client\textquotesingle{}s hash table +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Get\+Id}\+: Retrieves a specific field value from a specific hash table (when you need to specify the ID) +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Get\+All\+Id}\+: Retrieves all fields from a specific hash table (when you need to specify the ID) +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Set}\+: Sets a field value in the current client\textquotesingle{}s hash table +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+scheduler}\+: Processes the callback from the database extension +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_autotoc_md190}{}\doxysubsection{\texorpdfstring{Links}{Links}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_autotoc_md190} +\doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get}{Hash Get}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all}{Hash Get All}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id}{Hash Get All ID}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id}{Hash Get ID}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set}{Hash Set}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk}{Hash Set Bulk}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id}{Hash Set ID}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk}{Hash Set ID Bulk}{0} \ No newline at end of file diff --git a/api/latex/da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.tex b/api/latex/da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.tex new file mode 100644 index 0000000..b4b8528 --- /dev/null +++ b/api/latex/da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add.tex @@ -0,0 +1,67 @@ +\chapter{list\+Add} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_add}{}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_add}\index{listAdd@{listAdd}} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_add_autotoc_md279}{}\doxysubsection{\texorpdfstring{autotoc\+\_\+md279}{autotoc\+\_\+md279}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_add_autotoc_md279} +title\+: Arma\+Dragonfly\+Client -\/ List Add icon\+: mdi\+:file-\/text-\/outline \hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_add_autotoc_md280}{}\doxysubsection{\texorpdfstring{excerpt\+: Add element to list stored at key from Dragonfly\+Client.}{excerpt\+: Add element to list stored at key from Dragonfly\+Client.}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_add_autotoc_md280} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_add_autotoc_md281}{}\doxysection{\texorpdfstring{dragonfly\+\_\+db\+\_\+fnc\+\_\+list\+Add}{dragonfly\+\_\+db\+\_\+fnc\+\_\+list\+Add}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_add_autotoc_md281} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_add_autotoc_md282}{}\doxysubsection{\texorpdfstring{Description}{Description}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_add_autotoc_md282} +Adds an element to a list stored in the database under the specified key. This function appends values to an existing list or creates a new list if it doesn\textquotesingle{}t exist. It\textquotesingle{}s particularly useful for logging, event tracking, or maintaining collections of data that grow over time.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_add_autotoc_md283}{}\doxysubsection{\texorpdfstring{Syntax}{Syntax}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_add_autotoc_md283} + +\begin{DoxyCode}{0} +\DoxyCodeLine{[\_key,\ \_data]\ call\ dragonfly\_db\_fnc\_listAdd} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_add_autotoc_md284}{}\doxysubsection{\texorpdfstring{Parameters}{Parameters}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_add_autotoc_md284} +\tabulinesep=1mm +\begin{longtabu}spread 0pt [c]{*{4}{|X[-1]}|} +\hline +\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Parameter }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Type }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Description }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Default }\\\cline{1-4} +\endfirsthead +\hline +\endfoot +\hline +\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Parameter }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Type }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Description }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Default }\\\cline{1-4} +\endhead +{\ttfamily \+\_\+key} &String &Name of the list to add the element to &"{}"{} \\\cline{1-4} +{\ttfamily \+\_\+data} &Array, String, Number, or Boolean &The value to insert into the list &\mbox{[}\mbox{]} \\\cline{1-4} +\end{longtabu} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_add_autotoc_md285}{}\doxysubsection{\texorpdfstring{Return Value}{Return Value}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_add_autotoc_md285} +None. The operation runs synchronously to add the element to the list.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_add_autotoc_md286}{}\doxysubsection{\texorpdfstring{Examples}{Examples}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_add_autotoc_md286} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_add_autotoc_md287}{}\doxysubsubsection{\texorpdfstring{Add an event log entry\+:}{Add an event log entry\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_add_autotoc_md287} + +\begin{DoxyCode}{0} +\DoxyCodeLine{["{}events"{},\ ["{}Server\ state\ saved\ to\ DB\ "{}\ +\ systemTimeUTC]]\ call\ dragonfly\_db\_fnc\_listAdd;} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_add_autotoc_md288}{}\doxysubsubsection{\texorpdfstring{Add a player message\+:}{Add a player message\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_add_autotoc_md288} + +\begin{DoxyCode}{0} +\DoxyCodeLine{["{}messages"{},\ [name\ player\ +\ "{}:\ "{}\ +\ \_messageText]]\ call\ dragonfly\_db\_fnc\_listAdd;} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_add_autotoc_md289}{}\doxysubsubsection{\texorpdfstring{Add data from a client\+:}{Add data from a client\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_add_autotoc_md289} + +\begin{DoxyCode}{0} +\DoxyCodeLine{["{}playerActions"{},\ [getPlayerUID\ player,\ name\ player,\ "{}logged\ in"{}]]\ remoteExecCall\ ["{}dragonfly\_db\_fnc\_listAdd"{},\ 2,\ false];} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_add_autotoc_md290}{}\doxysubsection{\texorpdfstring{Notes}{Notes}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_add_autotoc_md290} + +\begin{DoxyItemize} +\item Elements are added to the end of the list in the order they are inserted +\item If the list doesn\textquotesingle{}t exist, it will be created automatically +\item Both the key and data parameters are required and validated +\item Lists can store various data types (arrays, strings, numbers, or booleans) +\item Useful for maintaining a history of events, logs, or sequential data +\item The operation is executed immediately and synchronously +\item New elements are always added to the end of the list +\item All operations are logged for debugging purposes +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_add_autotoc_md291}{}\doxysubsection{\texorpdfstring{Related Functions}{Related Functions}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_add_autotoc_md291} + +\begin{DoxyItemize} +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+list\+Get}\+: Retrieves a specific element from a list +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+list\+Load}\+: Retrieves a range of elements from a list +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+list\+Set}\+: Replaces a specific element in a list +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+list\+Remove}\+: Removes a specific element from a list +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+scheduler}\+: Processes the callback from the database extension +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2list_2list_add_autotoc_md292}{}\doxysubsection{\texorpdfstring{Links}{Links}}\label{md__g_1_2ids_2dragonfly_2docs_2list_2list_add_autotoc_md292} +\doxysectlink{md__g_1_2ids_2dragonfly_2docs_2list_2list_add}{List Add}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2list_2list_get}{List Get}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2list_2list_load}{List Load}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2list_2list_remove}{List Remove}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2list_2list_set}{List Set}{0} \ No newline at end of file diff --git a/api/latex/da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.tex b/api/latex/da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.tex new file mode 100644 index 0000000..799ad69 --- /dev/null +++ b/api/latex/da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk.tex @@ -0,0 +1,67 @@ +\chapter{hash\+Set\+Bulk} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk}{}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk}\index{hashSetBulk@{hashSetBulk}} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk_autotoc_md233}{}\doxysubsection{\texorpdfstring{autotoc\+\_\+md233}{autotoc\+\_\+md233}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk_autotoc_md233} +title\+: Arma\+Dragonfly\+Client -\/ Hash Set Bulk icon\+: mdi\+:file-\/text-\/outline \hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk_autotoc_md234}{}\doxysubsection{\texorpdfstring{excerpt\+: Set multiple fields in the current client\textquotesingle{}s hash table in Dragonfly\+Client.}{excerpt\+: Set multiple fields in the current client\textquotesingle{}s hash table in Dragonfly\+Client.}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk_autotoc_md234} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk_autotoc_md235}{}\doxysection{\texorpdfstring{dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Set\+Bulk}{dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Set\+Bulk}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk_autotoc_md235} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk_autotoc_md236}{}\doxysubsection{\texorpdfstring{Description}{Description}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk_autotoc_md236} +Sets multiple field-\/value pairs in the hash table associated with the current client/player in a single operation. This function automatically determines the appropriate hash ID based on the caller\textquotesingle{}s identity, making it more convenient than {\ttfamily hash\+Set\+Id\+Bulk} which requires manually specifying an ID. It allows efficiently storing multiple related fields at once, reducing the number of separate database calls required.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk_autotoc_md237}{}\doxysubsection{\texorpdfstring{Syntax}{Syntax}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk_autotoc_md237} + +\begin{DoxyCode}{0} +\DoxyCodeLine{[\_data]\ call\ dragonfly\_db\_fnc\_hashSetBulk} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk_autotoc_md238}{}\doxysubsection{\texorpdfstring{Parameters}{Parameters}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk_autotoc_md238} +\tabulinesep=1mm +\begin{longtabu}spread 0pt [c]{*{4}{|X[-1]}|} +\hline +\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Parameter }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Type }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Description }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Default }\\\cline{1-4} +\endfirsthead +\hline +\endfoot +\hline +\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Parameter }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Type }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Description }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Default }\\\cline{1-4} +\endhead +{\ttfamily \+\_\+data} &Array &Array of alternating field names and values to store &\mbox{[}\mbox{]} \\\cline{1-4} +\end{longtabu} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk_autotoc_md239}{}\doxysubsection{\texorpdfstring{Return Value}{Return Value}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk_autotoc_md239} +None. The operation runs synchronously to store all the data.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk_autotoc_md240}{}\doxysubsection{\texorpdfstring{Examples}{Examples}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk_autotoc_md240} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk_autotoc_md241}{}\doxysubsubsection{\texorpdfstring{Store player loadout and position\+:}{Store player loadout and position\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk_autotoc_md241} + +\begin{DoxyCode}{0} +\DoxyCodeLine{[["{}loadout"{},\ [getUnitLoadout\ player],\ "{}position"{},\ [getPosASLVisual\ player]]]\ call\ dragonfly\_db\_fnc\_hashSetBulk;} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk_autotoc_md242}{}\doxysubsubsection{\texorpdfstring{Store multiple player settings\+:}{Store multiple player settings\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk_autotoc_md242} + +\begin{DoxyCode}{0} +\DoxyCodeLine{[["{}difficulty"{},\ ["{}regular"{}],\ "{}respawn"{},\ [true],\ "{}tickets"{},\ [500]]]\ call\ dragonfly\_db\_fnc\_hashSetBulk;} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk_autotoc_md243}{}\doxysubsubsection{\texorpdfstring{Store player data from a client\+:}{Store player data from a client\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk_autotoc_md243} + +\begin{DoxyCode}{0} +\DoxyCodeLine{[["{}name"{},\ [name\ player],\ "{}uid"{},\ [getPlayerUID\ player],\ "{}score"{},\ [score\ player]]]\ remoteExecCall\ ["{}dragonfly\_db\_fnc\_hashSetBulk"{},\ 2,\ false];} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk_autotoc_md244}{}\doxysubsection{\texorpdfstring{Notes}{Notes}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk_autotoc_md244} + +\begin{DoxyItemize} +\item The data array must be structured as alternating field names and values\+: {\ttfamily \mbox{[}field1, value1, field2, value2, ...\mbox{]}} +\item Each field name must be a string +\item Values can be arrays, strings, numbers, or booleans +\item All field-\/value pairs are stored in a single database operation +\item If any of the fields already exist, their values will be overwritten +\item This function automatically determines which hash table to use based on the caller\textquotesingle{}s identity +\item Use {\ttfamily hash\+Set\+Id\+Bulk} when you need to specify a particular hash table by ID +\item More efficient than multiple individual {\ttfamily hash\+Set} calls when setting several fields +\item The operation is executed immediately and synchronously +\item All operations are logged for debugging purposes +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk_autotoc_md245}{}\doxysubsection{\texorpdfstring{Related Functions}{Related Functions}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk_autotoc_md245} + +\begin{DoxyItemize} +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Set}\+: Sets a single field value in the current client\textquotesingle{}s hash table +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Set\+Id\+Bulk}\+: Sets multiple field-\/value pairs in a specific hash table (when you need to specify the ID) +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Get\+All}\+: Retrieves all fields from the current client\textquotesingle{}s hash table +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Get}\+: Retrieves a specific field value from the current client\textquotesingle{}s hash table +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk_autotoc_md246}{}\doxysubsection{\texorpdfstring{Links}{Links}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk_autotoc_md246} +\doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get}{Hash Get}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all}{Hash Get All}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id}{Hash Get All ID}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id}{Hash Get ID}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set}{Hash Set}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk}{Hash Set Bulk}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id}{Hash Set ID}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk}{Hash Set ID Bulk}{0} \ No newline at end of file diff --git a/api/latex/dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.tex b/api/latex/dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.tex new file mode 100644 index 0000000..4aab110 --- /dev/null +++ b/api/latex/dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init.tex @@ -0,0 +1,29 @@ +\chapter{init} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2init}{}\label{md__g_1_2ids_2dragonfly_2docs_2core_2init}\index{init@{init}} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2init_autotoc_md95}{}\doxysubsection{\texorpdfstring{autotoc\+\_\+md95}{autotoc\+\_\+md95}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2init_autotoc_md95} +title\+: Arma\+Dragonfly\+Client -\/ Initialization icon\+: mdi\+:file-\/text-\/outline \hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2init_autotoc_md96}{}\doxysubsection{\texorpdfstring{excerpt\+: Initial Extension settings.}{excerpt\+: Initial Extension settings.}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2init_autotoc_md96} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2init_autotoc_md97}{}\doxysection{\texorpdfstring{dragonfly\+\_\+db\+\_\+fnc\+\_\+init}{dragonfly\+\_\+db\+\_\+fnc\+\_\+init}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2init_autotoc_md97} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2init_autotoc_md98}{}\doxysubsection{\texorpdfstring{Description}{Description}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2init_autotoc_md98} +Initializes the Arma\+Dragonfly\+Client extension and sets up the initial settings. This function loads the extension, checks its version, sets the buffer size, and logs the initialization status. It is automatically called during mission startup.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2init_autotoc_md99}{}\doxysubsection{\texorpdfstring{Syntax}{Syntax}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2init_autotoc_md99} + +\begin{DoxyCode}{0} +\DoxyCodeLine{//\ This\ function\ is\ automatically\ called\ during\ initialization\ and\ doesn't\ need\ to\ be\ called\ directly} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2init_autotoc_md100}{}\doxysubsection{\texorpdfstring{Parameters}{Parameters}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2init_autotoc_md100} +None. This function does not require any parameters.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2init_autotoc_md101}{}\doxysubsection{\texorpdfstring{Return Value}{Return Value}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2init_autotoc_md101} +None. The function sets up internal variables and logs initialization information.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2init_autotoc_md102}{}\doxysubsection{\texorpdfstring{Examples}{Examples}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2init_autotoc_md102} +This function is automatically executed during framework initialization and doesn\textquotesingle{}t need to be called manually.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2init_autotoc_md103}{}\doxysubsection{\texorpdfstring{Notes}{Notes}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2init_autotoc_md103} + +\begin{DoxyItemize} +\item Sets the global buffer size to 10240 bytes (10KB) +\item Logs the DLL version number for reference +\item Confirms successful loading of all functions +\item Outputs initialization status to the RPT logs +\item This is one of the first functions called when the framework loads +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2init_autotoc_md104}{}\doxysubsection{\texorpdfstring{Related Functions}{Related Functions}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2init_autotoc_md104} + +\begin{DoxyItemize} +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+save}\+: Saves database data to disk +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2init_autotoc_md105}{}\doxysubsection{\texorpdfstring{Links}{Links}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2init_autotoc_md105} +\doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2add_task}{Add Task}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2handler}{Handler}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2init}{Init}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name}{Print Addon Name}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2process_queue}{Process Queue}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2scheduler}{Scheduler}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2test}{Test}{0} \ No newline at end of file diff --git a/api/latex/dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.tex b/api/latex/dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.tex new file mode 100644 index 0000000..f8b6741 --- /dev/null +++ b/api/latex/dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task.tex @@ -0,0 +1,68 @@ +\chapter{add\+Task} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2add_task}{}\label{md__g_1_2ids_2dragonfly_2docs_2core_2add_task}\index{addTask@{addTask}} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2add_task_autotoc_md67}{}\doxysubsection{\texorpdfstring{autotoc\+\_\+md67}{autotoc\+\_\+md67}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2add_task_autotoc_md67} +title\+: Arma\+Dragonfly\+Client -\/ Add Task icon\+: mdi\+:file-\/text-\/outline \hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2add_task_autotoc_md68}{}\doxysubsection{\texorpdfstring{excerpt\+: Add task to queue.}{excerpt\+: Add task to queue.}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2add_task_autotoc_md68} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2add_task_autotoc_md69}{}\doxysection{\texorpdfstring{dragonfly\+\_\+db\+\_\+fnc\+\_\+add\+Task}{dragonfly\+\_\+db\+\_\+fnc\+\_\+add\+Task}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2add_task_autotoc_md69} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2add_task_autotoc_md70}{}\doxysubsection{\texorpdfstring{Description}{Description}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2add_task_autotoc_md70} +Adds a task to the database operation queue. This function is used to schedule database operations that can be processed sequentially, providing a way to manage multiple database requests in an organized manner.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2add_task_autotoc_md71}{}\doxysubsection{\texorpdfstring{Syntax}{Syntax}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2add_task_autotoc_md71} + +\begin{DoxyCode}{0} +\DoxyCodeLine{[\_taskType,\ \_key,\ \_keyField,\ \_index,\ \_value,\ \_function,\ \_call,\ \_netId]\ call\ dragonfly\_db\_fnc\_addTask} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2add_task_autotoc_md72}{}\doxysubsection{\texorpdfstring{Parameters}{Parameters}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2add_task_autotoc_md72} +\tabulinesep=1mm +\begin{longtabu}spread 0pt [c]{*{4}{|X[-1]}|} +\hline +\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Parameter }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Type }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Description }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Default }\\\cline{1-4} +\endfirsthead +\hline +\endfoot +\hline +\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Parameter }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Type }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Description }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Default }\\\cline{1-4} +\endhead +{\ttfamily \+\_\+task\+Type} &String &Type of operation to perform (e.\+g., "{}hgetall"{}) &"{}"{} \\\cline{1-4} +{\ttfamily \+\_\+key} &String &Name of the stored key &"{}"{} \\\cline{1-4} +{\ttfamily \+\_\+key\+Field} &String &Field name for hash operations &"{}"{} \\\cline{1-4} +{\ttfamily \+\_\+index} &Number &Index for list operations &-\/1 \\\cline{1-4} +{\ttfamily \+\_\+value} &Array, String, Number, or Boolean &Value to store (for set operations) &\mbox{[}\mbox{]} \\\cline{1-4} +{\ttfamily \+\_\+function} &String &Name of function to call with the result &"{}"{} \\\cline{1-4} +{\ttfamily \+\_\+call} &Boolean &Whether to call the function directly (true) or spawn (false) &false \\\cline{1-4} +{\ttfamily \+\_\+net\+Id} &String &Net\+ID of the target to receive the result &"{}"{} \\\cline{1-4} +\end{longtabu} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2add_task_autotoc_md73}{}\doxysubsection{\texorpdfstring{Return Value}{Return Value}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2add_task_autotoc_md73} +None. The task is added to the queue and processed asynchronously.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2add_task_autotoc_md74}{}\doxysubsection{\texorpdfstring{Examples}{Examples}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2add_task_autotoc_md74} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2add_task_autotoc_md75}{}\doxysubsubsection{\texorpdfstring{Add a hash table retrieval task\+:}{Add a hash table retrieval task\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2add_task_autotoc_md75} + +\begin{DoxyCode}{0} +\DoxyCodeLine{["{}hgetall"{},\ "{}"{},\ "{}"{},\ -\/1,\ [],\ "{}dragonfly\_db\_fnc\_test"{}]\ call\ dragonfly\_db\_fnc\_addTask;} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2add_task_autotoc_md76}{}\doxysubsubsection{\texorpdfstring{Add a player-\/specific task that returns data to a specific client\+:}{Add a player-\/specific task that returns data to a specific client\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2add_task_autotoc_md76} + +\begin{DoxyCode}{0} +\DoxyCodeLine{["{}hgetallid"{},\ getPlayerUID\ player,\ "{}"{},\ -\/1,\ [],\ "{}dragonfly\_db\_fnc\_test"{},\ false,\ netId\ player]\ remoteExecCall\ ["{}dragonfly\_db\_fnc\_addTask"{},\ 2,\ false];} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2add_task_autotoc_md77}{}\doxysubsubsection{\texorpdfstring{Add a list operation task\+:}{Add a list operation task\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2add_task_autotoc_md77} + +\begin{DoxyCode}{0} +\DoxyCodeLine{["{}listadd"{},\ "{}playerMessages"{},\ "{}"{},\ -\/1,\ ["{}New\ message\ content"{}],\ "{}"{}]\ call\ dragonfly\_db\_fnc\_addTask;} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2add_task_autotoc_md78}{}\doxysubsection{\texorpdfstring{Notes}{Notes}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2add_task_autotoc_md78} + +\begin{DoxyItemize} +\item Tasks are processed in the order they are added to the queue +\item If the queue is not currently being processed, this function will start the processing +\item The task type determines which database operation will be performed +\item This function is particularly useful for scheduling multiple related operations +\item All operations performed through the task queue are logged for debugging +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2add_task_autotoc_md79}{}\doxysubsection{\texorpdfstring{Related Functions}{Related Functions}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2add_task_autotoc_md79} + +\begin{DoxyItemize} +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+process\+Queue}\+: Processes the pending tasks in the queue +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+handler}\+: Handles the results of completed database operations +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+scheduler}\+: Manages callback responses from the database +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2core_2add_task_autotoc_md80}{}\doxysubsection{\texorpdfstring{Links}{Links}}\label{md__g_1_2ids_2dragonfly_2docs_2core_2add_task_autotoc_md80} +\doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2add_task}{Add Task}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2handler}{Handler}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2init}{Init}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name}{Print Addon Name}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2process_queue}{Process Queue}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2scheduler}{Scheduler}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2test}{Test}{0} \ No newline at end of file diff --git a/api/latex/de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.tex b/api/latex/de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.tex new file mode 100644 index 0000000..c5397fe --- /dev/null +++ b/api/latex/de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk.tex @@ -0,0 +1,68 @@ +\chapter{hash\+Set\+Id\+Bulk} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk}{}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk}\index{hashSetIdBulk@{hashSetIdBulk}} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk_autotoc_md261}{}\doxysubsection{\texorpdfstring{autotoc\+\_\+md261}{autotoc\+\_\+md261}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk_autotoc_md261} +title\+: Arma\+Dragonfly\+Client -\/ Hash Set ID Bulk icon\+: mdi\+:file-\/text-\/outline \hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk_autotoc_md262}{}\doxysubsection{\texorpdfstring{excerpt\+: Set the specified fields to their respective values in the hash stored at key from Dragonfly\+Client.}{excerpt\+: Set the specified fields to their respective values in the hash stored at key from Dragonfly\+Client.}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk_autotoc_md262} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk_autotoc_md263}{}\doxysection{\texorpdfstring{dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Set\+Id\+Bulk}{dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Set\+Id\+Bulk}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk_autotoc_md263} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk_autotoc_md264}{}\doxysubsection{\texorpdfstring{Description}{Description}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk_autotoc_md264} +Sets multiple field-\/value pairs in a specific hash table identified by its key in a single operation. This function allows efficiently storing multiple related fields at once for a specific identifier, reducing the number of separate database calls required. It\textquotesingle{}s ideal for saving a collection of player-\/specific or entity-\/specific data.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk_autotoc_md265}{}\doxysubsection{\texorpdfstring{Syntax}{Syntax}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk_autotoc_md265} + +\begin{DoxyCode}{0} +\DoxyCodeLine{[\_data]\ call\ dragonfly\_db\_fnc\_hashSetIdBulk} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk_autotoc_md266}{}\doxysubsection{\texorpdfstring{Parameters}{Parameters}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk_autotoc_md266} +\tabulinesep=1mm +\begin{longtabu}spread 0pt [c]{*{4}{|X[-1]}|} +\hline +\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Parameter }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Type }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Description }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Default }\\\cline{1-4} +\endfirsthead +\hline +\endfoot +\hline +\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Parameter }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Type }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Description }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Default }\\\cline{1-4} +\endhead +{\ttfamily \+\_\+data} &Array &Array with key followed by alternating field names and values &\mbox{[}\mbox{]} \\\cline{1-4} +\end{longtabu} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk_autotoc_md267}{}\doxysubsection{\texorpdfstring{Return Value}{Return Value}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk_autotoc_md267} +None. The operation runs synchronously to store all the data.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk_autotoc_md268}{}\doxysubsection{\texorpdfstring{Examples}{Examples}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk_autotoc_md268} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk_autotoc_md269}{}\doxysubsubsection{\texorpdfstring{Store player loadout and position\+:}{Store player loadout and position\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk_autotoc_md269} + +\begin{DoxyCode}{0} +\DoxyCodeLine{[[getPlayerUID\ player,\ "{}loadout"{},\ [getUnitLoadout\ player],\ "{}position"{},\ [getPosASLVisual\ player]]]\ call\ dragonfly\_db\_fnc\_hashSetIdBulk;} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk_autotoc_md270}{}\doxysubsubsection{\texorpdfstring{Store multiple vehicle properties\+:}{Store multiple vehicle properties\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk_autotoc_md270} + +\begin{DoxyCode}{0} +\DoxyCodeLine{[["{}vehicle\_123"{},\ "{}fuel"{},\ [0.75],\ "{}damage"{},\ [0.2],\ "{}crew"{},\ [["{}player1"{},\ "{}player2"{}]]]]\ call\ dragonfly\_db\_fnc\_hashSetIdBulk;} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk_autotoc_md271}{}\doxysubsubsection{\texorpdfstring{Store player data from a client\+:}{Store player data from a client\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk_autotoc_md271} + +\begin{DoxyCode}{0} +\DoxyCodeLine{[[getPlayerUID\ player,\ "{}stats"{},\ [score\ player],\ "{}inventory"{},\ [getAllGear\ player]]]\ remoteExecCall\ ["{}dragonfly\_db\_fnc\_hashSetIdBulk"{},\ 2,\ false];} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk_autotoc_md272}{}\doxysubsection{\texorpdfstring{Notes}{Notes}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk_autotoc_md272} + +\begin{DoxyItemize} +\item The data array must be structured with the key first, followed by alternating field names and values\+: {\ttfamily \mbox{[}key, field1, value1, field2, value2, ...\mbox{]}} +\item The key must be a string that identifies the specific hash table +\item Each field name must be a string +\item Values can be arrays, strings, numbers, or booleans +\item All field-\/value pairs are stored in a single database operation +\item If the hash table doesn\textquotesingle{}t exist, it will be created automatically +\item If any of the fields already exist in the hash table, their values will be overwritten +\item More efficient than multiple individual {\ttfamily hash\+Set\+Id} calls when setting several fields +\item Player UIDs are commonly used as keys to store player-\/specific data +\item The operation is executed immediately and synchronously +\item All operations are logged for debugging purposes +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk_autotoc_md273}{}\doxysubsection{\texorpdfstring{Related Functions}{Related Functions}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk_autotoc_md273} + +\begin{DoxyItemize} +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Set\+Id}\+: Sets a single field value in a specific hash table +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Set\+Bulk}\+: Sets multiple field-\/value pairs in the global hash table +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Get\+All\+Id}\+: Retrieves all fields from a specific hash table +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+hash\+Get\+Id}\+: Retrieves a specific field value from a specific hash table +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk_autotoc_md274}{}\doxysubsection{\texorpdfstring{Links}{Links}}\label{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk_autotoc_md274} +\doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get}{Hash Get}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all}{Hash Get All}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id}{Hash Get All ID}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id}{Hash Get ID}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set}{Hash Set}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk}{Hash Set Bulk}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id}{Hash Set ID}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk}{Hash Set ID Bulk}{0} \ No newline at end of file diff --git a/api/latex/df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.tex b/api/latex/df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.tex new file mode 100644 index 0000000..0465236 --- /dev/null +++ b/api/latex/df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete.tex @@ -0,0 +1,53 @@ +\chapter{delete} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2delete}{}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2delete}\index{delete@{delete}} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2delete_autotoc_md0}{}\doxysubsection{\texorpdfstring{autotoc\+\_\+md0}{autotoc\+\_\+md0}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2delete_autotoc_md0} +title\+: Arma\+Dragonfly\+Client -\/ Delete Key icon\+: mdi\+:file-\/text-\/outline \hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2delete_autotoc_md1}{}\doxysubsection{\texorpdfstring{excerpt\+: Remove the specified key from Dragonfly\+Client.}{excerpt\+: Remove the specified key from Dragonfly\+Client.}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2delete_autotoc_md1} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2delete_autotoc_md2}{}\doxysection{\texorpdfstring{dragonfly\+\_\+db\+\_\+fnc\+\_\+delete}{dragonfly\+\_\+db\+\_\+fnc\+\_\+delete}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2delete_autotoc_md2} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2delete_autotoc_md3}{}\doxysubsection{\texorpdfstring{Description}{Description}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2delete_autotoc_md3} +Removes the specified key from the database. This function deletes the key-\/value pair completely from storage.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2delete_autotoc_md4}{}\doxysubsection{\texorpdfstring{Syntax}{Syntax}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2delete_autotoc_md4} + +\begin{DoxyCode}{0} +\DoxyCodeLine{[\_key]\ call\ dragonfly\_db\_fnc\_delete} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2delete_autotoc_md5}{}\doxysubsection{\texorpdfstring{Parameters}{Parameters}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2delete_autotoc_md5} +\tabulinesep=1mm +\begin{longtabu}spread 0pt [c]{*{3}{|X[-1]}|} +\hline +\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Parameter }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Type }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Description }\\\cline{1-3} +\endfirsthead +\hline +\endfoot +\hline +\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Parameter }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Type }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Description }\\\cline{1-3} +\endhead +{\ttfamily \+\_\+key} &String &Name of the key to delete from the database \\\cline{1-3} +\end{longtabu} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2delete_autotoc_md6}{}\doxysubsection{\texorpdfstring{Return Value}{Return Value}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2delete_autotoc_md6} +None. The operation runs asynchronously.\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2delete_autotoc_md7}{}\doxysubsection{\texorpdfstring{Examples}{Examples}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2delete_autotoc_md7} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2delete_autotoc_md8}{}\doxysubsubsection{\texorpdfstring{Delete a key in singleplayer or on the server\+:}{Delete a key in singleplayer or on the server\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2delete_autotoc_md8} + +\begin{DoxyCode}{0} +\DoxyCodeLine{["{}playerData"{}]\ call\ dragonfly\_db\_fnc\_delete;} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2delete_autotoc_md9}{}\doxysubsubsection{\texorpdfstring{Delete a key on the server from a client\+:}{Delete a key on the server from a client\+:}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2delete_autotoc_md9} + +\begin{DoxyCode}{0} +\DoxyCodeLine{["{}playerData"{}]\ remoteExecCall\ ["{}dragonfly\_db\_fnc\_delete"{},\ 2,\ false];} + +\end{DoxyCode} +\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2delete_autotoc_md10}{}\doxysubsection{\texorpdfstring{Notes}{Notes}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2delete_autotoc_md10} + +\begin{DoxyItemize} +\item This operation is permanent and cannot be undone +\item If the key doesn\textquotesingle{}t exist, the operation will have no effect +\item This function only affects specific keys, not hash tables or lists +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2delete_autotoc_md11}{}\doxysubsection{\texorpdfstring{Related Functions}{Related Functions}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2delete_autotoc_md11} + +\begin{DoxyItemize} +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+get}\+: Retrieves a value by key +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+set}\+: Stores a value by key +\item {\ttfamily dragonfly\+\_\+db\+\_\+fnc\+\_\+scheduler}\+: Processes the callback response +\end{DoxyItemize}\hypertarget{md__g_1_2ids_2dragonfly_2docs_2basic_2delete_autotoc_md12}{}\doxysubsection{\texorpdfstring{Links}{Links}}\label{md__g_1_2ids_2dragonfly_2docs_2basic_2delete_autotoc_md12} +\doxysectlink{md__g_1_2ids_2dragonfly_2docs_2basic_2delete}{Delete Key}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2basic_2get}{Get Key}{0} \texorpdfstring{$\vert$}{|} \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2basic_2set}{Set Key}{0} \ No newline at end of file diff --git a/api/latex/dir_10eb6422e80bd721a9a7af022f58c68b.tex b/api/latex/dir_10eb6422e80bd721a9a7af022f58c68b.tex new file mode 100644 index 0000000..145a198 --- /dev/null +++ b/api/latex/dir_10eb6422e80bd721a9a7af022f58c68b.tex @@ -0,0 +1,32 @@ +\doxysection{G\+:/ids/dragonfly/docs/core Directory Reference} +\hypertarget{dir_10eb6422e80bd721a9a7af022f58c68b}{}\label{dir_10eb6422e80bd721a9a7af022f58c68b}\index{G:/ids/dragonfly/docs/core Directory Reference@{G:/ids/dragonfly/docs/core Directory Reference}} + + +\doxysubsection{Detailed Description} +This section contains documentation for the core functions of Arma\+Dragonfly\+Client that handle initialization, process management, and scheduling.\hypertarget{README.md_autotoc_md133}{}\doxysubsection{\texorpdfstring{Available Functions}{Available Functions}}\label{README.md_autotoc_md133} + +\begin{DoxyItemize} +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2add_task}{add\+Task}{0} -\/ Add a task to the scheduler +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2handler}{handler}{0} -\/ Handle callbacks from the extension +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2init}{init}{0} -\/ Initialize the database system +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name}{print\+Addon\+Name}{0} -\/ Print the addon name +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2process_queue}{process\+Queue}{0} -\/ Process queued database operations +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2scheduler}{scheduler}{0} -\/ Schedule database operations +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2test}{test}{0} -\/ Test the database connection +\end{DoxyItemize}\hypertarget{README.md_autotoc_md134}{}\doxysubsection{\texorpdfstring{Example Usage}{Example Usage}}\label{README.md_autotoc_md134} + +\begin{DoxyCode}{0} +\DoxyCodeLine{//\ Initialize\ the\ database} +\DoxyCodeLine{[]\ call\ dragonfly\_db\_fnc\_init;} +\DoxyCodeLine{} +\DoxyCodeLine{//\ Test\ the\ database\ connection} +\DoxyCodeLine{[]\ call\ dragonfly\_db\_fnc\_test;} + +\end{DoxyCode} +\hypertarget{README.md_autotoc_md135}{}\doxysubsection{\texorpdfstring{Related Categories}{Related Categories}}\label{README.md_autotoc_md135} + +\begin{DoxyItemize} +\item Basic Data Operations +\item Hash Operations +\item List Operations +\end{DoxyItemize} \ No newline at end of file diff --git a/api/latex/dir_1d1eabba2c636e67297dc8cee9bc9944.tex b/api/latex/dir_1d1eabba2c636e67297dc8cee9bc9944.tex new file mode 100644 index 0000000..969d6bc --- /dev/null +++ b/api/latex/dir_1d1eabba2c636e67297dc8cee9bc9944.tex @@ -0,0 +1,44 @@ +\doxysection{G\+:/ids/dragonfly/docs/hash Directory Reference} +\hypertarget{dir_1d1eabba2c636e67297dc8cee9bc9944}{}\label{dir_1d1eabba2c636e67297dc8cee9bc9944}\index{G:/ids/dragonfly/docs/hash Directory Reference@{G:/ids/dragonfly/docs/hash Directory Reference}} + + +\doxysubsection{Detailed Description} +This section contains documentation for the hash operations of Arma\+Dragonfly\+Client that allow for working with hash tables (key-\/value pairs within a namespace).\hypertarget{README.md_autotoc_md276}{}\doxysubsection{\texorpdfstring{Available Functions}{Available Functions}}\label{README.md_autotoc_md276} + +\begin{DoxyItemize} +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get}{hash\+Get}{0} -\/ Get a field from a hash +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all}{hash\+Get\+All}{0} -\/ Get all fields from a hash +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id}{hash\+Get\+All\+Id}{0} -\/ Get all fields from a hash for a specific ID +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id}{hash\+Get\+Id}{0} -\/ Get a field from a hash for a specific ID +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set}{hash\+Set}{0} -\/ Set a field in a hash +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk}{hash\+Set\+Bulk}{0} -\/ Set multiple fields in a hash in one operation +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id}{hash\+Set\+Id}{0} -\/ Set a field in a hash for a specific ID +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk}{hash\+Set\+Id\+Bulk}{0} -\/ Set multiple fields in a hash for a specific ID in one operation +\end{DoxyItemize}\hypertarget{README.md_autotoc_md277}{}\doxysubsection{\texorpdfstring{Example Usage}{Example Usage}}\label{README.md_autotoc_md277} + +\begin{DoxyCode}{0} +\DoxyCodeLine{//\ Context\ mode\ examples} +\DoxyCodeLine{["{}myField"{},\ [myValue]]\ call\ dragonfly\_db\_fnc\_hashSet;} +\DoxyCodeLine{["{}myField"{},\ "{}myFunction"{}]\ call\ dragonfly\_db\_fnc\_hashGet;} +\DoxyCodeLine{["{}myFunction"{}]\ call\ dragonfly\_db\_fnc\_hashGetAll;} +\DoxyCodeLine{} +\DoxyCodeLine{//\ Set\ multiple\ hash\ fields\ in\ one\ operation} +\DoxyCodeLine{[[} +\DoxyCodeLine{\ \ \ \ "{}loadout"{},\ [getUnitLoadout\ player],} +\DoxyCodeLine{\ \ \ \ "{}position"{},\ [getPosASL\ player],} +\DoxyCodeLine{\ \ \ \ "{}direction"{},\ [getDir\ player]} +\DoxyCodeLine{]]\ call\ dragonfly\_db\_fnc\_hashSetBulk;} +\DoxyCodeLine{} +\DoxyCodeLine{//\ ID-\/specific\ examples} +\DoxyCodeLine{["{}myHash"{},\ "{}myField"{},\ [myValue]]\ call\ dragonfly\_db\_fnc\_hashSetId;} +\DoxyCodeLine{["{}myHash"{},\ "{}myField"{},\ "{}myFunction"{}]\ call\ dragonfly\_db\_fnc\_hashGetId;} +\DoxyCodeLine{["{}myHash"{}]\ call\ dragonfly\_db\_fnc\_hashGetAllId;} + +\end{DoxyCode} +\hypertarget{README.md_autotoc_md278}{}\doxysubsection{\texorpdfstring{Related Categories}{Related Categories}}\label{README.md_autotoc_md278} + +\begin{DoxyItemize} +\item Core Functions +\item Basic Data Operations +\item List Operations +\end{DoxyItemize} \ No newline at end of file diff --git a/api/latex/dir_6b1f4820e2481aa5a1ea9b2275f196d9.tex b/api/latex/dir_6b1f4820e2481aa5a1ea9b2275f196d9.tex new file mode 100644 index 0000000..195e8da --- /dev/null +++ b/api/latex/dir_6b1f4820e2481aa5a1ea9b2275f196d9.tex @@ -0,0 +1,158 @@ +\doxysection{G\+:/ids/dragonfly/docs Directory Reference} +\hypertarget{dir_6b1f4820e2481aa5a1ea9b2275f196d9}{}\label{dir_6b1f4820e2481aa5a1ea9b2275f196d9}\index{G:/ids/dragonfly/docs Directory Reference@{G:/ids/dragonfly/docs Directory Reference}} +\doxysubsubsection*{Directories} +\begin{DoxyCompactItemize} +\item +directory \mbox{\hyperlink{dir_71f12be5768ca2af9c9f300d019944af}{basic}} +\item +directory \mbox{\hyperlink{dir_10eb6422e80bd721a9a7af022f58c68b}{core}} +\item +directory \mbox{\hyperlink{dir_1d1eabba2c636e67297dc8cee9bc9944}{hash}} +\item +directory \mbox{\hyperlink{dir_72c6efb7383bf0530aa073c1e7428252}{list}} +\end{DoxyCompactItemize} + + +\doxysubsection{Detailed Description} +This documentation provides details on all functions available in {\ttfamily Arma\+Dragonfly\+Client}. These functions allow you to interact with the in-\/memory database system for Arma 3.\hypertarget{README.md_autotoc_md345}{}\doxysubsection{\texorpdfstring{Function Categories}{Function Categories}}\label{README.md_autotoc_md345} +The functions are categorized by their purpose\+:\hypertarget{README.md_autotoc_md346}{}\doxysubsubsection{\texorpdfstring{Core Functions}{Core Functions}}\label{README.md_autotoc_md346} + +\begin{DoxyItemize} +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2init}{init}{0} -\/ Initialize the database system +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2handler}{handler}{0} -\/ Handle callbacks from the extension +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2process_queue}{process\+Queue}{0} -\/ Process queued database operations +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2scheduler}{scheduler}{0} -\/ Schedule database operations +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2add_task}{add\+Task}{0} -\/ Add a task to the scheduler +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name}{print\+Addon\+Name}{0} -\/ Print the addon name +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2core_2test}{test}{0} -\/ Test the database connection +\end{DoxyItemize}\hypertarget{README.md_autotoc_md347}{}\doxysubsubsection{\texorpdfstring{Basic Data Operations}{Basic Data Operations}}\label{README.md_autotoc_md347} + +\begin{DoxyItemize} +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2basic_2get}{get}{0} -\/ Get a value from the database +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2basic_2set}{set}{0} -\/ Set a value in the database +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2basic_2delete}{delete}{0} -\/ Delete a value from the database +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2basic_2save}{save}{0} -\/ Save the database to disk +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2basic_2fetch}{fetch}{0} -\/ Fetch a value from the database +\end{DoxyItemize}\hypertarget{README.md_autotoc_md348}{}\doxysubsubsection{\texorpdfstring{Hash Operations}{Hash Operations}}\label{README.md_autotoc_md348} + +\begin{DoxyItemize} +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get}{hash\+Get}{0} -\/ Get a field from a hash +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all}{hash\+Get\+All}{0} -\/ Get all fields from a hash +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id}{hash\+Get\+All\+Id}{0} -\/ Get all fields from a hash for a specific ID +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id}{hash\+Get\+Id}{0} -\/ Get a field from a hash for a specific ID +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set}{hash\+Set}{0} -\/ Set a field in a hash +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk}{hash\+Set\+Bulk}{0} -\/ Set multiple fields in a hash in one operation +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id}{hash\+Set\+Id}{0} -\/ Set a field in a hash for a specific ID +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk}{hash\+Set\+Id\+Bulk}{0} -\/ Set multiple fields in a hash for a specific ID in one operation +\end{DoxyItemize}\hypertarget{README.md_autotoc_md349}{}\doxysubsubsection{\texorpdfstring{List Operations}{List Operations}}\label{README.md_autotoc_md349} + +\begin{DoxyItemize} +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2list_2list_add}{list\+Add}{0} -\/ Add an item to a list +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2list_2list_get}{list\+Get}{0} -\/ Get items from a list +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2list_2list_load}{list\+Load}{0} -\/ Load a list from the database +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2list_2list_remove}{list\+Remove}{0} -\/ Remove an item from a list +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2list_2list_set}{list\+Set}{0} -\/ Set an item in a list +\end{DoxyItemize}\hypertarget{README.md_autotoc_md350}{}\doxysubsection{\texorpdfstring{Usage Examples}{Usage Examples}}\label{README.md_autotoc_md350} +\hypertarget{README.md_autotoc_md351}{}\doxysubsubsection{\texorpdfstring{Basic Usage}{Basic Usage}}\label{README.md_autotoc_md351} + +\begin{DoxyCode}{0} +\DoxyCodeLine{//\ Initialize\ the\ database} +\DoxyCodeLine{[]\ call\ dragonfly\_db\_fnc\_init;} +\DoxyCodeLine{} +\DoxyCodeLine{//\ Set\ a\ value} +\DoxyCodeLine{["{}myKey"{},\ [myValue]]\ call\ dragonfly\_db\_fnc\_set;} +\DoxyCodeLine{} +\DoxyCodeLine{//\ Get\ a\ value} +\DoxyCodeLine{["{}myKey"{},\ "{}myFunction"{}]\ call\ dragonfly\_db\_fnc\_get;} +\DoxyCodeLine{} +\DoxyCodeLine{//\ Delete\ a\ key} +\DoxyCodeLine{["{}myKey"{}]\ call\ dragonfly\_db\_fnc\_delete;} + +\end{DoxyCode} +\hypertarget{README.md_autotoc_md352}{}\doxysubsubsection{\texorpdfstring{Hash Operations}{Hash Operations}}\label{README.md_autotoc_md352} + +\begin{DoxyCode}{0} +\DoxyCodeLine{//\ Set\ a\ hash\ field\ (context\ mode)} +\DoxyCodeLine{["{}myField"{},\ [myValue]]\ call\ dragonfly\_db\_fnc\_hashSet;} +\DoxyCodeLine{} +\DoxyCodeLine{//\ Get\ a\ hash\ field\ (context\ mode)} +\DoxyCodeLine{["{}myField"{},\ "{}myFunction"{}]\ call\ dragonfly\_db\_fnc\_hashGet;} +\DoxyCodeLine{} +\DoxyCodeLine{//\ Get\ all\ hash\ fields\ (context\ mode)} +\DoxyCodeLine{["{}myFunction"{}]\ call\ dragonfly\_db\_fnc\_hashGetAll;} +\DoxyCodeLine{} +\DoxyCodeLine{//\ Set\ multiple\ hash\ fields\ (context\ mode)} +\DoxyCodeLine{[[} +\DoxyCodeLine{\ \ \ \ "{}loadout"{},\ [getUnitLoadout\ player],} +\DoxyCodeLine{\ \ \ \ "{}position"{},\ [getPosASL\ player],} +\DoxyCodeLine{\ \ \ \ "{}direction"{},\ [getDir\ player],} +\DoxyCodeLine{\ \ \ \ "{}stance"{},\ [stance\ player]} +\DoxyCodeLine{]]\ call\ dragonfly\_db\_fnc\_hashSetBulk;} +\DoxyCodeLine{} +\DoxyCodeLine{//\ Remove\ a\ hash\ field\ (context\ mode)} +\DoxyCodeLine{["{}myField"{}]\ call\ dragonfly\_db\_fnc\_hashRemove;} +\DoxyCodeLine{} +\DoxyCodeLine{//\ Delete\ a\ hash\ table\ (context\ mode)} +\DoxyCodeLine{[]\ call\ dragonfly\_db\_fnc\_hashDelete;} + +\end{DoxyCode} + +\begin{DoxyCode}{0} +\DoxyCodeLine{//\ Set\ a\ hash\ field\ for\ specific\ ID} +\DoxyCodeLine{["{}myHash"{},\ "{}myField"{},\ [myValue]]\ call\ dragonfly\_db\_fnc\_hashSetId;} +\DoxyCodeLine{} +\DoxyCodeLine{//\ Get\ a\ hash\ field\ for\ specific\ ID} +\DoxyCodeLine{["{}myHash"{},\ "{}myField"{},\ "{}myFunction"{}]\ call\ dragonfly\_db\_fnc\_hashGetId;} +\DoxyCodeLine{} +\DoxyCodeLine{//\ Get\ all\ hash\ fields\ for\ specific\ ID} +\DoxyCodeLine{["{}myHash"{}]\ call\ dragonfly\_db\_fnc\_hashGetAllId;} +\DoxyCodeLine{} +\DoxyCodeLine{//\ Set\ multiple\ hash\ fields\ for\ specific\ ID} +\DoxyCodeLine{[[} +\DoxyCodeLine{\ \ \ \ getPlayerUID\ player,} +\DoxyCodeLine{\ \ \ \ "{}loadout"{},\ [getUnitLoadout\ player],} +\DoxyCodeLine{\ \ \ \ "{}position"{},\ [getPosASL\ player],} +\DoxyCodeLine{\ \ \ \ "{}direction"{},\ [getDir\ player],} +\DoxyCodeLine{\ \ \ \ "{}stance"{},\ [stance\ player]} +\DoxyCodeLine{]]\ call\ dragonfly\_db\_fnc\_hashSetIdBulk;} +\DoxyCodeLine{} +\DoxyCodeLine{//\ Remove\ a\ hash\ field\ for\ specific\ ID} +\DoxyCodeLine{["{}myHash"{},\ "{}myField"{}]\ call\ dragonfly\_db\_fnc\_hashRemoveId;} +\DoxyCodeLine{} +\DoxyCodeLine{//\ Delete\ a\ hash\ table\ for\ specific\ ID} +\DoxyCodeLine{["{}myHash"{}]\ call\ dragonfly\_db\_fnc\_hashDeleteId;} + +\end{DoxyCode} +\hypertarget{README.md_autotoc_md353}{}\doxysubsubsection{\texorpdfstring{List Operations}{List Operations}}\label{README.md_autotoc_md353} + +\begin{DoxyCode}{0} +\DoxyCodeLine{//\ Add\ an\ item\ to\ a\ list} +\DoxyCodeLine{["{}myList"{},\ ["{}myItem"{}]]\ call\ dragonfly\_db\_fnc\_listAdd;} +\DoxyCodeLine{} +\DoxyCodeLine{//\ Set\ an\ item\ from\ a\ list} +\DoxyCodeLine{["{}myList"{},\ 0,\ [myNewValue]]\ call\ dragonfly\_db\_fnc\_listSet;} +\DoxyCodeLine{} +\DoxyCodeLine{//\ Get\ an\ item\ from\ a\ list} +\DoxyCodeLine{["{}myList"{},\ 0,\ "{}myFunction"{}]\ call\ dragonfly\_db\_fnc\_listGet;} +\DoxyCodeLine{} +\DoxyCodeLine{//\ Get\ items\ from\ a\ list} +\DoxyCodeLine{["{}myList"{},\ "{}myFunction"{}]\ call\ dragonfly\_db\_fnc\_listLoad;} +\DoxyCodeLine{} +\DoxyCodeLine{//\ Remove\ an\ item\ from\ a\ list} +\DoxyCodeLine{["{}myList"{},\ 0]\ call\ dragonfly\_db\_fnc\_listRemove;} +\DoxyCodeLine{} +\DoxyCodeLine{//\ Delete\ a\ list} +\DoxyCodeLine{["{}myList"{}]\ call\ dragonfly\_db\_fnc\_listDelete;} + +\end{DoxyCode} +\hypertarget{README.md_autotoc_md354}{}\doxysubsection{\texorpdfstring{Function Documentation Structure}{Function Documentation Structure}}\label{README.md_autotoc_md354} +Each function documentation includes\+: +\begin{DoxyItemize} +\item Function name and purpose +\item Parameters +\item Return value +\item Examples +\item Notes and warnings +\end{DoxyItemize}\hypertarget{README.md_autotoc_md355}{}\doxysubsection{\texorpdfstring{License}{License}}\label{README.md_autotoc_md355} +This work is licensed under the Creative Commons Attribution-\/\+Non\+Commercial-\/\+Share\+Alike 4.\+0 International License. To view a copy of this license, visit \href{https://creativecommons.org/licenses/by-nc-sa/4.0/}{\texttt{ https\+://creativecommons.\+org/licenses/by-\/nc-\/sa/4.\+0/}} or send a letter to Creative Commons, ~\newline +PO Box 1866, Mountain View, CA 94042 \ No newline at end of file diff --git a/api/latex/dir_71f12be5768ca2af9c9f300d019944af.tex b/api/latex/dir_71f12be5768ca2af9c9f300d019944af.tex new file mode 100644 index 0000000..72c13a1 --- /dev/null +++ b/api/latex/dir_71f12be5768ca2af9c9f300d019944af.tex @@ -0,0 +1,36 @@ +\doxysection{G\+:/ids/dragonfly/docs/basic Directory Reference} +\hypertarget{dir_71f12be5768ca2af9c9f300d019944af}{}\label{dir_71f12be5768ca2af9c9f300d019944af}\index{G:/ids/dragonfly/docs/basic Directory Reference@{G:/ids/dragonfly/docs/basic Directory Reference}} + + +\doxysubsection{Detailed Description} +This section contains documentation for the basic data operations of Arma\+Dragonfly\+Client that allow for simple key-\/value storage and retrieval.\hypertarget{README.md_autotoc_md37}{}\doxysubsection{\texorpdfstring{Available Functions}{Available Functions}}\label{README.md_autotoc_md37} + +\begin{DoxyItemize} +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2basic_2delete}{delete}{0} -\/ Delete a value from the database +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2basic_2fetch}{fetch}{0} -\/ Fetch a value from the database +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2basic_2get}{get}{0} -\/ Get a value from the database +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2basic_2save}{save}{0} -\/ Save the database to disk +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2basic_2set}{set}{0} -\/ Set a value in the database +\end{DoxyItemize}\hypertarget{README.md_autotoc_md38}{}\doxysubsection{\texorpdfstring{Example Usage}{Example Usage}}\label{README.md_autotoc_md38} + +\begin{DoxyCode}{0} +\DoxyCodeLine{//\ Set\ a\ value} +\DoxyCodeLine{["{}myKey"{},\ [myValue]]\ call\ dragonfly\_db\_fnc\_set;} +\DoxyCodeLine{} +\DoxyCodeLine{//\ Get\ a\ value} +\DoxyCodeLine{["{}myKey"{},\ "{}myFunction"{}]\ call\ dragonfly\_db\_fnc\_get;} +\DoxyCodeLine{} +\DoxyCodeLine{//\ Delete\ a\ key} +\DoxyCodeLine{["{}myKey"{}]\ call\ dragonfly\_db\_fnc\_delete;} +\DoxyCodeLine{} +\DoxyCodeLine{//\ Save\ database\ to\ disk} +\DoxyCodeLine{[]\ call\ dragonfly\_db\_fnc\_save;} + +\end{DoxyCode} +\hypertarget{README.md_autotoc_md39}{}\doxysubsection{\texorpdfstring{Related Categories}{Related Categories}}\label{README.md_autotoc_md39} + +\begin{DoxyItemize} +\item Core Functions +\item Hash Operations +\item List Operations +\end{DoxyItemize} \ No newline at end of file diff --git a/api/latex/dir_72c6efb7383bf0530aa073c1e7428252.tex b/api/latex/dir_72c6efb7383bf0530aa073c1e7428252.tex new file mode 100644 index 0000000..8783af6 --- /dev/null +++ b/api/latex/dir_72c6efb7383bf0530aa073c1e7428252.tex @@ -0,0 +1,39 @@ +\doxysection{G\+:/ids/dragonfly/docs/list Directory Reference} +\hypertarget{dir_72c6efb7383bf0530aa073c1e7428252}{}\label{dir_72c6efb7383bf0530aa073c1e7428252}\index{G:/ids/dragonfly/docs/list Directory Reference@{G:/ids/dragonfly/docs/list Directory Reference}} + + +\doxysubsection{Detailed Description} +This section contains documentation for the list operations of Arma\+Dragonfly\+Client that allow for working with ordered collections of items.\hypertarget{README.md_autotoc_md341}{}\doxysubsection{\texorpdfstring{Available Functions}{Available Functions}}\label{README.md_autotoc_md341} + +\begin{DoxyItemize} +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2list_2list_add}{list\+Add}{0} -\/ Add an item to a list +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2list_2list_get}{list\+Get}{0} -\/ Get items from a list +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2list_2list_load}{list\+Load}{0} -\/ Load a list from the database +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2list_2list_remove}{list\+Remove}{0} -\/ Remove an item from a list +\item \doxysectlink{md__g_1_2ids_2dragonfly_2docs_2list_2list_set}{list\+Set}{0} -\/ Set an item in a list +\end{DoxyItemize}\hypertarget{README.md_autotoc_md342}{}\doxysubsection{\texorpdfstring{Example Usage}{Example Usage}}\label{README.md_autotoc_md342} + +\begin{DoxyCode}{0} +\DoxyCodeLine{//\ Add\ an\ item\ to\ a\ list} +\DoxyCodeLine{["{}myList"{},\ ["{}myItem"{}]]\ call\ dragonfly\_db\_fnc\_listAdd;} +\DoxyCodeLine{} +\DoxyCodeLine{//\ Set\ an\ item\ at\ a\ specific\ index} +\DoxyCodeLine{["{}myList"{},\ 0,\ [myNewValue]]\ call\ dragonfly\_db\_fnc\_listSet;} +\DoxyCodeLine{} +\DoxyCodeLine{//\ Get\ an\ item\ at\ a\ specific\ index} +\DoxyCodeLine{["{}myList"{},\ 0,\ "{}myFunction"{}]\ call\ dragonfly\_db\_fnc\_listGet;} +\DoxyCodeLine{} +\DoxyCodeLine{//\ Load\ all\ items\ from\ a\ list} +\DoxyCodeLine{["{}myList"{},\ "{}myFunction"{}]\ call\ dragonfly\_db\_fnc\_listLoad;} +\DoxyCodeLine{} +\DoxyCodeLine{//\ Remove\ an\ item\ at\ a\ specific\ index} +\DoxyCodeLine{["{}myList"{},\ 0]\ call\ dragonfly\_db\_fnc\_listRemove;} + +\end{DoxyCode} +\hypertarget{README.md_autotoc_md343}{}\doxysubsection{\texorpdfstring{Related Categories}{Related Categories}}\label{README.md_autotoc_md343} + +\begin{DoxyItemize} +\item Core Functions +\item Basic Data Operations +\item Hash Operations +\end{DoxyItemize} \ No newline at end of file diff --git a/api/latex/doxygen.sty b/api/latex/doxygen.sty new file mode 100644 index 0000000..66a07a5 --- /dev/null +++ b/api/latex/doxygen.sty @@ -0,0 +1,714 @@ +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{doxygen} + +% Packages used by this style file +\RequirePackage{alltt} +%%\RequirePackage{array} %% moved to refman.tex due to workaround for LaTex 2019 version and unmaintained tabu package +\RequirePackage{calc} +\RequirePackage{float} +%%\RequirePackage{ifthen} %% moved to refman.tex due to workaround for LaTex 2019 version and unmaintained tabu package +\RequirePackage{verbatim} +\RequirePackage[table]{xcolor} +\RequirePackage{longtable_doxygen} +\RequirePackage{tabu_doxygen} +\RequirePackage{fancyvrb} +\RequirePackage{tabularx} +\RequirePackage{multicol} +\RequirePackage{multirow} +\RequirePackage{hanging} +\RequirePackage{ifpdf} +\RequirePackage{adjustbox} +\RequirePackage{amssymb} +\RequirePackage{stackengine} +\RequirePackage{enumitem} +\RequirePackage{alphalph} +\RequirePackage[normalem]{ulem} % for strikeout, but don't modify emphasis + +%---------- Internal commands used in this style file ---------------- + +\newcommand{\ensurespace}[1]{% + \begingroup% + \setlength{\dimen@}{#1}% + \vskip\z@\@plus\dimen@% + \penalty -100\vskip\z@\@plus -\dimen@% + \vskip\dimen@% + \penalty 9999% + \vskip -\dimen@% + \vskip\z@skip% hide the previous |\vskip| from |\addvspace| + \endgroup% +} + +\newcommand{\DoxyHorRuler}[1]{% + \setlength{\parskip}{0ex plus 0ex minus 0ex}% + \ifthenelse{#1=0}% + {% + \hrule% + }% + {% + \hrulefilll% + }% +} +\newcommand{\DoxyLabelFont}{} +\newcommand{\entrylabel}[1]{% + {% + \parbox[b]{\labelwidth-4pt}{% + \makebox[0pt][l]{\DoxyLabelFont#1}% + \vspace{1.5\baselineskip}% + }% + }% +} + +\newenvironment{DoxyDesc}[1]{% + \ensurespace{4\baselineskip}% + \begin{list}{}{% + \settowidth{\labelwidth}{20pt}% + %\setlength{\parsep}{0pt}% + \setlength{\itemsep}{0pt}% + \setlength{\leftmargin}{\labelwidth+\labelsep}% + \renewcommand{\makelabel}{\entrylabel}% + }% + \item[#1]% +}{% + \end{list}% +} + +\newsavebox{\xrefbox} +\newlength{\xreflength} +\newcommand{\xreflabel}[1]{% + \sbox{\xrefbox}{#1}% + \setlength{\xreflength}{\wd\xrefbox}% + \ifthenelse{\xreflength>\labelwidth}{% + \begin{minipage}{\textwidth}% + \setlength{\parindent}{0pt}% + \hangindent=15pt\bfseries #1\vspace{1.2\itemsep}% + \end{minipage}% + }{% + \parbox[b]{\labelwidth}{\makebox[0pt][l]{\textbf{#1}}}% + }% +} + +%---------- Commands used by doxygen LaTeX output generator ---------- + +% Used by
 ... 
+\newenvironment{DoxyPre}{% + \small% + \begin{alltt}% +}{% + \end{alltt}% + \normalsize% +} +% Necessary for redefining not defined characters, i.e. "Replacement Character" in tex output. +\newlength{\CodeWidthChar} +\newlength{\CodeHeightChar} +\settowidth{\CodeWidthChar}{?} +\settoheight{\CodeHeightChar}{?} +% Necessary for hanging indent +\newlength{\DoxyCodeWidth} + +\newcommand\DoxyCodeLine[1]{ + \ifthenelse{\equal{\detokenize{#1}}{}} + { + \vspace*{\baselineskip} + } + { + \hangpara{\DoxyCodeWidth}{1}{#1}\par + } +} + +\newcommand\NiceSpace{% + \discretionary{}{\kern\fontdimen2\font}{\kern\fontdimen2\font}% +} + +% Used by @code ... @endcode +\newenvironment{DoxyCode}[1]{% + \par% + \vspace{2pt}% + \scriptsize% + \normalfont\ttfamily% + \rightskip0pt plus 1fil% + \settowidth{\DoxyCodeWidth}{000000}% + \settowidth{\CodeWidthChar}{?}% + \settoheight{\CodeHeightChar}{?}% + \setlength{\parskip}{0ex plus 0ex minus 0ex}% + \ifthenelse{\equal{#1}{0}}% + {% + {\lccode`~32 \lowercase{\global\let~}\NiceSpace}\obeyspaces% + }% + {% + {\lccode`~32 \lowercase{\global\let~}}\obeyspaces% + }% + \vspace{2pt}% +}{% + \normalfont% + \normalsize% + \settowidth{\CodeWidthChar}{?}% + \settoheight{\CodeHeightChar}{?}% +} + +% Redefining not defined characters, i.e. "Replacement Character" in tex output. +\def\ucr{\adjustbox{width=\CodeWidthChar,height=\CodeHeightChar}{\stackinset{c}{}{c}{-.2pt}{% + \textcolor{white}{\sffamily\bfseries\small ?}}{% + \rotatebox{45}{$\blacksquare$}}}} + +% Used by @example, @include, @includelineno and @dontinclude +\newenvironment{DoxyCodeInclude}[1]{% + \DoxyCode{#1}% +}{% + \endDoxyCode% +} + +% Used by @verbatim ... @endverbatim +\newenvironment{DoxyVerb}{% + \par% + \footnotesize% + \verbatim% +}{% + \endverbatim% + \normalsize% +} + +% Used by @verbinclude +\newenvironment{DoxyVerbInclude}{% + \DoxyVerb% +}{% + \endDoxyVerb% +} + +% Used by numbered lists (using '-#' or
    ...
) +\setlistdepth{12} +\newlist{DoxyEnumerate}{enumerate}{12} +\setlist[DoxyEnumerate,1]{label=\arabic*.} +\setlist[DoxyEnumerate,2]{label=(\enumalphalphcnt*)} +\setlist[DoxyEnumerate,3]{label=\roman*.} +\setlist[DoxyEnumerate,4]{label=\enumAlphAlphcnt*.} +\setlist[DoxyEnumerate,5]{label=\arabic*.} +\setlist[DoxyEnumerate,6]{label=(\enumalphalphcnt*)} +\setlist[DoxyEnumerate,7]{label=\roman*.} +\setlist[DoxyEnumerate,8]{label=\enumAlphAlphcnt*.} +\setlist[DoxyEnumerate,9]{label=\arabic*.} +\setlist[DoxyEnumerate,10]{label=(\enumalphalphcnt*)} +\setlist[DoxyEnumerate,11]{label=\roman*.} +\setlist[DoxyEnumerate,12]{label=\enumAlphAlphcnt*.} + +% Used by bullet lists (using '-', @li, @arg, or
    ...
) +\setlistdepth{12} +\newlist{DoxyItemize}{itemize}{12} +\setlist[DoxyItemize]{label=\textperiodcentered} + +\setlist[DoxyItemize,1]{label=\textbullet} +\setlist[DoxyItemize,2]{label=\normalfont\bfseries \textendash} +\setlist[DoxyItemize,3]{label=\textasteriskcentered} +\setlist[DoxyItemize,4]{label=\textperiodcentered} + +% Used for check boxes +\newcommand{\DoxyUnchecked}{$\square$} +\newcommand{\DoxyChecked}{\rlap{\raisebox{0.3ex}{\hspace{0.4ex}\tiny \checkmark}}$\square$} + +% Used by description lists (using
...
) +\newenvironment{DoxyDescription}{% + \description% +}{% + \enddescription% +} + +% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc +% (only if caption is specified) +\newenvironment{DoxyImage}{% + \begin{figure}[H]% + \centering% +}{% + \end{figure}% +} + +% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc +% (only if no caption is specified) +\newenvironment{DoxyImageNoCaption}{% + \begin{center}% +}{% + \end{center}% +} + +% Used by @image +% (only if inline is specified) +\newenvironment{DoxyInlineImage}{% +}{% +} + +% Used by @attention +\newenvironment{DoxyAttention}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @important +\newenvironment{DoxyImportant}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @author and @authors +\newenvironment{DoxyAuthor}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @date +\newenvironment{DoxyDate}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @invariant +\newenvironment{DoxyInvariant}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @note +\newenvironment{DoxyNote}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @post +\newenvironment{DoxyPostcond}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @pre +\newenvironment{DoxyPrecond}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @copyright +\newenvironment{DoxyCopyright}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @remark +\newenvironment{DoxyRemark}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @return and @returns +\newenvironment{DoxyReturn}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @since +\newenvironment{DoxySince}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @see +\newenvironment{DoxySeeAlso}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @version +\newenvironment{DoxyVersion}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @warning +\newenvironment{DoxyWarning}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @par and @paragraph +\newenvironment{DoxyParagraph}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by parameter lists +\newenvironment{DoxyParams}[2][]{% + \tabulinesep=1mm% + \par% + \ifthenelse{\equal{#1}{}}% + {\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|}}% name + description + {\ifthenelse{\equal{#1}{1}}% + {\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|X[-1,l]|}}% in/out + name + desc + {\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|X[-1,l]|X[-1,l]|}}% in/out + type + name + desc + } + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used for fields of simple structs +\newenvironment{DoxyFields}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|X[-1,l]|}% + \multicolumn{3}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{3}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used for fields simple class style enums +\newenvironment{DoxyEnumFields}[2][]{% + \tabulinesep=1mm% + \par% + \ifthenelse{\equal{#1}{2}}% + {\begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}}% + {\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,r]|X[-1,l]|}}% with init value + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used for parameters within a detailed function description +\newenvironment{DoxyParamCaption}{% + \renewcommand{\item}[3][]{\\ \hspace*{2.0cm} ##1 {\em ##2}##3}% +}{% +} + +% Used by return value lists +\newenvironment{DoxyRetVals}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used by exception lists +\newenvironment{DoxyExceptions}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used by template parameter lists +\newenvironment{DoxyTemplParams}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used for member lists +\newenvironment{DoxyCompactItemize}{% + \begin{itemize}% + \setlength{\itemsep}{-3pt}% + \setlength{\parsep}{0pt}% + \setlength{\topsep}{0pt}% + \setlength{\partopsep}{0pt}% +}{% + \end{itemize}% +} + +% Used for member descriptions +\newenvironment{DoxyCompactList}{% + \begin{list}{}{% + \setlength{\leftmargin}{0.5cm}% + \setlength{\itemsep}{0pt}% + \setlength{\parsep}{0pt}% + \setlength{\topsep}{0pt}% + \renewcommand{\makelabel}{\hfill}% + }% +}{% + \end{list}% +} + +% Used for reference lists (@bug, @deprecated, @todo, etc.) +\newenvironment{DoxyRefList}{% + \begin{list}{}{% + \setlength{\labelwidth}{10pt}% + \setlength{\leftmargin}{\labelwidth}% + \addtolength{\leftmargin}{\labelsep}% + \renewcommand{\makelabel}{\xreflabel}% + }% +}{% + \end{list}% +} + +% Used by @bug, @deprecated, @todo, etc. +\newenvironment{DoxyRefDesc}[1]{% + \begin{list}{}{% + \renewcommand\makelabel[1]{\textbf{##1}}% + \settowidth\labelwidth{\makelabel{#1}}% + \setlength\leftmargin{\labelwidth+\labelsep}% + }% +}{% + \end{list}% +} + +% Used by parameter lists and simple sections +\newenvironment{Desc} +{\begin{list}{}{% + \settowidth{\labelwidth}{20pt}% + \setlength{\parsep}{0pt}% + \setlength{\itemsep}{0pt}% + \setlength{\leftmargin}{\labelwidth+\labelsep}% + \renewcommand{\makelabel}{\entrylabel}% + } +}{% + \end{list}% +} + +% Used by tables +\newcommand{\PBS}[1]{\let\temp=\\#1\let\\=\temp}% +\newenvironment{TabularC}[1]% +{\tabulinesep=1mm +\begin{longtabu*}spread 0pt [c]{*#1{|X[-1]}|}}% +{\end{longtabu*}\par}% + +\newenvironment{TabularNC}[1]% +{\begin{tabu}spread 0pt [l]{*#1{|X[-1]}|}}% +{\end{tabu}\par}% + +% Used for member group headers +\newenvironment{Indent}{% + \begin{list}{}{% + \setlength{\leftmargin}{0.5cm}% + }% + \item[]\ignorespaces% +}{% + \unskip% + \end{list}% +} + +% Used when hyperlinks are turned on +\newcommand{\doxylink}[2]{% + \mbox{\hyperlink{#1}{#2}}% +} + +% Used when hyperlinks are turned on +% Third argument is the SectionType, see the doxygen internal +% documentation for the values (relevant: Page ... Subsubsection). +\newcommand{\doxysectlink}[3]{% + \mbox{\hyperlink{#1}{#2}}% +} +% Used when hyperlinks are turned off +\newcommand{\doxyref}[3]{% + \textbf{#1} (\textnormal{#2}\,\pageref{#3})% +} + +% Used when hyperlinks are turned off +% Fourth argument is the SectionType, see the doxygen internal +% documentation for the values (relevant: Page ... Subsubsection). +\newcommand{\doxysectref}[4]{% + \textbf{#1} (\textnormal{#2}\,\pageref{#3})% +} + +% Used to link to a table when hyperlinks are turned on +\newcommand{\doxytablelink}[2]{% + \ref{#1}% +} + +% Used to link to a table when hyperlinks are turned off +\newcommand{\doxytableref}[3]{% + \ref{#3}% +} + +% Used by @addindex +\newcommand{\lcurly}{\{} +\newcommand{\rcurly}{\}} + +% Colors used for syntax highlighting +\definecolor{comment}{rgb}{0.5,0.0,0.0} +\definecolor{keyword}{rgb}{0.0,0.5,0.0} +\definecolor{keywordtype}{rgb}{0.38,0.25,0.125} +\definecolor{keywordflow}{rgb}{0.88,0.5,0.0} +\definecolor{preprocessor}{rgb}{0.5,0.38,0.125} +\definecolor{stringliteral}{rgb}{0.0,0.125,0.25} +\definecolor{charliteral}{rgb}{0.0,0.5,0.5} +\definecolor{xmlcdata}{rgb}{0.0,0.0,0.0} +\definecolor{vhdldigit}{rgb}{1.0,0.0,1.0} +\definecolor{vhdlkeyword}{rgb}{0.43,0.0,0.43} +\definecolor{vhdllogic}{rgb}{1.0,0.0,0.0} +\definecolor{vhdlchar}{rgb}{0.0,0.0,0.0} + +% Color used for table heading +\newcommand{\tableheadbgcolor}{lightgray}% + +% Version of hypertarget with correct landing location +\newcommand{\Hypertarget}[1]{\Hy@raisedlink{\hypertarget{#1}{}}} + +% possibility to have sections etc. be within the margins +% unfortunately had to copy part of book.cls and add \raggedright +\makeatletter +\newcounter{subsubsubsection}[subsubsection] +\newcounter{subsubsubsubsection}[subsubsubsection] +\newcounter{subsubsubsubsubsection}[subsubsubsubsection] +\newcounter{subsubsubsubsubsubsection}[subsubsubsubsubsection] +\renewcommand{\thesubsubsubsection}{\thesubsubsection.\arabic{subsubsubsection}} +\renewcommand{\thesubsubsubsubsection}{\thesubsubsubsection.\arabic{subsubsubsubsection}} +\renewcommand{\thesubsubsubsubsubsection}{\thesubsubsubsubsection.\arabic{subsubsubsubsubsection}} +\renewcommand{\thesubsubsubsubsubsubsection}{\thesubsubsubsubsubsection.\arabic{subsubsubsubsubsubsection}} +\newcommand{\subsubsubsectionmark}[1]{} +\newcommand{\subsubsubsubsectionmark}[1]{} +\newcommand{\subsubsubsubsubsectionmark}[1]{} +\newcommand{\subsubsubsubsubsubsectionmark}[1]{} +\def\toclevel@subsubsubsection{4} +\def\toclevel@subsubsubsubsection{5} +\def\toclevel@subsubsubsubsubsection{6} +\def\toclevel@subsubsubsubsubsubsection{7} +\def\toclevel@paragraph{8} +\def\toclevel@subparagraph{9} + +\newcommand\doxysection{\@startsection {section}{1}{\z@}% + {-3.5ex \@plus -1ex \@minus -.2ex}% + {2.3ex \@plus.2ex}% + {\raggedright\normalfont\Large\bfseries}} +\newcommand\doxysubsection{\@startsection{subsection}{2}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\large\bfseries}} +\newcommand\doxysubsubsection{\@startsection{subsubsection}{3}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\normalsize\bfseries}} +\newcommand\doxysubsubsubsection{\@startsection{subsubsubsection}{4}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\normalsize\bfseries}} +\newcommand\doxysubsubsubsubsection{\@startsection{subsubsubsubsection}{5}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\normalsize\bfseries}} +\newcommand\doxysubsubsubsubsubsection{\@startsection{subsubsubsubsubsection}{6}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\normalsize\bfseries}} +\newcommand\doxysubsubsubsubsubsubsection{\@startsection{subsubsubsubsubsubsection}{7}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\normalsize\bfseries}} +\newcommand\doxyparagraph{\@startsection{paragraph}{8}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\normalsize\bfseries}} +\newcommand\doxysubparagraph{\@startsection{subparagraph}{9}{\parindent}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\normalsize\bfseries}} + +\newcommand\l@subsubsubsection{\@dottedtocline{4}{10.0em}{7.8em}} +\newcommand\l@subsubsubsubsection{\@dottedtocline{5}{13.0em}{9.4em}} +\newcommand\l@subsubsubsubsubsection{\@dottedtocline{6}{15.0em}{11em}} +\newcommand\l@subsubsubsubsubsubsection{\@dottedtocline{7}{18.0em}{12.6em}} +\renewcommand\l@paragraph{\@dottedtocline{8}{21.0em}{14.2em}} +\renewcommand\l@subparagraph{\@dottedtocline{9}{24.0em}{15.8em}} +\makeatother +% the sectsty doesn't look to be maintained but gives, in our case, some warning like: +% LaTeX Warning: Command \underline has changed. +% Check if current package is valid. +% unfortunately had to copy the relevant part +\newcommand*{\doxypartfont} [1] + {\gdef\SS@partnumberfont{\SS@sectid{0}\SS@nopart\SS@makeulinepartchap#1} + \gdef\SS@parttitlefont{\SS@sectid{0}\SS@titlepart\SS@makeulinepartchap#1}} +\newcommand*{\doxychapterfont} [1] + {\gdef\SS@chapnumfont{\SS@sectid{1}\SS@nopart\SS@makeulinepartchap#1} + \gdef\SS@chaptitlefont{\SS@sectid{1}\SS@titlepart\SS@makeulinepartchap#1}} +\newcommand*{\doxysectionfont} [1] + {\gdef\SS@sectfont{\SS@sectid{2}\SS@rr\SS@makeulinesect#1}} +\newcommand*{\doxysubsectionfont} [1] + {\gdef\SS@subsectfont{\SS@sectid{3}\SS@rr\SS@makeulinesect#1}} +\newcommand*{\doxysubsubsectionfont} [1] + {\gdef\SS@subsubsectfont{\SS@sectid{4}\SS@rr\SS@makeulinesect#1}} +\newcommand*{\doxyparagraphfont} [1] + {\gdef\SS@parafont{\SS@sectid{5}\SS@rr\SS@makeulinesect#1}} +\newcommand*{\doxysubparagraphfont} [1] + {\gdef\SS@subparafont{\SS@sectid{6}\SS@rr\SS@makeulinesect#1}} +\newcommand*{\doxyminisecfont} [1] + {\gdef\SS@minisecfont{\SS@sectid{7}\SS@rr\SS@makeulinepartchap#1}} +\newcommand*{\doxyallsectionsfont} [1] {\doxypartfont{#1}% + \doxychapterfont{#1}% + \doxysectionfont{#1}% + \doxysubsectionfont{#1}% + \doxysubsubsectionfont{#1}% + \doxyparagraphfont{#1}% + \doxysubparagraphfont{#1}% + \doxyminisecfont{#1}}% +% Define caption that is also suitable in a table +% for usage with hyperlinks +\makeatletter +\def\doxyfigcaption{% +\H@refstepcounter{figure}% +\@dblarg{\@caption{figure}}} + +% for usage without hyperlinks +\def\doxyfigcaptionnolink{% +\refstepcounter{figure}% +\@dblarg{\@caption{figure}}} +\makeatother + +% Define alpha enumarative names for counters > 26 +\makeatletter +\def\enumalphalphcnt#1{\expandafter\@enumalphalphcnt\csname c@#1\endcsname} +\def\@enumalphalphcnt#1{\alphalph{#1}} +\def\enumAlphAlphcnt#1{\expandafter\@enumAlphAlphcnt\csname c@#1\endcsname} +\def\@enumAlphAlphcnt#1{\AlphAlph{#1}} +\makeatother +\AddEnumerateCounter{\enumalphalphcnt}{\@enumalphalphcnt}{aa} +\AddEnumerateCounter{\enumAlphAlphcnt}{\@enumAlphAlphcnt}{AA} diff --git a/api/latex/etoc_doxygen.sty b/api/latex/etoc_doxygen.sty new file mode 100644 index 0000000..5f7e127 --- /dev/null +++ b/api/latex/etoc_doxygen.sty @@ -0,0 +1,2178 @@ +%% +%% This is file etoc_doxygen.sty +%% +%% Apart from this header notice and the renaming from etoc to +%% etoc_doxygen (also in \ProvidesPackage) it is an identical +%% copy of +%% +%% etoc.sty +%% +%% at version 1.2b of 2023/07/01. +%% +%% This file has been provided to Doxygen team courtesy of the +%% author for benefit of users having a LaTeX installation not +%% yet providing version 1.2a or later of etoc, whose +%% deeplevels feature is required. +%% +%% The original source etoc.dtx (only of the latest version at +%% any given time) is available at +%% +%% https://ctan.org/pkg/etoc +%% +%% and contains the terms for copying and modification as well +%% as author contact information. +%% +%% In brief any modified versions of this file must be renamed +%% with new filenames distinct from etoc.sty. +%% +%% Package: etoc +%% Version: 1.2b +%% License: LPPL 1.3c +%% Copyright (C) 2012-2023 Jean-Francois B. +\NeedsTeXFormat{LaTeX2e}[2003/12/01] +\ProvidesPackage{etoc_doxygen}[2023/07/01 v1.2b Completely customisable TOCs (JFB)] +\newif\ifEtoc@oldLaTeX +\@ifl@t@r\fmtversion{2020/10/01} + {} + {\Etoc@oldLaTeXtrue + \PackageInfo{etoc}{Old LaTeX (\fmtversion) detected!\MessageBreak + Since 1.1a (2023/01/14), etoc prefers LaTeX at least\MessageBreak + as recent as 2020-10-01, for reasons of the .toc file,\MessageBreak + and used to require it (from 1.1a to 1.2).\MessageBreak + This etoc (1.2b) does not *require* it, but has not been\MessageBreak + tested thoroughly on old LaTeX (especially if document\MessageBreak + does not use hyperref) and retrofitting was done only\MessageBreak + on basis of author partial remembrances of old context.\MessageBreak + Reported}} +\RequirePackage{kvoptions} +\SetupKeyvalOptions{prefix=Etoc@} +\newif\ifEtoc@lof +\DeclareVoidOption{lof}{\Etoc@loftrue + \PackageInfo{etoc}{Experimental support for \string\locallistoffigures.\MessageBreak + Barely tested, use at own risk}% +} +\newif\ifEtoc@lot +\DeclareVoidOption{lot}{\Etoc@lottrue + \PackageInfo{etoc}{Experimental support for \string\locallistoftables.\MessageBreak + Barely tested, use at own risk}% +} +\@ifclassloaded{memoir}{ +\PackageInfo{etoc} + {As this is with memoir class, all `...totoc' options\MessageBreak + are set true by default. Reported} +\DeclareBoolOption[true]{maintoctotoc} +\DeclareBoolOption[true]{localtoctotoc} +\DeclareBoolOption[true]{localloftotoc} +\DeclareBoolOption[true]{locallottotoc} +}{ +\DeclareBoolOption[false]{maintoctotoc} +\DeclareBoolOption[false]{localtoctotoc} +\DeclareBoolOption[false]{localloftotoc} +\DeclareBoolOption[false]{locallottotoc} +} +\DeclareBoolOption[true]{ouroboros} +\DeclareBoolOption[false]{deeplevels} +\DeclareDefaultOption{\PackageWarning{etoc}{Option `\CurrentOption' is unknown.}} +\ProcessKeyvalOptions* +\DisableKeyvalOption[action=error,package=etoc]{etoc}{lof} +\DisableKeyvalOption[action=error,package=etoc]{etoc}{lot} +\DisableKeyvalOption[action=error,package=etoc]{etoc}{deeplevels} +\def\etocsetup#1{\setkeys{etoc}{#1}} +\def\etocifmaintoctotoc{\ifEtoc@maintoctotoc + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} +\def\etociflocaltoctotoc{\ifEtoc@localtoctotoc + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} +\def\etociflocalloftotoc{\ifEtoc@localloftotoc + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} +\def\etociflocallottotoc{\ifEtoc@locallottotoc + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} +\RequirePackage{multicol} +\def\etoc@{\etoc@} +\long\def\Etoc@gobtoetoc@ #1\etoc@{} +\newtoks\Etoc@toctoks +\def\Etoc@par{\par} +\def\etocinline{\def\Etoc@par{}} +\let\etocnopar\etocinline +\def\etocdisplay{\def\Etoc@par{\par}} +\let\Etoc@global\@empty +\def\etocglobaldefs{\let\Etoc@global\global\let\tof@global\global} +\def\etoclocaldefs {\let\Etoc@global\@empty\let\tof@global\@empty} +\newif\ifEtoc@numbered +\newif\ifEtoc@hyperref +\newif\ifEtoc@parskip +\newif\ifEtoc@tocwithid +\newif\ifEtoc@standardlines +\newif\ifEtoc@etocstyle +\newif\ifEtoc@classstyle +\newif\ifEtoc@keeporiginaltoc +\newif\ifEtoc@skipprefix +\newif\ifEtoc@isfirst +\newif\ifEtoc@localtoc +\newif\ifEtoc@skipthisone +\newif\ifEtoc@stoptoc +\newif\ifEtoc@notactive +\newif\ifEtoc@mustclosegroup +\newif\ifEtoc@isemptytoc +\newif\ifEtoc@checksemptiness +\def\etocchecksemptiness {\Etoc@checksemptinesstrue } +\def\etocdoesnotcheckemptiness {\Etoc@checksemptinessfalse } +\newif\ifEtoc@notocifnotoc +\def\etocnotocifnotoc {\Etoc@checksemptinesstrue\Etoc@notocifnotoctrue } +\newcounter{etoc@tocid} +\def\Etoc@tocext{toc} +\def\Etoc@lofext{lof} +\def\Etoc@lotext{lot} +\let\Etoc@currext\Etoc@tocext +\def\etocifislocal{\ifEtoc@localtoc\expandafter\@firstoftwo\else + \expandafter\@secondoftwo\fi + } +\def\etocifislocaltoc{\etocifislocal{\ifx\Etoc@currext\Etoc@tocext + \expandafter\@firstoftwo\else + \expandafter\@secondoftwo\fi}% + {\@secondoftwo}% + } +\def\etocifislocallof{\etocifislocal{\ifx\Etoc@currext\Etoc@lofext + \expandafter\@firstoftwo\else + \expandafter\@secondoftwo\fi}% + {\@secondoftwo}% + } +\def\etocifislocallot{\etocifislocal{\ifx\Etoc@currext\Etoc@lotext + \expandafter\@firstoftwo\else + \expandafter\@secondoftwo\fi}% + {\@secondoftwo}% + } +\expandafter\def\csname Etoc@-3@@\endcsname {-\thr@@} +\expandafter\def\csname Etoc@-2@@\endcsname {-\tw@} +\expandafter\let\csname Etoc@-1@@\endcsname \m@ne +\expandafter\let\csname Etoc@0@@\endcsname \z@ +\expandafter\let\csname Etoc@1@@\endcsname \@ne +\expandafter\let\csname Etoc@2@@\endcsname \tw@ +\expandafter\let\csname Etoc@3@@\endcsname \thr@@ +\expandafter\chardef\csname Etoc@4@@\endcsname 4 +\expandafter\chardef\csname Etoc@5@@\endcsname 5 +\expandafter\chardef\csname Etoc@6@@\endcsname 6 +\ifEtoc@deeplevels + \expandafter\chardef\csname Etoc@7@@\endcsname 7 + \expandafter\chardef\csname Etoc@8@@\endcsname 8 + \expandafter\chardef\csname Etoc@9@@\endcsname 9 + \expandafter\chardef\csname Etoc@10@@\endcsname 10 + \expandafter\chardef\csname Etoc@11@@\endcsname 11 + \expandafter\chardef\csname Etoc@12@@\endcsname 12 +\fi +\expandafter\let\expandafter\Etoc@maxlevel + \csname Etoc@\ifEtoc@deeplevels12\else6\fi @@\endcsname +\edef\etocthemaxlevel{\number\Etoc@maxlevel} +\@ifclassloaded{memoir}{\def\Etoc@minf{-\thr@@}}{\def\Etoc@minf{-\tw@}} +\let\Etoc@none@@ \Etoc@minf +\expandafter\let\expandafter\Etoc@all@@ + \csname Etoc@\ifEtoc@deeplevels11\else5\fi @@\endcsname +\let\Etoc@dolevels\@empty +\def\Etoc@newlevel #1{\expandafter\def\expandafter\Etoc@dolevels\expandafter + {\Etoc@dolevels\Etoc@do{#1}}} +\ifdefined\expanded + \def\etocsetlevel#1#2{\expanded{\noexpand\etoc@setlevel{#1}{#2}}}% +\else + \def\etocsetlevel#1#2{{\edef\Etoc@tmp{\noexpand\etoc@setlevel{#1}{#2}}\expandafter}\Etoc@tmp}% +\fi +\def\etoc@setlevel#1#2{% + \edef\Etoc@tmp{\the\numexpr#2}% + \if1\ifnum\Etoc@tmp>\Etoc@maxlevel0\fi\unless\ifnum\Etoc@minf<\Etoc@tmp;\fi1% + \ifEtoc@deeplevels + \in@{.#1,}{.none,.all,.figure,.table,.-3,.-2,.-1,.0,.1,.2,.3,.4,.5,.6,% + .7,.8,.9,.10,.11,.12,}% + \else + \in@{.#1,}{.none,.all,.figure,.table,.-3,.-2,.-1,.0,.1,.2,.3,.4,.5,.6,}% + \fi + \ifin@\else\if\@car#1\@nil @\in@true\fi\fi + \ifin@ + \PackageWarning{etoc} + {Sorry, but `#1' is forbidden as level name.\MessageBreak + \if\@car#1\@nil @% + (because of the @ as first character)\MessageBreak\fi + Reported}% + \else + \etocifunknownlevelTF{#1}{\Etoc@newlevel{#1}}{}% + \expandafter\let\csname Etoc@#1@@\expandafter\endcsname + \csname Etoc@\Etoc@tmp @@\endcsname + \expandafter\edef\csname Etoc@@#1@@\endcsname + {\expandafter\noexpand\csname Etoc@#1@@\endcsname}% + \expandafter\edef\csname toclevel@@#1\endcsname + {\expandafter\noexpand\csname toclevel@#1\endcsname}% + \fi + \else + \PackageWarning{etoc} + {Argument `\detokenize{#2}' of \string\etocsetlevel\space should + represent one of\MessageBreak + \ifnum\Etoc@minf=-\thr@@-2, \fi-1, 0, 1, 2, \ifEtoc@deeplevels ...\else3, 4\fi, + \the\numexpr\Etoc@maxlevel-1, or \number\Etoc@maxlevel\space + but evaluates to \Etoc@tmp.\MessageBreak + The level of `#1' will be set to \number\Etoc@maxlevel.\MessageBreak + Tables of contents will ignore `#1' as long\MessageBreak + as its level is \number\Etoc@maxlevel\space (=\string\etocthemaxlevel).% + \MessageBreak + Reported}% + \etocifunknownlevelTF{#1}{\Etoc@newlevel{#1}}{}% + \expandafter\let\csname Etoc@#1@@\endcsname\Etoc@maxlevel + \fi +} +\def\etoclevel#1{\csname Etoc@#1@@\endcsname} +\def\etocthelevel#1{\number\csname Etoc@#1@@\endcsname} +\def\etocifunknownlevelTF#1{\@ifundefined{Etoc@#1@@}} +\@ifclassloaded{memoir}{\etocsetlevel{book}{-2}}{} +\etocsetlevel{part}{-1} +\etocsetlevel{chapter}{0} +\etocsetlevel{section}{1} +\etocsetlevel{subsection}{2} +\etocsetlevel{subsubsection}{3} +\etocsetlevel{paragraph}{4} +\etocsetlevel{subparagraph}{5} +\ifdefined\c@chapter + \etocsetlevel{appendix}{0} +\else + \etocsetlevel{appendix}{1} +\fi +\def\Etoc@do#1{\@namedef{l@@#1}{\csname l@#1\endcsname}} +\Etoc@dolevels +\let\Etoc@figure@@\Etoc@maxlevel +\let\Etoc@table@@ \Etoc@maxlevel +\let\Etoc@gobblethreeorfour\@gobblefour +\ifdefined\@gobblethree + \let\Etoc@gobblethree\@gobblethree +\else + \long\def\Etoc@gobblethree#1#2#3{}% +\fi +\AtBeginDocument{% +\@ifpackageloaded{parskip}{\Etoc@parskiptrue}{}% +\@ifpackageloaded{hyperref} + {\Etoc@hyperreftrue} + {\ifEtoc@oldLaTeX + \let\Etoc@gobblethreeorfour\Etoc@gobblethree + \let\Etoc@etoccontentsline@fourargs\Etoc@etoccontentsline@ + \long\def\Etoc@etoccontentsline@#1#2#3{% + \Etoc@etoccontentsline@fourargs{#1}{#2}{#3}{}% + }% + \fi + }% +} +\def\etocskipfirstprefix {\global\Etoc@skipprefixtrue } +\def\Etoc@updatestackofends#1\etoc@{\gdef\Etoc@stackofends{#1}} +\def\Etoc@stackofends{{-3}{}} +\def\Etoc@doendsandbegin{% + \expandafter\Etoc@traversestackofends\Etoc@stackofends\etoc@ +} +\def\Etoc@traversestackofends#1{% + \ifnum#1>\Etoc@level + \csname Etoc@end@#1\endcsname + \expandafter\Etoc@traversestackofends + \else + \Etoc@traversestackofends@done{#1}% + \fi +} +\def\Etoc@traversestackofends@done#1#2{#2% + \ifnum#1<\Etoc@level + \csname Etoc@begin@\the\numexpr\Etoc@level\endcsname + \Etoc@global\Etoc@isfirsttrue + \edef\Etoc@tmp{{\the\numexpr\Etoc@level}}% + \else + \Etoc@global\Etoc@isfirstfalse + \let\Etoc@tmp\@empty + \fi + \expandafter\Etoc@updatestackofends\Etoc@tmp{#1}% +} +\def\Etoc@etoccontentsline #1{% + \let\Etoc@next\Etoc@gobblethreeorfour + \ifnum\csname Etoc@#1@@\endcsname=\Etoc@maxlevel + \else + \Etoc@skipthisonefalse + \global\expandafter\let\expandafter\Etoc@level\csname Etoc@#1@@\endcsname + \if @\@car#1\@nil\else\global\let\Etoc@virtualtop\Etoc@level\fi + \ifEtoc@localtoc + \ifEtoc@stoptoc + \Etoc@skipthisonetrue + \else + \ifEtoc@notactive + \Etoc@skipthisonetrue + \else + \unless\ifnum\Etoc@level>\etoclocaltop + \Etoc@skipthisonetrue + \global\Etoc@stoptoctrue + \fi + \fi + \fi + \fi + \ifEtoc@skipthisone + \else + \unless\ifnum\Etoc@level>\c@tocdepth + \ifEtoc@standardlines + \let\Etoc@next\Etoc@savedcontentsline + \else + \let\Etoc@next\Etoc@etoccontentsline@ + \fi + \fi + \fi + \fi + \Etoc@next{#1}% +} +\def\Etoc@etoccontentsline@ #1#2#3#4{% + \Etoc@doendsandbegin + \Etoc@global\edef\Etoc@prefix {\expandafter\noexpand + \csname Etoc@prefix@\the\numexpr\Etoc@level\endcsname }% + \Etoc@global\edef\Etoc@contents{\expandafter\noexpand + \csname Etoc@contents@\the\numexpr\Etoc@level\endcsname }% + \ifEtoc@skipprefix \Etoc@global\def\Etoc@prefix{\@empty}\fi + \global\Etoc@skipprefixfalse + \Etoc@lxyz{#2}{#3}{#4}% + \Etoc@prefix + \Etoc@contents +} +\def\Etoc@lxyz #1#2#3{% + \ifEtoc@hyperref + \Etoc@global\def\etocthelink##1{\hyperlink{#3}{##1}}% + \else + \Etoc@global\let\etocthelink\@firstofone + \fi + \Etoc@global\def\etocthepage {#2}% + \ifEtoc@hyperref + \ifx\etocthepage\@empty + \Etoc@global\let\etocthelinkedpage\@empty + \else + \Etoc@global\def\etocthelinkedpage{\hyperlink {#3}{#2}}% + \fi + \else + \Etoc@global\let\etocthelinkedpage\etocthepage + \fi + \Etoc@global\def\etocthename{#1}% + \futurelet\Etoc@getnb@token\Etoc@@getnb #1\hspace\etoc@ + \ifEtoc@hyperref + \def\Etoc@tmp##1##2{\Etoc@global\def##2{\hyperlink{#3}{##1}}}% + \expandafter\Etoc@tmp\expandafter{\etocthename}\etocthelinkedname + \ifEtoc@numbered + \expandafter\Etoc@tmp\expandafter{\etocthenumber}\etocthelinkednumber + \else + \Etoc@global\let\etocthelinkednumber\@empty + \fi + \else + \Etoc@global\let\etocthelinkedname \etocthename + \Etoc@global\let\etocthelinkednumber\etocthenumber + \fi + \Etoc@global\expandafter\let\csname etoclink \endcsname \etocthelink + \Etoc@global\expandafter\let\csname etocname \endcsname \etocthename + \Etoc@global\expandafter\let\csname etocnumber \endcsname\etocthenumber + \Etoc@global\expandafter\let\csname etocpage \endcsname \etocthepage + \ifEtoc@hyperref + \Etoc@lxyz@linktoc + \fi +} +\def\Etoc@lxyz@linktoc{% + \ifcase\Hy@linktoc + \or + \Etoc@global\expandafter\let\csname etocname \endcsname\etocthelinkedname + \Etoc@global\expandafter\let\csname etocnumber \endcsname\etocthelinkednumber + \or % page + \Etoc@global\expandafter\let\csname etocpage \endcsname\etocthelinkedpage + \else % all + \Etoc@global\expandafter\let\csname etocname \endcsname\etocthelinkedname + \Etoc@global\expandafter\let\csname etocnumber \endcsname\etocthelinkednumber + \Etoc@global\expandafter\let\csname etocpage \endcsname\etocthelinkedpage + \fi +} +\def\Etoc@@getnb {% + \let\Etoc@next\Etoc@getnb + \ifx\Etoc@getnb@token\@sptoken\let\Etoc@next\Etoc@getnb@nonbr\fi + \ifx\Etoc@getnb@token\bgroup \let\Etoc@next\Etoc@getnb@nonbr\fi + \Etoc@next +} +\def\Etoc@getnb #1{% + \in@{#1}{\numberline\chapternumberline\partnumberline\booknumberline}% + \ifin@ + \let\Etoc@next\Etoc@getnb@nmbrd + \else + \ifnum\Etoc@level=\m@ne + \let\Etoc@next\Etoc@@getit + \else + \let\Etoc@next\Etoc@getnb@nonbr + \fi + \in@{#1}{\nonumberline}% + \ifin@ + \let\Etoc@next\Etoc@getnb@nonumberline + \fi + \fi + \Etoc@next #1% +} +\def\Etoc@getnb@nmbrd #1#2{% + \Etoc@global\Etoc@numberedtrue + \Etoc@global\def\etocthenumber {#2}% + \Etoc@getnb@nmbrd@getname\@empty +}% +\def\Etoc@getnb@nmbrd@getname #1\hspace\etoc@ {% + \Etoc@global\expandafter\def\expandafter\etocthename\expandafter{#1}% +} +\def\Etoc@getnb@nonbr #1\etoc@ {% + \Etoc@global\Etoc@numberedfalse + \Etoc@global\let\etocthenumber \@empty +} +\def\Etoc@getnb@nonumberline #1\hspace\etoc@ {% + \Etoc@global\Etoc@numberedfalse + \Etoc@global\let\etocthenumber \@empty + \Etoc@global\expandafter\def\expandafter\etocthename\expandafter{\@gobble#1}% +} +\def\Etoc@@getit #1\hspace#2{% + \ifx\etoc@#2% + \Etoc@global\Etoc@numberedfalse + \Etoc@global\let\etocthenumber \@empty + \else + \Etoc@global\Etoc@numberedtrue + \Etoc@global\def\etocthenumber {#1}% + \expandafter\Etoc@getit@getname \expandafter\@empty + \fi +} +\def\Etoc@getit@getname #1\hspace\etoc@ {% + \Etoc@global\expandafter\def\expandafter\etocthename\expandafter{#1}% +} +\let\etocthename \@empty +\let\etocthenumber \@empty +\let\etocthepage \@empty +\let\etocthelinkedname \@empty +\let\etocthelinkednumber \@empty +\let\etocthelinkedpage \@empty +\let\etocthelink \@firstofone +\DeclareRobustCommand*{\etocname} {} +\DeclareRobustCommand*{\etocnumber}{} +\DeclareRobustCommand*{\etocpage} {} +\DeclareRobustCommand*{\etoclink} {\@firstofone} +\DeclareRobustCommand*{\etocifnumbered} + {\ifEtoc@numbered\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi} +\expandafter\let\expandafter\etocxifnumbered\csname etocifnumbered \endcsname +\DeclareRobustCommand*{\etociffirst} + {\ifEtoc@isfirst\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi} +\expandafter\let\expandafter\etocxiffirst\csname etociffirst \endcsname +\def\Etoc@readtoc {% + \ifeof \Etoc@tf + \else + \read \Etoc@tf to \Etoc@buffer + \Etoc@toctoks=\expandafter\expandafter\expandafter + {\expandafter\the\expandafter\Etoc@toctoks\Etoc@buffer}% + \expandafter\Etoc@readtoc + \fi +} +\Etoc@toctoks {}% (superfluous, but for clarity) +\AtBeginDocument{\IfFileExists{\jobname.toc} + {{\endlinechar=\m@ne + \makeatletter + \newread\Etoc@tf + \openin\Etoc@tf\@filef@und + \Etoc@readtoc + \global\Etoc@toctoks=\expandafter{\the\Etoc@toctoks}% + \closein\Etoc@tf}} + {\typeout{No file \jobname.toc.}}} +\def\Etoc@openouttoc{% + \ifEtoc@hyperref + \ifx\hyper@last\@undefined + \IfFileExists{\jobname .toc} + {\Hy@WarningNoLine + {old toc file detected; run LaTeX again (cheers from `etoc')}% + \global\Etoc@toctoks={}% + } + {}% + \fi + \fi + \if@filesw + \newwrite \tf@toc + \immediate \openout \tf@toc \jobname .toc\relax + \fi + \global\let\Etoc@openouttoc\empty +} +\def\Etoc@toctoc{% + \gdef\Etoc@stackofends{{-3}{}}% + \global\let\Etoc@level\Etoc@minf + \global\let\Etoc@virtualtop\Etoc@minf + \the\Etoc@toctoks + \ifEtoc@notactive + \else + \gdef\Etoc@level{-\thr@@}% + \Etoc@doendsandbegin + \fi +} +\def\Etoc@@startlocaltoc#1#2{% + \ifEtoc@localtoc + \ifnum #1=#2\relax + \global\let\etoclocaltop\Etoc@virtualtop + \Etoc@@startlocaltochook + \etoclocaltableofcontentshook + \ifEtoc@etocstyle + \etocetoclocaltocmaketitle + \fi + \ifx\Etoc@aftertitlehook\@empty + \else + \ifEtoc@localtoctotoc + \ifEtoc@ouroboros + \else + \let\Etoc@tmp\contentsline + \def\contentsline{\let\contentsline\Etoc@tmp\Etoc@gobblethreeorfour}% + \fi + \fi + \fi + \global\Etoc@notactivefalse + \fi + \fi +} +\let\etoc@startlocaltoc\@gobble +\let\Etoc@@startlocaltoc@toc\Etoc@@startlocaltoc +\let\Etoc@@startlocaltochook\@empty +\unless\ifEtoc@deeplevels + \def\etocdivisionnameatlevel#1{% + \ifcase\numexpr#1\relax + \ifdefined\c@chapter chapter\else section\fi% + \or section% + \or subsection% + \or subsubsection% + \or paragraph% + \or subparagraph% + \or empty% + \else\ifnum\numexpr#1<\m@ne + book% + \else + part% + \fi + \fi + } +\else + \def\etocdivisionnameatlevel#1{% + \ifcase\numexpr#1\relax + \ifdefined\c@chapter chapter\else section\fi% + \or section% + \or subsection% + \or subsubsection% + \or subsubsubsection% + \or subsubsubsubsection% + \or subsubsubsubsubsection% + \or subsubsubsubsubsubsection% + \or paragraph% + \or subparagraph% + \else\ifnum\numexpr#1>\z@ + empty% + \else\ifnum\numexpr#1=\m@ne + part% + \else + book% + \fi\fi + \fi + } +\fi +\def\etoclocalheadtotoc#1#2{\addcontentsline{toc}{@#1}{#2}} +\def\etocglobalheadtotoc{\addcontentsline{toc}} +\providecommand*\UseName{\@nameuse} +\def\etocetoclocaltocmaketitle{% + \UseName{\etocdivisionnameatlevel{\etoclocaltop+1}}*{\localcontentsname}% + \if@noskipsec\leavevmode\par\fi + \etociflocaltoctotoc + {\etocifisstarred + {}% star variant, do not add to toc + {\etoclocalheadtotoc + {\etocdivisionnameatlevel{\etoclocaltop+1}}% + {\localcontentsname}% + }% + }% + {}% +}% +\def\localcontentsname {\contentsname}% +\let\etoclocaltableofcontentshook\@empty +\if1\ifEtoc@lof0\fi\ifEtoc@lot0\fi1% +\else +\AtBeginDocument{% + \let\Etoc@originaladdcontentsline\addcontentsline + \def\addcontentsline{\Etoc@hackedaddcontentsline}% +}% +\fi +\ifEtoc@lof + \ifEtoc@lot + \def\Etoc@hackedaddcontentsline#1{% + \expanded{\noexpand\in@{.#1,}}{.lof,.lot,}% + \ifin@\expandafter\Etoc@hackedaddcontentsline@i + \else\expandafter\Etoc@originaladdcontentsline + \fi {#1}} + \else + \def\Etoc@hackedaddcontentsline#1{% + \expanded{\noexpand\in@{.#1,}}{.lof,}% + \ifin@\expandafter\Etoc@hackedaddcontentsline@i + \else\expandafter\Etoc@originaladdcontentsline + \fi {#1}} + \fi +\else + \def\Etoc@hackedaddcontentsline#1{% + \expanded{\noexpand\in@{.#1,}}{.lot,}% + \ifin@\expandafter\Etoc@hackedaddcontentsline@i + \else\expandafter\Etoc@originaladdcontentsline + \fi {#1}} +\fi +\def\Etoc@hackedaddcontentsline@i#1#2#3{% + \expanded{\noexpand\in@{.#1;#2,}}{.lof;figure,.lot;table,}% + \ifin@ + \addtocontents {toc}{% + \protect\contentsline{#2}{#3}{\thepage}{\ifEtoc@hyperref\@currentHref\fi}% + \ifdefined\protected@file@percent\protected@file@percent\fi + }% + \fi + \Etoc@originaladdcontentsline{#1}{#2}{#3}% +} +\unless\ifdefined\expanded + \def\Etoc@hackedaddcontentsline#1{% + {\edef\Etoc@tmp{\noexpand\in@{.#1,}{\ifEtoc@lof.lof,\fi\ifEtoc@lot.lot,\fi}}\expandafter}% + \Etoc@tmp + \ifin@\expandafter\Etoc@hackedaddcontentsline@i + \else\expandafter\Etoc@originaladdcontentsline + \fi {#1}% + } + \def\Etoc@hackedaddcontentsline@i#1#2#3{% + {\edef\Etoc@tmp{\noexpand\in@{.#1;#2,}}\expandafter}% + \Etoc@tmp{.lof;figure,.lot;table,}% + \ifin@ + \addtocontents {toc}{% + \protect\contentsline{#2}{#3}{\thepage}{\ifEtoc@hyperref\@currentHref\fi}% + \ifdefined\protected@file@percent\protected@file@percent\fi + }% + \fi + \Etoc@originaladdcontentsline{#1}{#2}{#3}% + } +\fi +\def\Etoc@@startlocallistof#1#2#3{% + \ifEtoc@localtoc + \ifnum #2=#3\relax + \global\let\etoclocaltop\Etoc@virtualtop + \global\Etoc@notactivefalse + \Etoc@@startlocaltochook + \csname etoclocallistof#1shook\endcsname + \ifEtoc@etocstyle + \csname etocetoclistof#1smaketitle\endcsname + \fi + \fi + \fi +} +\def\Etoc@@startlocallistof@setlevels#1{% + \ifnum\etoclocaltop<\z@ + \expandafter\let\csname Etoc@#1@@\endcsname\@ne + \else + \expandafter\let\csname Etoc@#1@@\expandafter\endcsname + \csname Etoc@\the\numexpr\etoclocaltop+\@ne @@\endcsname + \fi + \def\Etoc@do##1{% + \ifnum\etoclevel{##1}>\etoclocaltop + \expandafter\let\csname Etoc@##1@@\endcsname\Etoc@maxlevel + \fi}% + \Etoc@dolevels +} +\def\etoclocallistoffigureshook{\etocstandardlines} +\def\etoclocallistoftableshook {\etocstandardlines} +\def\locallistfigurename{\listfigurename} +\def\locallisttablename {\listtablename} +\def\etocetoclistoffiguresmaketitle{% + \UseName{\etocdivisionnameatlevel{\etoclocaltop+1}}*{\locallistfigurename}% + \ifnum\etoclocaltop>\tw@\mbox{}\par\fi + \etociflocalloftotoc + {\etocifisstarred + {}% star variant, do not add to toc + {\etoclocalheadtotoc + {\etocdivisionnameatlevel{\etoclocaltop+1}}% + {\locallistfigurename}% + }% + }% + {}% +}% +\def\etocetoclistoftablesmaketitle{% + \UseName{\etocdivisionnameatlevel{\etoclocaltop+1}}*{\locallisttablename}% + \ifnum\etoclocaltop>\tw@\mbox{}\par\fi + \etociflocallottotoc + {\etocifisstarred + {}% star variant, do not add to toc + {\etoclocalheadtotoc + {\etocdivisionnameatlevel{\etoclocaltop+1}}% + {\locallisttablename}% + }% + }% + {}% +}% +\let\Etoc@listofreset\@empty +\ifEtoc@lof + \def\locallistoffigures{% + \def\Etoc@listofreset{% + \let\Etoc@currext\Etoc@tocext + \let\Etoc@@startlocaltoc\Etoc@@startlocaltoc@toc + \let\Etoc@@startlocaltochook\@empty + \let\Etoc@listofreset\@empty + \let\Etoc@listofhook\@empty + }% + \let\Etoc@currext\Etoc@lofext + \def\Etoc@@startlocaltoc{\Etoc@@startlocallistof{figure}}% + \def\Etoc@@startlocaltochook{\Etoc@@startlocallistof@setlevels{figure}}% + \def\Etoc@listofhook{% + \def\Etoc@do####1{% + \expandafter\let\csname Etoc@@####1@@\endcsname\Etoc@maxlevel + }% + \Etoc@dolevels + }% + \localtableofcontents + } +\else + \def\locallistoffigures{% + \PackageError{etoc}{% + \string\locallistoffigures \on@line\space but\MessageBreak + package was loaded without `lof' option}% + {Try again with \string\usepackage[lof]{etoc}}% + } +\fi +\ifEtoc@lot + \def\locallistoftables{% + \def\Etoc@listofreset{% + \let\Etoc@currext\Etoc@tocext + \let\Etoc@@startlocaltoc\Etoc@@startlocaltoc@toc + \let\Etoc@@startlocaltochook\@empty + \let\Etoc@listofreset\@empty + \let\Etoc@listofhook\@empty + }% + \let\Etoc@currext\Etoc@lotext + \def\Etoc@@startlocaltoc{\Etoc@@startlocallistof{table}}% + \def\Etoc@@startlocaltochook{\Etoc@@startlocallistof@setlevels{table}}% + \def\Etoc@listofhook{% + \def\Etoc@do####1{% + \expandafter\let\csname Etoc@@####1@@\endcsname\Etoc@maxlevel + }% + \Etoc@dolevels + }% + \localtableofcontents + } +\else + \def\locallistoftables{% + \PackageError{etoc}{% + \string\locallistoftable \on@line\space but\MessageBreak + package was loaded without `lot' option}% + {Try again with \string\usepackage[lot]{etoc}}% + } +\fi +\def\Etoc@checkifempty {% + \global\Etoc@isemptytoctrue + \global\Etoc@stoptocfalse + \global\let\Etoc@level\Etoc@minf + \global\let\Etoc@virtualtop\Etoc@minf + \gdef\Etoc@stackofends{{-3}{}}% + \begingroup + \ifEtoc@localtoc + \def\etoc@startlocaltoc##1{% + \ifnum##1=\Etoc@tocid\relax + \global\let\etoclocaltop\Etoc@virtualtop + \Etoc@@startlocaltochook + \global\Etoc@notactivefalse + \fi + }% + \let\contentsline\Etoc@testingcontentslinelocal + \else + \let\contentsline\Etoc@testingcontentsline + \fi + \Etoc@storetocdepth + \let\Etoc@setlocaltop@doendsandbegin\@empty + \the\Etoc@toctoks + \Etoc@restoretocdepth + \endgroup +} +\DeclareRobustCommand*\etocifwasempty + {\ifEtoc@isemptytoc\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi } +\expandafter\let\expandafter\etocxifwasempty\csname etocifwasempty \endcsname +\def\Etoc@testingcontentslinelocal #1{% + \ifEtoc@stoptoc + \else + \ifnum\csname Etoc@#1@@\endcsname=\Etoc@maxlevel + \else + \global\expandafter\let\expandafter\Etoc@level\csname Etoc@#1@@\endcsname + \if @\@car#1\@nil\else\global\let\Etoc@virtualtop\Etoc@level\fi + \ifEtoc@notactive + \else + \ifnum\Etoc@level>\etoclocaltop + \unless\ifnum\Etoc@level>\c@tocdepth + \global\Etoc@isemptytocfalse + \global\Etoc@stoptoctrue + \fi + \else + \global\Etoc@stoptoctrue + \fi + \fi + \fi + \fi + \Etoc@gobblethreeorfour{}% +} +\def\Etoc@testingcontentsline #1{% + \ifEtoc@stoptoc + \else + \ifnum\csname Etoc@#1@@\endcsname=\Etoc@maxlevel + \else + \unless\ifnum\csname Etoc@#1@@\endcsname>\c@tocdepth + \global\Etoc@isemptytocfalse + \global\Etoc@stoptoctrue + \fi + \fi + \fi + \Etoc@gobblethreeorfour{}% +} +\def\Etoc@localtableofcontents#1{% + \gdef\etoclocaltop{-\@m}% + \Etoc@localtoctrue + \global\Etoc@isemptytocfalse + \edef\Etoc@tocid{#1}% + \ifnum\Etoc@tocid<\@ne + \setbox0\hbox{\ref{Unknown toc ref \@secondoftwo#1. \space Rerun LaTeX}}% + \global\Etoc@stoptoctrue + \gdef\etoclocaltop{-\thr@@}% + \Etoc@tableofcontents + \expandafter\Etoc@gobtoetoc@ + \fi + \global\Etoc@notactivetrue + \ifEtoc@checksemptiness + \Etoc@checkifempty + \fi + \ifEtoc@isemptytoc + \ifEtoc@notactive + \setbox0\hbox{\ref{Unknown toc ID \number\Etoc@tocid. \space Rerun LaTeX}}% + \global\Etoc@isemptytocfalse + \global\Etoc@stoptoctrue + \gdef\etoclocaltop{-\thr@@}% + \Etoc@tableofcontents + \expandafter\expandafter\expandafter\Etoc@gobtoetoc@ + \fi + \else + \global\Etoc@stoptocfalse + \global\Etoc@notactivetrue + \edef\etoc@startlocaltoc##1% + {\noexpand\Etoc@@startlocaltoc{##1}{\Etoc@tocid}}% + \Etoc@tableofcontents + \fi + \@gobble\etoc@ + \endgroup\ifEtoc@mustclosegroup\endgroup\fi + \Etoc@tocdepthreset + \Etoc@listofreset + \etocaftertochook +}% \Etoc@localtableofcontents +\def\Etoc@getref #1{% + \@ifundefined{r@#1} + {0} + {\expandafter\Etoc@getref@i\romannumeral-`0% + \expandafter\expandafter\expandafter + \@car\csname r@#1\endcsname0\@nil\@etoc + }% +} +\def\Etoc@getref@i#1#2\@etoc{\ifnum9<1\string#1 #1#2\else 0\fi} +\def\Etoc@ref#1{\Etoc@localtableofcontents{\Etoc@getref{#1}}} +\def\Etoc@label#1{\label{#1}\futurelet\Etoc@nexttoken\Etoc@t@bleofcontents} +\@firstofone{\def\Etoc@again} {\futurelet\Etoc@nexttoken\Etoc@t@bleofcontents} +\def\Etoc@dothis #1#2\etoc@ {\fi #1} +\def\Etoc@t@bleofcontents{% + \gdef\etoclocaltop{-\@M}% + \ifx\Etoc@nexttoken\label\Etoc@dothis{\expandafter\Etoc@label\@gobble}\fi + \ifx\Etoc@nexttoken\@sptoken\Etoc@dothis{\Etoc@again}\fi + \ifx\Etoc@nexttoken\ref\Etoc@dothis{\expandafter\Etoc@ref\@gobble}\fi + \ifEtoc@tocwithid\Etoc@dothis{\Etoc@localtableofcontents{\c@etoc@tocid}}\fi + \global\Etoc@isemptytocfalse + \ifEtoc@checksemptiness\Etoc@checkifempty\fi + \ifEtoc@isemptytoc + \ifEtoc@notocifnotoc + \expandafter\expandafter\expandafter\@gobble + \fi + \fi + \Etoc@tableofcontents + \endgroup + \ifEtoc@mustclosegroup\endgroup\fi + \Etoc@tocdepthreset + \Etoc@listofreset + \etocaftertochook + \@gobble\etoc@ + }% \Etoc@t@bleofcontents +\def\Etoc@table@fcontents{% + \refstepcounter{etoc@tocid}% + \Etoc@tocwithidfalse + \futurelet\Etoc@nexttoken\Etoc@t@bleofcontents +} +\def\Etoc@localtable@fcontents{% + \refstepcounter{etoc@tocid}% + \addtocontents{toc}{\string\etoc@startlocaltoc{\the\c@etoc@tocid}}% + \Etoc@tocwithidtrue + \futurelet\Etoc@nexttoken\Etoc@t@bleofcontents +} +\def\etoctableofcontents{% + \Etoc@openouttoc + \Etoc@tocdepthset + \begingroup + \@ifstar + {\let\Etoc@aftertitlehook\@empty\Etoc@table@fcontents} + {\def\Etoc@aftertitlehook{\etocaftertitlehook}\Etoc@table@fcontents}% +}% \etoctableofcontents +\def\etocifisstarred{\ifx\Etoc@aftertitlehook\@empty + \expandafter\@firstoftwo\else + \expandafter\@secondoftwo + \fi} +\let\etocoriginaltableofcontents\tableofcontents +\let\tableofcontents\etoctableofcontents +\let\Etoc@listofhook\@empty +\newcommand*\localtableofcontents{% + \Etoc@openouttoc + \Etoc@tocdepthset + \begingroup + \Etoc@listofhook + \@ifstar + {\let\Etoc@aftertitlehook\@empty\Etoc@localtable@fcontents} + {\def\Etoc@aftertitlehook{\etocaftertitlehook}\Etoc@localtable@fcontents}% +}% \localtableofcontents +\newcommand*\localtableofcontentswithrelativedepth[1]{% + \def\Etoc@@startlocaltochook{% + \global\c@tocdepth\numexpr\etoclocaltop+#1\relax + }% + \def\Etoc@listofreset{\let\Etoc@@startlocaltochook\@empty + \let\Etoc@listofreset\@empty}% + \localtableofcontents +}% \localtableofcontentswithrelativedepth +\newcommand\etocsettocstyle[2]{% + \Etoc@etocstylefalse + \Etoc@classstylefalse + \def\Etoc@tableofcontents@user@before{#1}% + \def\Etoc@tableofcontents@user@after {#2}% +}% +\def\etocstoretocstyleinto#1{% +%% \@ifdefinable#1{% + \edef#1{\noexpand\Etoc@etocstylefalse\noexpand\Etoc@classstylefalse + \def\noexpand\Etoc@tableofcontents@user@before{% + \unexpanded\expandafter{\Etoc@tableofcontents@user@before}% + }% + \def\noexpand\Etoc@tableofcontents@user@after{% + \unexpanded\expandafter{\Etoc@tableofcontents@user@after}% + }% + }% +%% }% +}% +\def\Etoc@tableofcontents {% + \Etoc@tableofcontents@etoc@before + \ifEtoc@localtoc\ifEtoc@etocstyle\expandafter\expandafter\expandafter\@gobble\fi\fi + \Etoc@tableofcontents@user@before + \Etoc@tableofcontents@contents + \ifEtoc@localtoc\ifEtoc@etocstyle\expandafter\expandafter\expandafter\@gobble\fi\fi + \Etoc@tableofcontents@user@after + \Etoc@tableofcontents@etoc@after + \@gobble\etoc@ +} +\def\Etoc@tableofcontents@etoc@before{% + \ifnum\c@tocdepth>\Etoc@minf + \else + \expandafter\Etoc@gobtoetoc@ + \fi + \Etoc@par + \Etoc@beforetitlehook + \etocbeforetitlehook + \Etoc@storetocdepth + \let\Etoc@savedcontentsline\contentsline + \let\contentsline\Etoc@etoccontentsline + \ifEtoc@standardlines + \else + \def\Etoc@do##1{% + \expandafter\def\csname etocsaved##1tocline\endcsname + {\PackageError{etoc}{% + \expandafter\string\csname etocsaved##1tocline\endcsname\space + has been deprecated\MessageBreak + at 1.1a and is removed at 1.2.\MessageBreak + Use \expandafter\string\csname l@##1\endcsname\space directly.\MessageBreak + Reported \on@line}% + {I will use \expandafter\string + \csname l@##1\endcsname\space myself for this time.% + }% + \csname l@##1\endcsname + }% + }% + \Etoc@dolevels + \fi +}% +\def\Etoc@tableofcontents@contents{% + \Etoc@tocdepthset + \ifEtoc@parskip\parskip\z@skip\fi + \Etoc@aftertitlehook + \gdef\etoclocaltop{-\thr@@}% + \Etoc@toctoc + \etocaftercontentshook +}% +\def\Etoc@tableofcontents@etoc@after{% + \@nobreakfalse + \Etoc@restoretocdepth + \ifx\Etoc@global\global + \@ifundefined{tof@finish} + {} + {\ifx\tof@finish\@empty + \else + \global\let\contentsline\Etoc@savedcontentsline + \fi + }% + \fi +} +\def\etocsetstyle#1{\ifcsname Etoc@#1@@\endcsname + \expandafter\Etoc@setstyle@a + \else + \expandafter\Etoc@setstyle@error + \fi {#1}% +} +\def\Etoc@setstyle@error #1{% + \PackageWarning{etoc}{`#1' is unknown to etoc. \space Did you\MessageBreak + forget some \string\etocsetlevel{#1}{}?\MessageBreak + Reported}% + \@gobblefour +} +\def\Etoc@setstyle@a #1{% + \edef\Etoc@tmp{\the\numexpr\csname Etoc@#1@@\endcsname}% + \if1\unless\ifnum\Etoc@tmp<\Etoc@maxlevel 0\fi + \unless\ifnum\Etoc@tmp>\Etoc@minf 0\fi1% + \Etoc@standardlinesfalse + \expandafter\Etoc@setstyle@b\expandafter\Etoc@tmp + \else + \ifnum\Etoc@tmp=\Etoc@maxlevel + \in@{.#1,}{.figure,.table,}% + \ifin@ + \PackageWarning{etoc} + {You can not use \string\etocsetstyle\space with `#1'.\MessageBreak + Check the package documentation (in particular about\MessageBreak + \string\etoclocallistoffigureshook/\string\etoclocallistoftableshook)% + \MessageBreak on how to customize + figure and table entries in local\MessageBreak lists. Reported}% + \else + \PackageInfo{etoc} + {Attempt to set the style of `#1',\MessageBreak + whose level is currently the maximal one \etocthemaxlevel,\MessageBreak + which is never displayed. \space This will be ignored\MessageBreak + but note that we do quit compatibility mode.\MessageBreak + Reported}% + \Etoc@standardlinesfalse + \fi + \else + \PackageWarning{etoc}{This should not happen. Reported}% + \fi + \expandafter\@gobblefour + \fi +} +\long\def\Etoc@setstyle@b#1#2#3#4#5{% + \expandafter\def\csname Etoc@begin@#1\endcsname {#2}% + \expandafter\def\csname Etoc@prefix@#1\endcsname {#3}% + \expandafter\def\csname Etoc@contents@#1\endcsname {#4}% + \expandafter\def\csname Etoc@end@#1\endcsname {#5}% +} +\def\Etoc@setstyle@e#1{% + \expandafter\let\csname Etoc@begin@#1\endcsname \@empty + \expandafter\let\csname Etoc@prefix@#1\endcsname \@empty + \expandafter\let\csname Etoc@contents@#1\endcsname \@empty + \expandafter\let\csname Etoc@end@#1\endcsname \@empty +} +\def\Etoc@storelines@a#1{% + \noexpand\Etoc@setstyle@b{#1}% + {\expandafter\Etoc@expandonce\csname Etoc@begin@#1\endcsname}% + {\expandafter\Etoc@expandonce\csname Etoc@prefix@#1\endcsname}% + {\expandafter\Etoc@expandonce\csname Etoc@contents@#1\endcsname}% + {\expandafter\Etoc@expandonce\csname Etoc@end@#1\endcsname}% +} +\def\Etoc@expandonce#1{\unexpanded\expandafter{#1}} +\def\etocstorelinestylesinto#1{% + \edef#1{\Etoc@storelines@a{-2}\Etoc@storelines@a{-1}\Etoc@storelines@a{0}% + \Etoc@storelines@a {1}\Etoc@storelines@a {2}\Etoc@storelines@a{3}% + \Etoc@storelines@a {4}\Etoc@storelines@a {5}% + \ifEtoc@deeplevels + \Etoc@storelines@a{6}\Etoc@storelines@a{7}\Etoc@storelines@a{8}% + \Etoc@storelines@a{9}\Etoc@storelines@a{10}\Etoc@storelines@a{11}% + \fi + }% +} +\def\etocstorethislinestyleinto#1#2{% + \edef#2{\expandafter\Etoc@storelines@a\expandafter{\number\etoclevel{#1}}}% +}% +\def\etocfontminustwo {\normalfont \LARGE \bfseries} +\def\etocfontminusone {\normalfont \large \bfseries} +\def\etocfontzero {\normalfont \large \bfseries} +\def\etocfontone {\normalfont \normalsize \bfseries} +\def\etocfonttwo {\normalfont \normalsize} +\def\etocfontthree {\normalfont \footnotesize} +\def\etocsepminustwo {4ex \@plus .5ex \@minus .5ex} +\def\etocsepminusone {4ex \@plus .5ex \@minus .5ex} +\def\etocsepzero {2.5ex \@plus .4ex \@minus .4ex} +\def\etocsepone {1.5ex \@plus .3ex \@minus .3ex} +\def\etocseptwo {.5ex \@plus .1ex \@minus .1ex} +\def\etocsepthree {.25ex \@plus .05ex \@minus .05ex} +\def\etocbaselinespreadminustwo {1} +\def\etocbaselinespreadminusone {1} +\def\etocbaselinespreadzero {1} +\def\etocbaselinespreadone {1} +\def\etocbaselinespreadtwo {1} +\def\etocbaselinespreadthree {.9} +\def\etocminustwoleftmargin {1.5em plus 0.5fil} +\def\etocminustworightmargin {1.5em plus -0.5fil} +\def\etocminusoneleftmargin {1em} +\def\etocminusonerightmargin {1em} +\def\etoctoclineleaders + {\hbox{\normalfont\normalsize\hb@xt@2ex {\hss.\hss}}} +\def\etocabbrevpagename {p.~} +\def\etocpartname {Part} +\def\etocbookname {Book} +\def\etocdefaultlines{% + \Etoc@standardlinesfalse + \etocdefaultlines@setbook + \etocdefaultlines@setpart + \etocdefaultlines@setchapter + \etocdefaultlines@setsection + \etocdefaultlines@setsubsection + \etocdefaultlines@setsubsubsection + \etocdefaultlines@setdeeperones +} +\def\etocnoprotrusion{\leavevmode\kern-\p@\kern\p@} +\@ifclassloaded{memoir}{% + \def\etocdefaultlines@setbook{% + \Etoc@setstyle@b + {-2}% + {\addpenalty\@M\etocskipfirstprefix} + {\addpenalty\@secpenalty} + {\begingroup + \etocfontminustwo + \addvspace{\etocsepminustwo}% + \parindent \z@ + \leftskip \etocminustwoleftmargin + \rightskip \etocminustworightmargin + \parfillskip \@flushglue + \vbox{\etocifnumbered{\etoclink{\etocbookname\enspace\etocthenumber:\quad}}{}% + \etocname + \baselineskip\etocbaselinespreadminustwo\baselineskip + \par}% + \addpenalty\@M\addvspace{\etocsepminusone}% + \endgroup} + {}% + } + }{\let\etocdefaultlines@setbook\@empty} +\def\etocdefaultlines@setpart{% +\Etoc@setstyle@b + {-1}% + {\addpenalty\@M\etocskipfirstprefix} + {\addpenalty\@secpenalty} + {\begingroup + \etocfontminusone + \addvspace{\etocsepminusone}% + \parindent \z@ + \leftskip \etocminusoneleftmargin + \rightskip \etocminusonerightmargin + \parfillskip \@flushglue + \vbox{\etocifnumbered{\etoclink{\etocpartname\enspace\etocthenumber.\quad}}{}% + \etocname + \baselineskip\etocbaselinespreadminusone\baselineskip + \par}% + \addpenalty\@M\addvspace{\etocsepzero}% + \endgroup} + {}% +} +\def\etocdefaultlines@setchapter{% +\Etoc@setstyle@b + {0}% + {\addpenalty\@M\etocskipfirstprefix} + {\addpenalty\@itempenalty} + {\begingroup + \etocfontzero + \addvspace{\etocsepzero}% + \parindent \z@ \parfillskip \@flushglue + \vbox{\etocifnumbered{\etocnumber.\enspace}{}\etocname + \baselineskip\etocbaselinespreadzero\baselineskip + \par}% + \endgroup} + {\addpenalty{-\@highpenalty}\addvspace{\etocsepminusone}}% +} +\def\etocdefaultlines@setsection{% +\Etoc@setstyle@b + {1}% + {\addpenalty\@M\etocskipfirstprefix} + {\addpenalty\@itempenalty} + {\begingroup + \etocfontone + \addvspace{\etocsepone}% + \parindent \z@ \parfillskip \z@ + \setbox\z@\vbox{\parfillskip\@flushglue + \etocname\par + \setbox\tw@\lastbox + \global\setbox\@ne\hbox{\unhbox\tw@\ }}% + \dimen\z@=\wd\@ne + \setbox\z@=\etoctoclineleaders + \advance\dimen\z@\wd\z@ + \etocifnumbered + {\setbox\tw@\hbox{\etocnumber, \etocabbrevpagename\etocpage\etocnoprotrusion}} + {\setbox\tw@\hbox{\etocabbrevpagename\etocpage\etocnoprotrusion}}% + \advance\dimen\z@\wd\tw@ + \ifdim\dimen\z@ < \linewidth + \vbox{\etocname~% + \leaders\box\z@\hfil\box\tw@ + \baselineskip\etocbaselinespreadone\baselineskip + \par}% + \else + \vbox{\etocname~% + \leaders\copy\z@\hfil\break + \hbox{}\leaders\box\z@\hfil\box\tw@ + \baselineskip\etocbaselinespreadone\baselineskip + \par}% + \fi + \endgroup} + {\addpenalty\@secpenalty\addvspace{\etocsepzero}}% +} +\def\etocdefaultlines@setsubsection{% +\Etoc@setstyle@b + {2}% + {\addpenalty\@medpenalty\etocskipfirstprefix} + {\addpenalty\@itempenalty} + {\begingroup + \etocfonttwo + \addvspace{\etocseptwo}% + \parindent \z@ \parfillskip \z@ + \setbox\z@\vbox{\parfillskip\@flushglue + \etocname\par\setbox\tw@\lastbox + \global\setbox\@ne\hbox{\unhbox\tw@}}% + \dimen\z@=\wd\@ne + \setbox\z@=\etoctoclineleaders + \advance\dimen\z@\wd\z@ + \etocifnumbered + {\setbox\tw@\hbox{\etocnumber, \etocabbrevpagename\etocpage\etocnoprotrusion}} + {\setbox\tw@\hbox{\etocabbrevpagename\etocpage\etocnoprotrusion}}% + \advance\dimen\z@\wd\tw@ + \ifdim\dimen\z@ < \linewidth + \vbox{\etocname~% + \leaders\box\z@\hfil\box\tw@ + \baselineskip\etocbaselinespreadtwo\baselineskip + \par}% + \else + \vbox{\etocname~% + \leaders\copy\z@\hfil\break + \hbox{}\leaders\box\z@\hfil\box\tw@ + \baselineskip\etocbaselinespreadtwo\baselineskip + \par}% + \fi + \endgroup} + {\addpenalty\@secpenalty\addvspace{\etocsepone}}% +} +\def\etocdefaultlines@setsubsubsection{% +\Etoc@setstyle@b + {3}% + {\addpenalty\@M + \etocfontthree + \vspace{\etocsepthree}% + \noindent + \etocskipfirstprefix} + {\allowbreak\,--\,} + {\etocname} + {.\hfil + \begingroup + \baselineskip\etocbaselinespreadthree\baselineskip + \par + \endgroup + \addpenalty{-\@highpenalty}} +} +\def\etocdefaultlines@setdeeperones{% +\Etoc@setstyle@e{4}% +\Etoc@setstyle@e{5}% +\ifEtoc@deeplevels + \Etoc@setstyle@e{6}% + \Etoc@setstyle@e{7}% + \Etoc@setstyle@e{8}% + \Etoc@setstyle@e{9}% + \Etoc@setstyle@e{10}% + \Etoc@setstyle@e{11}% +\fi +} +\def\etocabovetocskip{3.5ex \@plus 1ex \@minus .2ex} +\def\etocbelowtocskip{3.5ex \@plus 1ex \@minus .2ex} +\def\etoccolumnsep{2em} +\def\etocmulticolsep{0ex} +\def\etocmulticolpretolerance{-1} +\def\etocmulticoltolerance{200} +\def\etocdefaultnbcol{2} +\def\etocinnertopsep{2ex} +\newcommand\etocmulticolstyle[2][\etocdefaultnbcol]{% +\etocsettocstyle + {\let\etocoldpar\par + \addvspace{\etocabovetocskip}% + \ifnum #1>\@ne + \expandafter\@firstoftwo + \else \expandafter\@secondoftwo + \fi + {\multicolpretolerance\etocmulticolpretolerance + \multicoltolerance\etocmulticoltolerance + \setlength{\columnsep}{\etoccolumnsep}% + \setlength{\multicolsep}{\etocmulticolsep}% + \begin{multicols}{#1}[#2\etocoldpar\addvspace{\etocinnertopsep}]} + {#2\ifvmode\else\begingroup\interlinepenalty\@M\parskip\z@skip + \@@par\endgroup + \fi + \nobreak\addvspace{\etocinnertopsep}% + \pretolerance\etocmulticolpretolerance + \tolerance\etocmulticoltolerance}% + }% + {\ifnum #1>\@ne + \expandafter\@firstofone + \else \expandafter\@gobble + \fi + {\end{multicols}}% + \addvspace{\etocbelowtocskip}}% +} +\def\etocinnerbottomsep{3.5ex} +\def\etocinnerleftsep{2em} +\def\etocinnerrightsep{2em} +\def\etoctoprule{\hrule} +\def\etocleftrule{\vrule} +\def\etocrightrule{\vrule} +\def\etocbottomrule{\hrule} +\def\etoctoprulecolorcmd{\relax} +\def\etocbottomrulecolorcmd{\relax} +\def\etocleftrulecolorcmd{\relax} +\def\etocrightrulecolorcmd{\relax} +\def\etoc@ruledheading #1{% + \hb@xt@\linewidth{\color@begingroup + \hss #1\hss\hskip-\linewidth + \etoctoprulecolorcmd\leaders\etoctoprule\hss + \phantom{#1}% + \leaders\etoctoprule\hss\color@endgroup}% + \nointerlineskip\nobreak\vskip\etocinnertopsep} +\newcommand*\etocruledstyle[2][\etocdefaultnbcol]{% +\etocsettocstyle + {\addvspace{\etocabovetocskip}% + \ifnum #1>\@ne + \expandafter\@firstoftwo + \else \expandafter\@secondoftwo + \fi + {\multicolpretolerance\etocmulticolpretolerance + \multicoltolerance\etocmulticoltolerance + \setlength{\columnsep}{\etoccolumnsep}% + \setlength{\multicolsep}{\etocmulticolsep}% + \begin{multicols}{#1}[\etoc@ruledheading{#2}]} + {\etoc@ruledheading{#2}% + \pretolerance\etocmulticolpretolerance + \tolerance\etocmulticoltolerance}} + {\ifnum #1>\@ne\expandafter\@firstofone + \else \expandafter\@gobble + \fi + {\end{multicols}}% + \addvspace{\etocbelowtocskip}}} +\def\etocframedmphook{\relax} +\long\def\etocbkgcolorcmd{\relax} +\long\def\Etoc@relax{\relax} +\newbox\etoc@framed@titlebox +\newbox\etoc@framed@contentsbox +\newcommand*\etocframedstyle[2][\etocdefaultnbcol]{% +\etocsettocstyle{% + \addvspace{\etocabovetocskip}% + \sbox\z@{#2}% + \dimen\z@\dp\z@ + \ifdim\wd\z@<\linewidth \dp\z@\z@ \else \dimen\z@\z@ \fi + \setbox\etoc@framed@titlebox=\hb@xt@\linewidth{\color@begingroup + \hss + \ifx\etocbkgcolorcmd\Etoc@relax + \else + \sbox\tw@{\color{white}% + \vrule\@width\wd\z@\@height\ht\z@\@depth\dimen\z@}% + \ifdim\wd\z@<\linewidth \dp\tw@\z@\fi + \box\tw@ + \hskip-\wd\z@ + \fi + \copy\z@ + \hss + \hskip-\linewidth + \etoctoprulecolorcmd\leaders\etoctoprule\hss + \hskip\wd\z@ + \etoctoprulecolorcmd\leaders\etoctoprule\hss\color@endgroup}% + \setbox\z@\hbox{\etocleftrule\etocrightrule}% + \dimen\tw@\linewidth\advance\dimen\tw@-\wd\z@ + \advance\dimen\tw@-\etocinnerleftsep + \advance\dimen\tw@-\etocinnerrightsep + \setbox\etoc@framed@contentsbox=\vbox\bgroup + \hsize\dimen\tw@ + \kern\dimen\z@ + \vskip\etocinnertopsep + \hbox\bgroup + \begin{minipage}{\hsize}% + \etocframedmphook + \ifnum #1>\@ne + \expandafter\@firstoftwo + \else \expandafter\@secondoftwo + \fi + {\multicolpretolerance\etocmulticolpretolerance + \multicoltolerance\etocmulticoltolerance + \setlength{\columnsep}{\etoccolumnsep}% + \setlength{\multicolsep}{\etocmulticolsep}% + \begin{multicols}{#1}} + {\pretolerance\etocmulticolpretolerance + \tolerance\etocmulticoltolerance}} + {\ifnum #1>\@ne\expandafter\@firstofone + \else \expandafter\@gobble + \fi + {\end{multicols}\unskip }% + \end{minipage}% + \egroup + \vskip\etocinnerbottomsep + \egroup + \vbox{\hsize\linewidth + \ifx\etocbkgcolorcmd\Etoc@relax + \else + \kern\ht\etoc@framed@titlebox + \kern\dp\etoc@framed@titlebox + \hb@xt@\linewidth{\color@begingroup + \etocleftrulecolorcmd\etocleftrule + \etocbkgcolorcmd + \leaders\vrule + \@height\ht\etoc@framed@contentsbox + \@depth\dp\etoc@framed@contentsbox + \hss + \etocrightrulecolorcmd\etocrightrule + \color@endgroup}\nointerlineskip + \vskip-\dp\etoc@framed@contentsbox + \vskip-\ht\etoc@framed@contentsbox + \vskip-\dp\etoc@framed@titlebox + \vskip-\ht\etoc@framed@titlebox + \fi + \box\etoc@framed@titlebox\nointerlineskip + \hb@xt@\linewidth{\color@begingroup + {\etocleftrulecolorcmd\etocleftrule}% + \hss\box\etoc@framed@contentsbox\hss + \etocrightrulecolorcmd\etocrightrule\color@endgroup} + \nointerlineskip + \vskip\ht\etoc@framed@contentsbox + \vskip\dp\etoc@framed@contentsbox + \hb@xt@\linewidth{\color@begingroup\etocbottomrulecolorcmd + \leaders\etocbottomrule\hss\color@endgroup}} + \addvspace{\etocbelowtocskip}}} +\newcommand\etoc@multicoltoc[2][\etocdefaultnbcol]{% + \etocmulticolstyle[#1]{#2}% + \tableofcontents} +\newcommand\etoc@multicoltoci[2][\etocdefaultnbcol]{% + \etocmulticolstyle[#1]{#2}% + \tableofcontents*} +\newcommand\etoc@local@multicoltoc[2][\etocdefaultnbcol]{% + \etocmulticolstyle[#1]{#2}% + \localtableofcontents} +\newcommand\etoc@local@multicoltoci[2][\etocdefaultnbcol]{% + \etocmulticolstyle[#1]{#2}% + \localtableofcontents*} +\newcommand*\etoc@ruledtoc[2][\etocdefaultnbcol]{% + \etocruledstyle[#1]{#2}% + \tableofcontents} +\newcommand*\etoc@ruledtoci[2][\etocdefaultnbcol]{% + \etocruledstyle[#1]{#2}% + \tableofcontents*} +\newcommand*\etoc@local@ruledtoc[2][\etocdefaultnbcol]{% + \etocruledstyle[#1]{#2}% + \localtableofcontents} +\newcommand*\etoc@local@ruledtoci[2][\etocdefaultnbcol]{% + \etocruledstyle[#1]{#2}% + \localtableofcontents*} +\newcommand*\etoc@framedtoc[2][\etocdefaultnbcol]{% + \etocframedstyle[#1]{#2}% + \tableofcontents} +\newcommand*\etoc@framedtoci[2][\etocdefaultnbcol]{% + \etocframedstyle[#1]{#2}% + \tableofcontents*} +\newcommand*\etoc@local@framedtoc[2][\etocdefaultnbcol]{% + \etocframedstyle[#1]{#2}% + \localtableofcontents} +\newcommand*\etoc@local@framedtoci[2][\etocdefaultnbcol]{% + \etocframedstyle[#1]{#2}% + \localtableofcontents*} +\def\etocmulticol{\begingroup + \Etoc@mustclosegrouptrue + \@ifstar + {\etoc@multicoltoci} + {\etoc@multicoltoc}} +\def\etocruled{\begingroup + \Etoc@mustclosegrouptrue + \@ifstar + {\etoc@ruledtoci} + {\etoc@ruledtoc}} +\def\etocframed{\begingroup + \Etoc@mustclosegrouptrue + \@ifstar + {\etoc@framedtoci} + {\etoc@framedtoc}} +\def\etoclocalmulticol{\begingroup + \Etoc@mustclosegrouptrue + \@ifstar + {\etoc@local@multicoltoci} + {\etoc@local@multicoltoc}} +\def\etoclocalruled{\begingroup + \Etoc@mustclosegrouptrue + \@ifstar + {\etoc@local@ruledtoci} + {\etoc@local@ruledtoc}} +\def\etoclocalframed{\begingroup + \Etoc@mustclosegrouptrue + \@ifstar + {\etoc@local@framedtoci} + {\etoc@local@framedtoc}} +\def\etocmemoirtoctotocfmt #1#2{% + \PackageWarning{etoc} + {\string\etocmemoirtoctotocfmt\space is deprecated.\MessageBreak + Use in its place \string\etocsettoclineforclasstoc,\MessageBreak + and \string\etocsettoclineforclasslistof{toc} (or {lof}, {lot}). + I will do this now.\MessageBreak + Reported}% + \etocsettoclineforclasstoc{#1}{#2}% + \etocsettoclineforclasslistof{toc}{#1}{#2}% +} +\def\etocsettoclineforclasstoc #1#2{% + \def\etocclassmaintocaddtotoc{\etocglobalheadtotoc{#1}{#2}}% +} +\def\etocsettoclineforclasslistof #1#2#3{% + \@namedef{etocclasslocal#1addtotoc}{\etoclocalheadtotoc{#2}{#3}}% +} +\let\etocclasslocaltocaddtotoc\@empty +\let\etocclasslocallofaddtotoc\@empty +\let\etocclasslocallotaddtotoc\@empty +\ifdefined\c@chapter + \def\etocclasslocaltocmaketitle{\section*{\localcontentsname}} + \def\etocclasslocallofmaketitle{\section*{\locallistfigurename}} + \def\etocclasslocallotmaketitle{\section*{\locallisttablename}} + \etocsettoclineforclasstoc {chapter}{\contentsname} + \etocsettoclineforclasslistof{toc}{section}{\localcontentsname} + \etocsettoclineforclasslistof{lof}{section}{\locallistfigurename} + \etocsettoclineforclasslistof{lot}{section}{\locallisttablename} +\else + \def\etocclasslocaltocmaketitle{\subsection*{\localcontentsname}}% + \def\etocclasslocallofmaketitle{\subsection*{\locallistfigurename}}% + \def\etocclasslocallotmaketitle{\subsection*{\locallisttablename}}% + \etocsettoclineforclasstoc {section}{\contentsname} + \etocsettoclineforclasslistof{toc}{subsection}{\localcontentsname} + \etocsettoclineforclasslistof{lof}{subsection}{\locallistfigurename} + \etocsettoclineforclasslistof{lot}{subsection}{\locallisttablename} +\fi +\def\etocclasslocalperhapsaddtotoc #1{% + \etocifisstarred + {} + {\csname ifEtoc@local#1totoc\endcsname + \csname etocclasslocal#1addtotoc\endcsname + \fi + }% +} +\def\etocarticlestyle{% + \etocsettocstyle + {\ifEtoc@localtoc + \@nameuse{etocclasslocal\Etoc@currext maketitle}% + \etocclasslocalperhapsaddtotoc\Etoc@currext + \else + \section *{\contentsname + \@mkboth {\MakeUppercase \contentsname} + {\MakeUppercase \contentsname}}% + \etocifisstarred{}{\etocifmaintoctotoc{\etocclassmaintocaddtotoc}{}}% + \fi + } + {}% +} +\def\etocarticlestylenomarks{% + \etocsettocstyle + {\ifEtoc@localtoc + \@nameuse{etocclasslocal\Etoc@currext maketitle}% + \etocclasslocalperhapsaddtotoc\Etoc@currext + \else + \section *{\contentsname}% + \etocifisstarred{}{\etocifmaintoctotoc{\etocclassmaintocaddtotoc}{}}% + \fi + } + {}% +} +\def\etocbookstyle{% + \etocsettocstyle + {\if@twocolumn \@restonecoltrue \onecolumn \else \@restonecolfalse \fi + \ifEtoc@localtoc + \@nameuse{etocclasslocal\Etoc@currext maketitle}% + \etocclasslocalperhapsaddtotoc\Etoc@currext + \else + \chapter *{\contentsname + \@mkboth {\MakeUppercase \contentsname} + {\MakeUppercase \contentsname}}% + \etocifisstarred{}{\etocifmaintoctotoc{\etocclassmaintocaddtotoc}{}}% + \fi + }% + {\if@restonecol \twocolumn \fi}% +} +\def\etocbookstylenomarks{% + \etocsettocstyle + {\if@twocolumn \@restonecoltrue \onecolumn \else \@restonecolfalse \fi + \ifEtoc@localtoc + \@nameuse{etocclasslocal\Etoc@currext maketitle}% + \etocclasslocalperhapsaddtotoc\Etoc@currext + \else + \chapter *{\contentsname}% + \etocifisstarred{}{\etocifmaintoctotoc{\etocclassmaintocaddtotoc}{}}% + \fi + }% + {\if@restonecol \twocolumn \fi}% +} +\let\etocreportstyle\etocbookstyle +\let\etocreportstylenomarks\etocbookstylenomarks +\def\etocmemoirstyle{% + \etocsettocstyle + {\ensureonecol \par \begingroup \phantomsection + \ifx\Etoc@aftertitlehook\@empty + \else + \ifmem@em@starred@listof + \else + \ifEtoc@localtoc + \etocclasslocalperhapsaddtotoc\Etoc@currext + \else + \ifEtoc@maintoctotoc + \etocclassmaintocaddtotoc + \fi + \fi + \fi + \fi + \ifEtoc@localtoc + \@namedef{@\Etoc@currext maketitle}{% + \@nameuse{etocclasslocal\Etoc@currext maketitle}% + }% + \fi + \@nameuse {@\Etoc@currext maketitle} %<< space token here from memoir code + \ifx\Etoc@aftertitlehook\@empty + \else + \Etoc@aftertitlehook \let \Etoc@aftertitlehook \relax + \fi + \parskip \cftparskip \@nameuse {cft\Etoc@currext beforelisthook}% + }% + {\@nameuse {cft\Etoc@currext afterlisthook}% + \endgroup\restorefromonecol + }% +} +\let\Etoc@beforetitlehook\@empty +\if1\@ifclassloaded{scrartcl}0{\@ifclassloaded{scrbook}0{\@ifclassloaded{scrreprt}01}}% +\expandafter\@gobble +\else + \ifdefined\setuptoc + \def\Etoc@beforetitlehook{% + \ifEtoc@localtoc + \etocclasslocalperhapsaddtotoc\Etoc@currext + \setuptoc{\Etoc@currext}{leveldown}% + \else + \etocifisstarred{}{\etocifmaintoctotoc{\setuptoc{toc}{totoc}}}% + \fi + }% + \fi +\expandafter\@firstofone +\fi +{\def\etocclasslocalperhapsaddtotoc #1{% + \etocifisstarred + {}% + {\csname ifEtoc@local#1totoc\endcsname + \setuptoc{\Etoc@currext}{totoc}% + \fi + }% + }% +} +\ifdefined\Iftocfeature + \def\etoc@Iftocfeature{\Iftocfeature}% +\else + \def\etoc@Iftocfeature{\iftocfeature}% +\fi +\def\etocscrartclstyle{% + \etocsettocstyle + {\ifx\Etoc@currext\Etoc@tocext + \expandafter\@firstofone + \else + \expandafter\@gobble + \fi + {\let\if@dynlist\if@tocleft}% + \edef\@currext{\Etoc@currext}% + \@ifundefined{listof\@currext name}% + {\def\list@fname{\listofname~\@currext}}% + {\expandafter\let\expandafter\list@fname + \csname listof\@currext name\endcsname}% + \etoc@Iftocfeature {\@currext}{onecolumn} + {\etoc@Iftocfeature {\@currext}{leveldown} + {} + {\if@twocolumn \aftergroup \twocolumn \onecolumn \fi }} + {}% + \etoc@Iftocfeature {\@currext}{numberline}% + {\def \nonumberline {\numberline {}}}{}% + \expandafter\tocbasic@listhead\expandafter {\list@fname}% + \begingroup \expandafter \expandafter \expandafter + \endgroup \expandafter + \ifx + \csname microtypesetup\endcsname \relax + \else + \etoc@Iftocfeature {\@currext}{noprotrusion}{} + {\microtypesetup {protrusion=false}% + \PackageInfo {tocbasic}% + {character protrusion at \@currext\space deactivated}}% + \fi + \etoc@Iftocfeature{\@currext}{noparskipfake}{}{% + \ifvmode \@tempskipa\lastskip \vskip-\lastskip + \addtolength{\@tempskipa}{\parskip}\vskip\@tempskipa\fi + }% + \setlength {\parskip }{\z@ }% + \setlength {\parindent }{\z@ }% + \setlength {\parfillskip }{\z@ \@plus 1fil}% + \csname tocbasic@@before@hook\endcsname + \csname tb@\@currext @before@hook\endcsname + }% end of before_toc + {% start of after_toc + \providecommand\tocbasic@end@toc@file{}\tocbasic@end@toc@file + \edef\@currext{\Etoc@currext}% + \csname tb@\@currext @after@hook\endcsname + \csname tocbasic@@after@hook\endcsname + }% end of after_toc +} +\let\etocscrbookstyle\etocscrartclstyle +\let\etocscrreprtstyle\etocscrartclstyle +\def\etocclasstocstyle{\etocarticlestyle} +\newcommand*\etocmarkboth[1]{% + \@mkboth{\MakeUppercase{#1}}{\MakeUppercase{#1}}} +\newcommand*\etocmarkbothnouc[1]{\@mkboth{#1}{#1}} +\newcommand\etoctocstyle[3][section]{\etocmulticolstyle[#2]% + {\csname #1\endcsname *{#3}}} +\newcommand\etoctocstylewithmarks[4][section]{\etocmulticolstyle[#2]% + {\csname #1\endcsname *{#3\etocmarkboth{#4}}}} +\newcommand\etoctocstylewithmarksnouc[4][section]{\etocmulticolstyle[#2]% + {\csname #1\endcsname *{#3\etocmarkbothnouc{#4}}}} +\def\Etoc@redefetocstylesforchapters{% + \renewcommand\etoctocstylewithmarks[4][chapter]{% + \etocmulticolstyle[##2]{\csname ##1\endcsname *{##3\etocmarkboth{##4}}}% + } + \renewcommand\etoctocstylewithmarksnouc[4][chapter]{% + \etocmulticolstyle[##2]{\csname ##1\endcsname *{##3\etocmarkbothnouc{##4}}}% + } + \renewcommand\etoctocstyle[3][chapter]{% + \etocmulticolstyle[##2]{\csname ##1\endcsname *{##3}} + } +} +\@ifclassloaded{scrartcl} + {\renewcommand*\etocclasstocstyle{\etocscrartclstyle}}{} +\@ifclassloaded{book} + {\renewcommand*\etocfontone{\normalfont\normalsize} + \renewcommand*\etocclasstocstyle{\etocbookstyle} + \Etoc@redefetocstylesforchapters}{} +\@ifclassloaded{report} + {\renewcommand*\etocfontone{\normalfont\normalsize} + \renewcommand*\etocclasstocstyle{\etocreportstyle} + \Etoc@redefetocstylesforchapters}{} +\@ifclassloaded{scrbook} + {\renewcommand*\etocfontone{\normalfont\normalsize} + \renewcommand*\etocclasstocstyle{\etocscrbookstyle} + \Etoc@redefetocstylesforchapters}{} +\@ifclassloaded{scrreprt} + {\renewcommand*\etocfontone{\normalfont\normalsize} + \renewcommand*\etocclasstocstyle{\etocscrreprtstyle} + \Etoc@redefetocstylesforchapters}{} +\@ifclassloaded{memoir} + {\renewcommand*\etocfontone{\normalfont\normalsize} + \renewcommand*\etocclasstocstyle{\etocmemoirstyle} + \Etoc@redefetocstylesforchapters}{} +\def\etoctocloftstyle {% + \etocsettocstyle{% + \@cfttocstart + \par + \begingroup + \parindent\z@ \parskip\cftparskip + \@nameuse{@cftmake\Etoc@currext title}% + \ifEtoc@localtoc + \etoctocloftlocalperhapsaddtotoc\Etoc@currext + \else + \etocifisstarred {}{\ifEtoc@maintoctotoc\@cftdobibtoc\fi}% + \fi + }% + {% + \endgroup + \@cfttocfinish + }% +} +\def\etoctocloftlocalperhapsaddtotoc#1{% + \etocifisstarred + {}% + {\csname ifEtoc@local#1totoc\endcsname + \ifdefined\c@chapter\def\@tocextra{@section}\else\def\@tocextra{@subsection}\fi + \csname @cftdobib#1\endcsname + \fi + }% +} +\def\etoctocbibindstyle {% + \etocsettocstyle {% + \toc@start + \ifEtoc@localtoc + \@nameuse{etocclasslocal\Etoc@currext maketitle}% + \etocclasslocalperhapsaddtotoc\Etoc@currext + \else + \etoc@tocbibind@dotoctitle + \fi + }% + {\toc@finish}% +} +\def\etoc@tocbibind@dotoctitle {% + \if@bibchapter + \etocifisstarred + {\chapter*{\contentsname}\prw@mkboth{\contentsname} % id. + }% + {\ifEtoc@maintoctotoc + \toc@chapter{\contentsname} %<-space from original + \else + \chapter*{\contentsname}\prw@mkboth{\contentsname} % id. + \fi + }% + \else + \etocifisstarred + {\@nameuse{\@tocextra}*{\contentsname\prw@mkboth{\contentsname}} %<-space + } + {\ifEtoc@maintoctotoc + \toc@section{\@tocextra}{\contentsname} %<-space from original + \else + \@nameuse{\@tocextra}*{\contentsname\prw@mkboth{\contentsname}} % id. + \fi + }% + \fi +}% +\@ifclassloaded{memoir} +{} +{% memoir not loaded + \@ifpackageloaded{tocloft} + {\if@cftnctoc\else + \ifEtoc@keeporiginaltoc + \else + \AtBeginDocument{\let\tableofcontents\etoctableofcontents}% + \fi + \fi } + {\AtBeginDocument + {\@ifpackageloaded{tocloft} + {\if@cftnctoc\else + \PackageWarningNoLine {etoc} + {Package `tocloft' was loaded after `etoc'.\MessageBreak + To prevent it from overwriting \protect\tableofcontents, it will\MessageBreak + be tricked into believing to have been loaded with its\MessageBreak + option `titles'. \space But this will cause the `tocloft'\MessageBreak + customization of the titles of the main list of figures\MessageBreak + and list of tables to not apply either.\MessageBreak + You should load `tocloft' before `etoc'.}% + \AtEndDocument{\PackageWarning{etoc} + {Please load `tocloft' before `etoc'!\@gobbletwo}}% + \fi + \@cftnctoctrue }% + {}% + }% + }% +} +\@ifclassloaded{memoir} +{} +{% memoir not loaded + \AtBeginDocument{% + \@ifpackageloaded{tocloft} + {% + \def\etocclasstocstyle{% + \etoctocloftstyle + \Etoc@classstyletrue + }% + \ifEtoc@etocstyle + \ifEtoc@classstyle + \etocclasstocstyle + \Etoc@etocstyletrue + \fi + \else + \ifEtoc@classstyle + \etocclasstocstyle + \fi + \fi + }% + {% no tocloft + \@ifpackageloaded {tocbibind} + {\if@dotoctoc + \def\etocclasstocstyle{% + \etoctocbibindstyle + \Etoc@classstyletrue + }% + \ifEtoc@etocstyle + \ifEtoc@classstyle + \etocclasstocstyle + \Etoc@etocstyletrue + \fi + \else + \ifEtoc@classstyle + \etocclasstocstyle + \fi + \fi + \ifEtoc@keeporiginaltoc + \else + \let\tableofcontents\etoctableofcontents + \fi + }% + {}% + }% + \@ifpackageloaded{tocbibind} + {% tocbibind, perhaps with tocloft + \if@dotoctoc + \ifEtoc@keeporiginaltoc + \else + \let\tableofcontents\etoctableofcontents + \fi + \etocsetup{maintoctotoc,localtoctotoc}% + \PackageInfo{etoc}{% + Setting (or re-setting) the options `maintoctotoc' and\MessageBreak + `localtoctotoc' to true as tocbibind was detected and\MessageBreak + found to be configured for `TOC to toc'.\MessageBreak + Reported at begin document}% + \fi + \if@dotoclof + \ifEtoc@lof + \etocsetup{localloftotoc}% + \PackageInfo{etoc}{% + Setting (or re-setting) `localloftotoc=true' as the\MessageBreak + package tocbibind was detected and is configured for\MessageBreak + `LOF to toc'. Reported at begin document}% + \fi + \fi + \if@dotoclot + \ifEtoc@lot + \etocsetup{locallottotoc}% + \PackageInfo{etoc}{% + Setting (or re-setting) `locallottotoc=true' as the\MessageBreak + package tocbibind was detected and is configured for\MessageBreak + `LOT to toc'. Reported at begin document}% + \fi + \fi + }% end of tocbibind branch + {}% + }% end of at begin document +}% end of not with memoir branch +\def\Etoc@addtocontents #1#2{% + \addtocontents {toc}{% + \protect\contentsline{#1}{#2}{\thepage}{\ifEtoc@hyperref\@currentHref\fi}% + \ifdefined\protected@file@percent\protected@file@percent\fi + }% +} +\def\Etoc@addcontentsline@ #1#2#3{% + \@namedef{toclevel@#1}{#3}\addcontentsline {toc}{#1}{#2}% +} +\DeclareRobustCommand*{\etoctoccontentsline} + {\@ifstar{\Etoc@addcontentsline@}{\Etoc@addtocontents}} +\def\Etoc@addtocontents@immediately#1#2{% + \begingroup + \let\Etoc@originalwrite\write + \def\write{\immediate\Etoc@originalwrite}% + \Etoc@addtocontents{#1}{#2}% + \endgroup +} +\def\Etoc@addcontentsline@@immediately#1#2#3{% + \begingroup + \let\Etoc@originalwrite\write + \def\write{\immediate\Etoc@originalwrite}% + \Etoc@addcontentsline@{#1}{#2}{#3}% + \endgoroup +} +\DeclareRobustCommand*{\etocimmediatetoccontentsline} + {\@ifstar{\Etoc@addcontentsline@@immediately}{\Etoc@addtocontents@immediately}} +\def\Etoc@storetocdepth {\xdef\Etoc@savedtocdepth{\number\c@tocdepth}} +\def\Etoc@restoretocdepth {\global\c@tocdepth\Etoc@savedtocdepth\relax} +\def\etocobeytoctocdepth {\def\etoc@settocdepth + {\afterassignment\Etoc@@nottoodeep \global\c@tocdepth}} +\def\Etoc@@nottoodeep {\ifnum\Etoc@savedtocdepth<\c@tocdepth + \global\c@tocdepth\Etoc@savedtocdepth\relax\fi } +\def\etocignoretoctocdepth {\let\etoc@settocdepth\@gobble } +\def\etocsettocdepth {\futurelet\Etoc@nexttoken\Etoc@set@tocdepth } +\def\Etoc@set@tocdepth {\ifx\Etoc@nexttoken\bgroup + \expandafter\Etoc@set@tocdepth@ + \else\expandafter\Etoc@set@toctocdepth + \fi } +\def\Etoc@set@tocdepth@ #1{\@ifundefined {Etoc@#1@@} + {\PackageWarning{etoc} + {Unknown sectioning unit #1, \protect\etocsettocdepth\space ignored}} + {\global\c@tocdepth\csname Etoc@#1@@\endcsname}% +} +\def\Etoc@set@toctocdepth #1#{\Etoc@set@toctocdepth@ } +\def\Etoc@set@toctocdepth@ #1{% + \@ifundefined{Etoc@#1@@}% + {\PackageWarning{etoc} + {Unknown sectioning depth #1, \protect\etocsettocdepth.toc ignored}}% + {\addtocontents {toc} + {\protect\etoc@settocdepth\expandafter\protect\csname Etoc@#1@@\endcsname}}% +} +\def\etocimmediatesettocdepth #1#{\Etoc@set@toctocdepth@immediately} +\def\Etoc@set@toctocdepth@immediately #1{% + \@ifundefined{Etoc@#1@@}% + {\PackageWarning{etoc} + {Unknown sectioning depth #1, \protect\etocimmediatesettocdepth.toc ignored}}% + {\begingroup + \let\Etoc@originalwrite\write + \def\write{\immediate\Etoc@originalwrite}% + \addtocontents {toc} + {\protect\etoc@settocdepth\expandafter\protect + \csname Etoc@#1@@\endcsname}% + \endgroup + }% +} +\def\etocdepthtag #1#{\Etoc@depthtag } +\def\Etoc@depthtag #1{\addtocontents {toc}{\protect\etoc@depthtag {#1}}} +\def\etocimmediatedepthtag #1#{\Etoc@depthtag@immediately } +\def\Etoc@depthtag@immediately #1{% + \begingroup + \let\Etoc@originalwrite\write + \def\write{\immediate\Etoc@originalwrite}% + \addtocontents {toc}{\protect\etoc@depthtag {#1}}% + \endgroup +} +\def\etocignoredepthtags {\let\etoc@depthtag \@gobble } +\def\etocobeydepthtags {\let\etoc@depthtag \Etoc@depthtag@ } +\def\Etoc@depthtag@ #1{\@ifundefined{Etoc@depthof@#1}% + {}% ignore in silence if tag has no associated depth + {\afterassignment\Etoc@@nottoodeep + \global\c@tocdepth\csname Etoc@depthof@#1\endcsname}% +} +\def\etocsettagdepth #1#2{\@ifundefined{Etoc@#2@@}% + {\PackageWarning{etoc} + {Unknown sectioning depth #2, \protect\etocsettagdepth\space ignored}}% + {\@namedef{Etoc@depthof@#1}{\@nameuse{Etoc@#2@@}}}% +} +\def\Etoc@tocvsec@err #1{\PackageError {etoc} + {The command \protect#1\space is incompatible with `etoc'} + {Use \protect\etocsettocdepth.toc as replacement}% +}% +\AtBeginDocument {% + \@ifclassloaded{memoir} + {\PackageInfo {etoc} + {Regarding `memoir' class command \protect\settocdepth, consider\MessageBreak + \protect\etocsettocdepth.toc as a drop-in replacement with more\MessageBreak + capabilities (see `etoc' manual). \space + Also, \protect\etocsettocdepth\MessageBreak + and \protect\etocsetnexttocdepth\space should be used in place of\MessageBreak + `memoir' command \protect\maxtocdepth\@gobble}% + }% + {\@ifpackageloaded {tocvsec2}{% + \def\maxtocdepth #1{\Etoc@tocvsec@err \maxtocdepth }% + \def\settocdepth #1{\Etoc@tocvsec@err \settocdepth }% + \def\resettocdepth {\@ifstar {\Etoc@tocvsec@err \resettocdepth }% + {\Etoc@tocvsec@err \resettocdepth }% + }% + \def\save@tocdepth #1#2#3{}% + \let\reset@tocdepth\relax + \let\remax@tocdepth\relax + \let\tableofcontents\etoctableofcontents + \PackageWarningNoLine {etoc} + {Package `tocvsec2' detected and its modification of\MessageBreak + \protect\tableofcontents\space reverted. \space Use + \protect\etocsettocdepth.toc\MessageBreak as a replacement + for `tocvsec2' toc-related commands}% + }% tocvsec2 loaded + {}% tocvsec2 not loaded + }% +}% +\def\invisibletableofcontents {\etocsetnexttocdepth {-3}\tableofcontents }% +\def\invisiblelocaltableofcontents + {\etocsetnexttocdepth {-3}\localtableofcontents }% +\def\etocsetnexttocdepth #1{% + \@ifundefined{Etoc@#1@@} + {\PackageWarning{etoc} + {Unknown sectioning unit #1, \protect\etocsetnextocdepth\space ignored}} + {\Etoc@setnexttocdepth{\csname Etoc@#1@@\endcsname}}% +}% +\def\Etoc@setnexttocdepth#1{% + \def\Etoc@tocdepthset{% + \Etoc@tocdepthreset + \edef\Etoc@tocdepthreset {% + \global\c@tocdepth\the\c@tocdepth\space + \global\let\noexpand\Etoc@tocdepthreset\noexpand\@empty + }% + \global\c@tocdepth#1% + \global\let\Etoc@tocdepthset\@empty + }% +}% +\let\Etoc@tocdepthreset\@empty +\let\Etoc@tocdepthset \@empty +\def\etocsetlocaltop #1#{\Etoc@set@localtop}% +\def\Etoc@set@localtop #1{% + \@ifundefined{Etoc@#1@@}% + {\PackageWarning{etoc} + {Unknown sectioning depth #1, \protect\etocsetlocaltop.toc ignored}}% + {\addtocontents {toc} + {\protect\etoc@setlocaltop\expandafter\protect\csname Etoc@#1@@\endcsname}}% +}% +\def\etocimmediatesetlocaltop #1#{\Etoc@set@localtop@immediately}% +\def\Etoc@set@localtop@immediately #1{% + \@ifundefined{Etoc@#1@@}% + {\PackageWarning{etoc} + {Unknown sectioning depth #1, \protect\etocimmediatesetlocaltop.toc ignored}}% + {\begingroup + \let\Etoc@originalwrite\write + \def\write{\immediate\Etoc@originalwrite}% + \addtocontents {toc} + {\protect\etoc@setlocaltop\expandafter\protect + \csname Etoc@#1@@\endcsname}% + \endgroup + }% +}% +\def\etoc@setlocaltop #1{% + \ifnum#1=\Etoc@maxlevel + \Etoc@skipthisonetrue + \else + \Etoc@skipthisonefalse + \global\let\Etoc@level #1% + \global\let\Etoc@virtualtop #1% + \ifEtoc@localtoc + \ifEtoc@stoptoc + \Etoc@skipthisonetrue + \else + \ifEtoc@notactive + \Etoc@skipthisonetrue + \else + \unless\ifnum\Etoc@level>\etoclocaltop + \Etoc@skipthisonetrue + \global\Etoc@stoptoctrue + \fi + \fi + \fi + \fi + \fi + \let\Etoc@next\@empty + \ifEtoc@skipthisone + \else + \ifnum\Etoc@level>\c@tocdepth + \else + \ifEtoc@standardlines + \else + \let\Etoc@next\Etoc@setlocaltop@doendsandbegin + \fi + \fi + \fi + \Etoc@next +}% +\def\Etoc@setlocaltop@doendsandbegin{% + \Etoc@doendsandbegin + \global\Etoc@skipprefixfalse +} +\addtocontents {toc}{\protect\@ifundefined{etoctocstyle}% + {\let\protect\etoc@startlocaltoc\protect\@gobble + \let\protect\etoc@settocdepth\protect\@gobble + \let\protect\etoc@depthtag\protect\@gobble + \let\protect\etoc@setlocaltop\protect\@gobble}{}}% +\def\etocstandardlines {\Etoc@standardlinestrue} +\def\etoctoclines {\Etoc@standardlinesfalse} +\etocdefaultlines +\etocstandardlines +\def\etocstandarddisplaystyle{% + \PackageWarningNoLine{etoc}{% + \string\etocstandarddisplaystyle \on@line\MessageBreak + is deprecated. \space Please use \string\etocclasstocstyle}% +} +\expandafter\def\expandafter\etocclasstocstyle\expandafter{% + \etocclasstocstyle + \Etoc@classstyletrue +} +\def\etocetoclocaltocstyle{\Etoc@etocstyletrue} +\def\etocusertocstyle{\Etoc@etocstylefalse} +\etocclasstocstyle +\etocetoclocaltocstyle +\etocobeytoctocdepth +\etocobeydepthtags +\let\etocbeforetitlehook \@empty +\let\etocaftertitlehook \@empty +\let\etocaftercontentshook \@empty +\let\etocaftertochook \@empty +\def\etockeeporiginaltableofcontents + {\Etoc@keeporiginaltoctrue\let\tableofcontents\etocoriginaltableofcontents}% +\endinput +%% +%% End of file `etoc.sty'. diff --git a/api/latex/longtable_doxygen.sty b/api/latex/longtable_doxygen.sty new file mode 100644 index 0000000..39a44b8 --- /dev/null +++ b/api/latex/longtable_doxygen.sty @@ -0,0 +1,459 @@ +%% +%% This is file `longtable.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% longtable.dtx (with options: `package') +%% +%% This is a generated file. +%% +%% The source is maintained by the LaTeX Project team and bug +%% reports for it can be opened at http://latex-project.org/bugs.html +%% (but please observe conditions on bug reports sent to that address!) +%% +%% Copyright 1993-2016 +%% The LaTeX3 Project and any individual authors listed elsewhere +%% in this file. +%% +%% This file was generated from file(s) of the Standard LaTeX `Tools Bundle'. +%% -------------------------------------------------------------------------- +%% +%% It may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3c +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3c or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% This file may only be distributed together with a copy of the LaTeX +%% `Tools Bundle'. You may however distribute the LaTeX `Tools Bundle' +%% without such generated files. +%% +%% The list of all files belonging to the LaTeX `Tools Bundle' is +%% given in the file `manifest.txt'. +%% +%% File: longtable.dtx Copyright (C) 1990-2001 David Carlisle +\NeedsTeXFormat{LaTeX2e}[1995/06/01] +\ProvidesPackage{longtable_doxygen} + [2014/10/28 v4.11 Multi-page Table package (DPC) - frozen version for doxygen] +\def\LT@err{\PackageError{longtable}} +\def\LT@warn{\PackageWarning{longtable}} +\def\LT@final@warn{% + \AtEndDocument{% + \LT@warn{Table \@width s have changed. Rerun LaTeX.\@gobbletwo}}% + \global\let\LT@final@warn\relax} +\DeclareOption{errorshow}{% + \def\LT@warn{\PackageInfo{longtable}}} +\DeclareOption{pausing}{% + \def\LT@warn#1{% + \LT@err{#1}{This is not really an error}}} +\DeclareOption{set}{} +\DeclareOption{final}{} +\ProcessOptions +\newskip\LTleft \LTleft=\fill +\newskip\LTright \LTright=\fill +\newskip\LTpre \LTpre=\bigskipamount +\newskip\LTpost \LTpost=\bigskipamount +\newcount\LTchunksize \LTchunksize=20 +\let\c@LTchunksize\LTchunksize +\newdimen\LTcapwidth \LTcapwidth=4in +\newbox\LT@head +\newbox\LT@firsthead +\newbox\LT@foot +\newbox\LT@lastfoot +\newcount\LT@cols +\newcount\LT@rows +\newcounter{LT@tables} +\newcounter{LT@chunks}[LT@tables] +\ifx\c@table\undefined + \newcounter{table} + \def\fnum@table{\tablename~\thetable} +\fi +\ifx\tablename\undefined + \def\tablename{Table} +\fi +\newtoks\LT@p@ftn +\mathchardef\LT@end@pen=30000 +\def\longtable{% + \par + \ifx\multicols\@undefined + \else + \ifnum\col@number>\@ne + \@twocolumntrue + \fi + \fi + \if@twocolumn + \LT@err{longtable not in 1-column mode}\@ehc + \fi + \begingroup + \@ifnextchar[\LT@array{\LT@array[x]}} +\def\LT@array[#1]#2{% + \refstepcounter{table}\stepcounter{LT@tables}% + \if l#1% + \LTleft\z@ \LTright\fill + \else\if r#1% + \LTleft\fill \LTright\z@ + \else\if c#1% + \LTleft\fill \LTright\fill + \fi\fi\fi + \let\LT@mcol\multicolumn + \let\LT@@tabarray\@tabarray + \let\LT@@hl\hline + \def\@tabarray{% + \let\hline\LT@@hl + \LT@@tabarray}% + \let\\\LT@tabularcr\let\tabularnewline\\% + \def\newpage{\noalign{\break}}% + \def\pagebreak{\noalign{\ifnum`}=0\fi\@testopt{\LT@no@pgbk-}4}% + \def\nopagebreak{\noalign{\ifnum`}=0\fi\@testopt\LT@no@pgbk4}% + \let\hline\LT@hline \let\kill\LT@kill\let\caption\LT@caption + \@tempdima\ht\strutbox + \let\@endpbox\LT@endpbox + \ifx\extrarowheight\@undefined + \let\@acol\@tabacol + \let\@classz\@tabclassz \let\@classiv\@tabclassiv + \def\@startpbox{\vtop\LT@startpbox}% + \let\@@startpbox\@startpbox + \let\@@endpbox\@endpbox + \let\LT@LL@FM@cr\@tabularcr + \else + \advance\@tempdima\extrarowheight + \col@sep\tabcolsep + \let\@startpbox\LT@startpbox\let\LT@LL@FM@cr\@arraycr + \fi + \setbox\@arstrutbox\hbox{\vrule + \@height \arraystretch \@tempdima + \@depth \arraystretch \dp \strutbox + \@width \z@}% + \let\@sharp##\let\protect\relax + \begingroup + \@mkpream{#2}% + \xdef\LT@bchunk{% + \global\advance\c@LT@chunks\@ne + \global\LT@rows\z@\setbox\z@\vbox\bgroup + \LT@setprevdepth + \tabskip\LTleft \noexpand\halign to\hsize\bgroup + \tabskip\z@ \@arstrut \@preamble \tabskip\LTright \cr}% + \endgroup + \expandafter\LT@nofcols\LT@bchunk&\LT@nofcols + \LT@make@row + \m@th\let\par\@empty + \everycr{}\lineskip\z@\baselineskip\z@ + \LT@bchunk} +\def\LT@no@pgbk#1[#2]{\penalty #1\@getpen{#2}\ifnum`{=0\fi}} +\def\LT@start{% + \let\LT@start\endgraf + \endgraf\penalty\z@\vskip\LTpre + \dimen@\pagetotal + \advance\dimen@ \ht\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi + \advance\dimen@ \dp\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi + \advance\dimen@ \ht\LT@foot + \dimen@ii\vfuzz + \vfuzz\maxdimen + \setbox\tw@\copy\z@ + \setbox\tw@\vsplit\tw@ to \ht\@arstrutbox + \setbox\tw@\vbox{\unvbox\tw@}% + \vfuzz\dimen@ii + \advance\dimen@ \ht + \ifdim\ht\@arstrutbox>\ht\tw@\@arstrutbox\else\tw@\fi + \advance\dimen@\dp + \ifdim\dp\@arstrutbox>\dp\tw@\@arstrutbox\else\tw@\fi + \advance\dimen@ -\pagegoal + \ifdim \dimen@>\z@\vfil\break\fi + \global\@colroom\@colht + \ifvoid\LT@foot\else + \global\advance\vsize-\ht\LT@foot + \global\advance\@colroom-\ht\LT@foot + \dimen@\pagegoal\advance\dimen@-\ht\LT@foot\pagegoal\dimen@ + \maxdepth\z@ + \fi + \ifvoid\LT@firsthead\copy\LT@head\else\box\LT@firsthead\fi\nobreak + \output{\LT@output}} +\def\endlongtable{% + \crcr + \noalign{% + \let\LT@entry\LT@entry@chop + \xdef\LT@save@row{\LT@save@row}}% + \LT@echunk + \LT@start + \unvbox\z@ + \LT@get@widths + \if@filesw + {\let\LT@entry\LT@entry@write\immediate\write\@auxout{% + \gdef\expandafter\noexpand + \csname LT@\romannumeral\c@LT@tables\endcsname + {\LT@save@row}}}% + \fi + \ifx\LT@save@row\LT@@save@row + \else + \LT@warn{Column \@width s have changed\MessageBreak + in table \thetable}% + \LT@final@warn + \fi + \endgraf\penalty -\LT@end@pen + \ifvoid\LT@foot\else + \global\advance\vsize\ht\LT@foot + \global\advance\@colroom\ht\LT@foot + \dimen@\pagegoal\advance\dimen@\ht\LT@foot\pagegoal\dimen@ + \fi + \endgroup + \global\@mparbottom\z@ + \endgraf\penalty\z@\addvspace\LTpost + \ifvoid\footins\else\insert\footins{}\fi} +\def\LT@nofcols#1&{% + \futurelet\@let@token\LT@n@fcols} +\def\LT@n@fcols{% + \advance\LT@cols\@ne + \ifx\@let@token\LT@nofcols + \expandafter\@gobble + \else + \expandafter\LT@nofcols + \fi} +\def\LT@tabularcr{% + \relax\iffalse{\fi\ifnum0=`}\fi + \@ifstar + {\def\crcr{\LT@crcr\noalign{\nobreak}}\let\cr\crcr + \LT@t@bularcr}% + {\LT@t@bularcr}} +\let\LT@crcr\crcr +\let\LT@setprevdepth\relax +\def\LT@t@bularcr{% + \global\advance\LT@rows\@ne + \ifnum\LT@rows=\LTchunksize + \gdef\LT@setprevdepth{% + \prevdepth\z@\global + \global\let\LT@setprevdepth\relax}% + \expandafter\LT@xtabularcr + \else + \ifnum0=`{}\fi + \expandafter\LT@LL@FM@cr + \fi} +\def\LT@xtabularcr{% + \@ifnextchar[\LT@argtabularcr\LT@ntabularcr} +\def\LT@ntabularcr{% + \ifnum0=`{}\fi + \LT@echunk + \LT@start + \unvbox\z@ + \LT@get@widths + \LT@bchunk} +\def\LT@argtabularcr[#1]{% + \ifnum0=`{}\fi + \ifdim #1>\z@ + \unskip\@xargarraycr{#1}% + \else + \@yargarraycr{#1}% + \fi + \LT@echunk + \LT@start + \unvbox\z@ + \LT@get@widths + \LT@bchunk} +\def\LT@echunk{% + \crcr\LT@save@row\cr\egroup + \global\setbox\@ne\lastbox + \unskip + \egroup} +\def\LT@entry#1#2{% + \ifhmode\@firstofone{&}\fi\omit + \ifnum#1=\c@LT@chunks + \else + \kern#2\relax + \fi} +\def\LT@entry@chop#1#2{% + \noexpand\LT@entry + {\ifnum#1>\c@LT@chunks + 1}{0pt% + \else + #1}{#2% + \fi}} +\def\LT@entry@write{% + \noexpand\LT@entry^^J% + \@spaces} +\def\LT@kill{% + \LT@echunk + \LT@get@widths + \expandafter\LT@rebox\LT@bchunk} +\def\LT@rebox#1\bgroup{% + #1\bgroup + \unvbox\z@ + \unskip + \setbox\z@\lastbox} +\def\LT@blank@row{% + \xdef\LT@save@row{\expandafter\LT@build@blank + \romannumeral\number\LT@cols 001 }} +\def\LT@build@blank#1{% + \if#1m% + \noexpand\LT@entry{1}{0pt}% + \expandafter\LT@build@blank + \fi} +\def\LT@make@row{% + \global\expandafter\let\expandafter\LT@save@row + \csname LT@\romannumeral\c@LT@tables\endcsname + \ifx\LT@save@row\relax + \LT@blank@row + \else + {\let\LT@entry\or + \if!% + \ifcase\expandafter\expandafter\expandafter\LT@cols + \expandafter\@gobble\LT@save@row + \or + \else + \relax + \fi + !% + \else + \aftergroup\LT@blank@row + \fi}% + \fi} +\let\setlongtables\relax +\def\LT@get@widths{% + \setbox\tw@\hbox{% + \unhbox\@ne + \let\LT@old@row\LT@save@row + \global\let\LT@save@row\@empty + \count@\LT@cols + \loop + \unskip + \setbox\tw@\lastbox + \ifhbox\tw@ + \LT@def@row + \advance\count@\m@ne + \repeat}% + \ifx\LT@@save@row\@undefined + \let\LT@@save@row\LT@save@row + \fi} +\def\LT@def@row{% + \let\LT@entry\or + \edef\@tempa{% + \ifcase\expandafter\count@\LT@old@row + \else + {1}{0pt}% + \fi}% + \let\LT@entry\relax + \xdef\LT@save@row{% + \LT@entry + \expandafter\LT@max@sel\@tempa + \LT@save@row}} +\def\LT@max@sel#1#2{% + {\ifdim#2=\wd\tw@ + #1% + \else + \number\c@LT@chunks + \fi}% + {\the\wd\tw@}} +\def\LT@hline{% + \noalign{\ifnum0=`}\fi + \penalty\@M + \futurelet\@let@token\LT@@hline} +\def\LT@@hline{% + \ifx\@let@token\hline + \global\let\@gtempa\@gobble + \gdef\LT@sep{\penalty-\@medpenalty\vskip\doublerulesep}% + \else + \global\let\@gtempa\@empty + \gdef\LT@sep{\penalty-\@lowpenalty\vskip-\arrayrulewidth}% + \fi + \ifnum0=`{\fi}% + \multispan\LT@cols + \unskip\leaders\hrule\@height\arrayrulewidth\hfill\cr + \noalign{\LT@sep}% + \multispan\LT@cols + \unskip\leaders\hrule\@height\arrayrulewidth\hfill\cr + \noalign{\penalty\@M}% + \@gtempa} +\def\LT@caption{% + \noalign\bgroup + \@ifnextchar[{\egroup\LT@c@ption\@firstofone}\LT@capti@n} +\def\LT@c@ption#1[#2]#3{% + \LT@makecaption#1\fnum@table{#3}% + \def\@tempa{#2}% + \ifx\@tempa\@empty\else + {\let\\\space + \addcontentsline{lot}{table}{\protect\numberline{\thetable}{#2}}}% + \fi} +\def\LT@capti@n{% + \@ifstar + {\egroup\LT@c@ption\@gobble[]}% + {\egroup\@xdblarg{\LT@c@ption\@firstofone}}} +\def\LT@makecaption#1#2#3{% + \LT@mcol\LT@cols c{\hbox to\z@{\hss\parbox[t]\LTcapwidth{% + \sbox\@tempboxa{#1{#2: }#3}% + \ifdim\wd\@tempboxa>\hsize + #1{#2: }#3% + \else + \hbox to\hsize{\hfil\box\@tempboxa\hfil}% + \fi + \endgraf\vskip\baselineskip}% + \hss}}} +\def\LT@output{% + \ifnum\outputpenalty <-\@Mi + \ifnum\outputpenalty > -\LT@end@pen + \LT@err{floats and marginpars not allowed in a longtable}\@ehc + \else + \setbox\z@\vbox{\unvbox\@cclv}% + \ifdim \ht\LT@lastfoot>\ht\LT@foot + \dimen@\pagegoal + \advance\dimen@\ht\LT@foot + \advance\dimen@-\ht\LT@lastfoot + \ifdim\dimen@<\ht\z@ + \setbox\@cclv\vbox{\unvbox\z@\copy\LT@foot\vss}% + \@makecol + \@outputpage + \global\vsize\@colroom + \setbox\z@\vbox{\box\LT@head}% + \fi + \fi + \unvbox\z@\ifvoid\LT@lastfoot\copy\LT@foot\else\box\LT@lastfoot\fi + \fi + \else + \setbox\@cclv\vbox{\unvbox\@cclv\copy\LT@foot\vss}% + \@makecol + \@outputpage + \global\vsize\@colroom + \copy\LT@head\nobreak + \fi} +\def\LT@end@hd@ft#1{% + \LT@echunk + \ifx\LT@start\endgraf + \LT@err + {Longtable head or foot not at start of table}% + {Increase LTchunksize}% + \fi + \setbox#1\box\z@ + \LT@get@widths + \LT@bchunk} +\def\endfirsthead{\LT@end@hd@ft\LT@firsthead} +\def\endhead{\LT@end@hd@ft\LT@head} +\def\endfoot{\LT@end@hd@ft\LT@foot} +\def\endlastfoot{\LT@end@hd@ft\LT@lastfoot} +\def\LT@startpbox#1{% + \bgroup + \let\@footnotetext\LT@p@ftntext + \setlength\hsize{#1}% + \@arrayparboxrestore + \vrule \@height \ht\@arstrutbox \@width \z@} +\def\LT@endpbox{% + \@finalstrut\@arstrutbox + \egroup + \the\LT@p@ftn + \global\LT@p@ftn{}% + \hfil} +%% added \long to prevent: +% LaTeX Warning: Command \LT@p@ftntext has changed. +% +% from the original repository (https://github.com/latex3/latex2e/blob/develop/required/tools/longtable.dtx): +% \changes{v4.15}{2021/03/28} +% {make long for gh/364} +% Inside the `p' column, just save up the footnote text in a token +% register. +\long\def\LT@p@ftntext#1{% + \edef\@tempa{\the\LT@p@ftn\noexpand\footnotetext[\the\c@footnote]}% + \global\LT@p@ftn\expandafter{\@tempa{#1}}}% + +\@namedef{ver@longtable.sty}{2014/10/28 v4.11 Multi-page Table package (DPC) - frozen version for doxygen} +\endinput +%% +%% End of file `longtable.sty'. diff --git a/api/latex/make.bat b/api/latex/make.bat new file mode 100644 index 0000000..ccd0c1b --- /dev/null +++ b/api/latex/make.bat @@ -0,0 +1,67 @@ +pushd %~dp0 +if not %errorlevel% == 0 goto :end1 + +set ORG_LATEX_CMD=%LATEX_CMD% +set ORG_MKIDX_CMD=%MKIDX_CMD% +set ORG_BIBTEX_CMD=%BIBTEX_CMD% +set ORG_LATEX_COUNT=%LATEX_COUNT% +set ORG_MANUAL_FILE=%MANUAL_FILE% +if "X"%LATEX_CMD% == "X" set LATEX_CMD=pdflatex +if "X"%MKIDX_CMD% == "X" set MKIDX_CMD=makeindex +if "X"%BIBTEX_CMD% == "X" set BIBTEX_CMD=bibtex +if "X"%LATEX_COUNT% == "X" set LATEX_COUNT=8 +if "X"%MANUAL_FILE% == "X" set MANUAL_FILE=refman + +del /s /f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out *.brf *.blg *.bbl %MANUAL_FILE%.pdf + + +%LATEX_CMD% %MANUAL_FILE% +@if ERRORLEVEL 1 goto :error +echo ---- +%MKIDX_CMD% %MANUAL_FILE%.idx +echo ---- +%LATEX_CMD% %MANUAL_FILE% +@if ERRORLEVEL 1 goto :error + +setlocal enabledelayedexpansion +set count=%LATEX_COUNT% +:repeat +set content=X +for /F "tokens=*" %%T in ( 'findstr /C:"Rerun LaTeX" %MANUAL_FILE%.log' ) do set content="%%~T" +if !content! == X for /F "tokens=*" %%T in ( 'findstr /C:"Rerun to get cross-references right" %MANUAL_FILE%.log' ) do set content="%%~T" +if !content! == X for /F "tokens=*" %%T in ( 'findstr /C:"Rerun to get bibliographical references right" %MANUAL_FILE%.log' ) do set content="%%~T" +if !content! == X goto :skip +set /a count-=1 +if !count! EQU 0 goto :skip + +echo ---- +%LATEX_CMD% %MANUAL_FILE% +@if ERRORLEVEL 1 goto :error +goto :repeat +:skip +endlocal +%MKIDX_CMD% %MANUAL_FILE%.idx +%LATEX_CMD% %MANUAL_FILE% +@if ERRORLEVEL 1 goto :error + +goto :end +:error +@echo =============== +@echo Please consult %MANUAL_FILE%.log to see the error messages +@echo =============== + +:end +@REM reset environment +popd +set LATEX_CMD=%ORG_LATEX_CMD% +set ORG_LATEX_CMD= +set MKIDX_CMD=%ORG_MKIDX_CMD% +set ORG_MKIDX_CMD= +set BIBTEX_CMD=%ORG_BIBTEX_CMD% +set ORG_BIBTEX_CMD= +set MANUAL_FILE=%ORG_MANUAL_FILE% +set ORG_MANUAL_FILE= +set LATEX_COUNT=%ORG_LATEX_COUNT% +set ORG_LATEX_COUNT= + +:end1 diff --git a/api/latex/refman.tex b/api/latex/refman.tex new file mode 100644 index 0000000..72df895 --- /dev/null +++ b/api/latex/refman.tex @@ -0,0 +1,269 @@ + % Handle batch mode + % to overcome problems with too many open files + \let\mypdfximage\pdfximage\def\pdfximage{\immediate\mypdfximage} + \RequirePackage{iftex} + \ifLuaTeX + \directlua{pdf.setminorversion(7)} + \fi + \ifXeTeX + \special{pdf:minorversion 7} + \fi + \ifPDFTeX + \pdfminorversion=7 + \fi + % Set document class depending on configuration + \documentclass[twoside]{book} + %% moved from doxygen.sty due to workaround for LaTex 2019 version and unmaintained tabu package + \usepackage{ifthen} + \ifx\requestedLaTeXdate\undefined + \usepackage{array} + \else + \usepackage{array}[=2016-10-06] + \fi + %% + % Packages required by doxygen + \makeatletter + \providecommand\IfFormatAtLeastTF{\@ifl@t@r\fmtversion} + % suppress package identification of infwarerr as it contains the word "warning" + \let\@@protected@wlog\protected@wlog + \def\protected@wlog#1{\wlog{package info suppressed}} + \RequirePackage{infwarerr} + \let\protected@wlog\@@protected@wlog + \makeatother + \IfFormatAtLeastTF{2016/01/01}{}{\usepackage{fixltx2e}} % for \textsubscript + \ifPDFTeX + \IfFormatAtLeastTF{2015/01/01}{\pdfsuppresswarningpagegroup=1}{} + \fi + \usepackage{doxygen} + \usepackage{graphicx} + \iftutex + \usepackage{fontspec} + \defaultfontfeatures{Ligatures={TeX}} + \usepackage{unicode-math} + \else + \usepackage[utf8]{inputenc} + \fi + \usepackage{makeidx} + \PassOptionsToPackage{warn}{textcomp} + \usepackage{textcomp} + \usepackage[nointegrals]{wasysym} + \usepackage{ifxetex} + % NLS support packages + % Define default fonts + % Font selection + \iftutex + \else + \usepackage[T1]{fontenc} + \fi + % set main and monospaced font + \usepackage[scaled=.90]{helvet} +\usepackage{courier} +\renewcommand{\familydefault}{\sfdefault} + \doxyallsectionsfont{% + \fontseries{bc}\selectfont% + \color{darkgray}% + } + \renewcommand{\DoxyLabelFont}{% + \fontseries{bc}\selectfont% + \color{darkgray}% + } + \newcommand{\+}{\discretionary{\mbox{\scriptsize$\hookleftarrow$}}{}{}} + % Arguments of doxygenemoji: + % 1) '::' form of the emoji, already LaTeX-escaped + % 2) file with the name of the emoji without the .png extension + % in case image exist use this otherwise use the '::' form + \newcommand{\doxygenemoji}[2]{% + \IfFileExists{./#2.png}{\raisebox{-0.1em}{\includegraphics[height=0.9em]{./#2.png}}}{#1}% + } + % Page & text layout + \usepackage{geometry} + \geometry{% + a4paper,% + top=2.5cm,% + bottom=2.5cm,% + left=2.5cm,% + right=2.5cm% + } + \usepackage{changepage} + % Allow a bit of overflow to go unnoticed by other means + \tolerance=750 + \hfuzz=15pt + \hbadness=750 + \setlength{\emergencystretch}{15pt} + \setlength{\parindent}{0cm} + \newcommand{\doxynormalparskip}{\setlength{\parskip}{3ex plus 2ex minus 2ex}} + \newcommand{\doxytocparskip}{\setlength{\parskip}{1ex plus 0ex minus 0ex}} + \doxynormalparskip + % Redefine paragraph/subparagraph environments, using sectsty fonts + \makeatletter + \renewcommand{\paragraph}{% + \@startsection{paragraph}{4}{0ex}{-1.0ex}{1.0ex}{% + \normalfont\normalsize\bfseries\SS@parafont% + }% + } + \renewcommand{\subparagraph}{% + \@startsection{subparagraph}{5}{0ex}{-1.0ex}{1.0ex}{% + \normalfont\normalsize\bfseries\SS@subparafont% + }% + } + \makeatother + \makeatletter + \newcommand\hrulefilll{\leavevmode\leaders\hrule\hskip 0pt plus 1filll\kern\z@} + \makeatother + % Headers & footers + \usepackage{fancyhdr} + \pagestyle{fancyplain} + \renewcommand{\footrulewidth}{0.4pt} + \fancypagestyle{fancyplain}{ + \fancyhf{} + \fancyhead[LE, RO]{\bfseries\thepage} + \fancyhead[LO]{\bfseries\rightmark} + \fancyhead[RE]{\bfseries\leftmark} + \fancyfoot[LO, RE]{\bfseries\scriptsize Generated by Doxygen } + } + \fancypagestyle{plain}{ + \fancyhf{} + \fancyfoot[LO, RE]{\bfseries\scriptsize Generated by Doxygen } + \renewcommand{\headrulewidth}{0pt} + } + \pagestyle{fancyplain} + \renewcommand{\chaptermark}[1]{% + \markboth{#1}{}% + } + \renewcommand{\sectionmark}[1]{% + \markright{\thesection\ #1}% + } + % ToC, LoF, LoT, bibliography, and index + % Indices & bibliography + \usepackage[numbers]{natbib} + \usepackage[titles]{tocloft} + \setcounter{tocdepth}{3} + \setcounter{secnumdepth}{5} + % creating indexes + \makeindex + \ifPDFTeX +\usepackage{newunicodechar} + \makeatletter + \def\doxynewunicodechar#1#2{% + \@tempswafalse + \edef\nuc@tempa{\detokenize{#1}}% + \if\relax\nuc@tempa\relax + \nuc@emptyargerr + \else + \edef\@tempb{\expandafter\@car\nuc@tempa\@nil}% + \nuc@check + \if@tempswa + \@namedef{u8:\nuc@tempa}{#2}% + \fi + \fi + } + \makeatother + \doxynewunicodechar{⁻}{${}^{-}$}% Superscript minus + \doxynewunicodechar{²}{${}^{2}$}% Superscript two + \doxynewunicodechar{³}{${}^{3}$}% Superscript three +\fi + % Hyperlinks + % Hyperlinks (required, but should be loaded last) + \ifPDFTeX + \usepackage[pdftex,pagebackref=true]{hyperref} + \else + \ifXeTeX + \usepackage[xetex,pagebackref=true]{hyperref} + \else + \ifLuaTeX + \usepackage[luatex,pagebackref=true]{hyperref} + \else + \usepackage[ps2pdf,pagebackref=true]{hyperref} + \fi + \fi + \fi + \hypersetup{% + colorlinks=true,% + linkcolor=blue,% + citecolor=blue,% + unicode,% + pdftitle={Arma\+Dragonfly\+Client},% + pdfsubject={}% + } + % Custom commands used by the header + % Custom commands + \newcommand{\clearemptydoublepage}{% + \newpage{\pagestyle{empty}\cleardoublepage}% + } + % caption style definition + \usepackage{caption} + \captionsetup{labelsep=space,justification=centering,font={bf},singlelinecheck=off,skip=4pt,position=top} + % in page table of contents + \IfFormatAtLeastTF{2023/05/01}{\usepackage[deeplevels]{etoc}}{\usepackage[deeplevels]{etoc_doxygen}} + \etocsettocstyle{\doxytocparskip}{\doxynormalparskip} + \etocsetlevel{subsubsubsection}{4} + \etocsetlevel{subsubsubsubsection}{5} + \etocsetlevel{subsubsubsubsubsection}{6} + \etocsetlevel{subsubsubsubsubsubsection}{7} + \etocsetlevel{paragraph}{8} + \etocsetlevel{subparagraph}{9} + % prevent numbers overlap the titles in toc + \renewcommand{\numberline}[1]{#1~} +% End of preamble, now comes the document contents +%===== C O N T E N T S ===== +\begin{document} + \raggedbottom + % Titlepage & ToC + % To avoid duplicate page anchors due to reuse of same numbers for + % the index (be it as roman numbers) + \hypersetup{pageanchor=false, + bookmarksnumbered=true, + pdfencoding=unicode + } + \pagenumbering{alph} + \begin{titlepage} + \vspace*{7cm} + \begin{center}% + {\Large Arma\+Dragonfly\+Client}\\ + \vspace*{1cm} + {\large Generated by Doxygen 1.13.2}\\ + \end{center} + \end{titlepage} + \clearemptydoublepage + \pagenumbering{roman} + \tableofcontents + \clearemptydoublepage + \pagenumbering{arabic} + % re-enable anchors again + \hypersetup{pageanchor=true} +%--- Begin generated contents --- +\input{df/d12/md__g_1_2ids_2dragonfly_2docs_2basic_2delete} +\input{d4/d99/md__g_1_2ids_2dragonfly_2docs_2basic_2fetch} +\input{d3/dcb/md__g_1_2ids_2dragonfly_2docs_2basic_2get} +\input{d2/dce/md__g_1_2ids_2dragonfly_2docs_2basic_2save} +\input{d9/d9c/md__g_1_2ids_2dragonfly_2docs_2basic_2set} +\input{dd/d3b/md__g_1_2ids_2dragonfly_2docs_2core_2add_task} +\input{d4/d43/md__g_1_2ids_2dragonfly_2docs_2core_2handler} +\input{dc/d36/md__g_1_2ids_2dragonfly_2docs_2core_2init} +\input{d4/d7c/md__g_1_2ids_2dragonfly_2docs_2core_2print_addon_name} +\input{d0/d0e/md__g_1_2ids_2dragonfly_2docs_2core_2process_queue} +\input{d0/df6/md__g_1_2ids_2dragonfly_2docs_2core_2scheduler} +\input{d6/d7e/md__g_1_2ids_2dragonfly_2docs_2core_2test} +\input{d9/de8/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get} +\input{da/d08/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all} +\input{d2/d23/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_all_id} +\input{d2/d28/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_get_id} +\input{d0/df2/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set} +\input{da/d74/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_bulk} +\input{d4/d99/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id} +\input{de/da6/md__g_1_2ids_2dragonfly_2docs_2hash_2hash_set_id_bulk} +\input{da/d2c/md__g_1_2ids_2dragonfly_2docs_2list_2list_add} +\input{d3/ddf/md__g_1_2ids_2dragonfly_2docs_2list_2list_get} +\input{d9/db3/md__g_1_2ids_2dragonfly_2docs_2list_2list_load} +\input{d1/d22/md__g_1_2ids_2dragonfly_2docs_2list_2list_remove} +\input{d2/dc5/md__g_1_2ids_2dragonfly_2docs_2list_2list_set} +%--- End generated contents --- +% Index + \backmatter + \newpage + \phantomsection + \clearemptydoublepage + \addcontentsline{toc}{chapter}{\indexname} + \printindex +% Required for some languages (in combination with latexdocumentpre from the header) +\end{document} diff --git a/api/latex/tabu_doxygen.sty b/api/latex/tabu_doxygen.sty new file mode 100644 index 0000000..3f17d1d --- /dev/null +++ b/api/latex/tabu_doxygen.sty @@ -0,0 +1,2557 @@ +%% +%% This is file `tabu.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% tabu.dtx (with options: `package') +%% +%% This is a generated file. +%% Copyright (FC) 2010-2011 - lppl +%% +%% tabu : 2011/02/26 v2.8 - tabu : Flexible LaTeX tabulars +%% +%% ********************************************************************************************** +%% \begin{tabu} { preamble } => default target: \linewidth or \linegoal +%% \begin{tabu} to { preamble } => target specified +%% \begin{tabu} spread { preamble } => target relative to the ``natural width'' +%% +%% tabu works in text and in math modes. +%% +%% X columns: automatic width adjustment + horizontal and vertical alignment +%% \begin{tabu} { X[4c] X[1c] X[-2ml] } +%% +%% Horizontal lines and / or leaders: +%% \hline\hline => double horizontal line +%% \firsthline\hline => for nested tabulars +%% \lasthline\hline => for nested tabulars +%% \tabucline[line spec]{column-column} => ``funny'' lines (dash/leader) +%% Automatic lines / leaders : +%% \everyrow{\hline\hline} +%% +%% Vertical lines and / or leaders: +%% \begin{tabu} { |[3pt red] X[4c] X[1c] X[-2ml] |[3pt blue] } +%% \begin{tabu} { |[3pt red] X[4c] X[1c] X[-2ml] |[3pt on 2pt off 4pt blue] } +%% +%% Fixed vertical spacing adjustment: +%% \extrarowheight= \extrarowdepth= +%% or: \extrarowsep= => may be prefixed by \global +%% +%% Dynamic vertical spacing adjustment: +%% \abovetabulinesep= \belowtabulinesep= +%% or: \tabulinesep= => may be prefixed by \global +%% +%% delarray.sty shortcuts: in math and text modes +%% \begin{tabu} .... \({ preamble }\) +%% +%% Algorithms reports: +%% \tracingtabu=1 \tracingtabu=2 +%% +%% ********************************************************************************************** +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either +%% version 1.3 of this license or (at your option) any later +%% version. The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% +%% This work consists of the main source file tabu.dtx +%% and the derived files +%% tabu.sty, tabu.pdf, tabu.ins +%% +%% tabu : Flexible LaTeX tabulars +%% lppl copyright 2010-2011 by FC +%% + +\NeedsTeXFormat{LaTeX2e}[2005/12/01] +\ProvidesPackage{tabu_doxygen}[2011/02/26 v2.8 - flexible LaTeX tabulars (FC), frozen version for doxygen] +\RequirePackage{array}[2008/09/09] +\RequirePackage{varwidth}[2009/03/30] +\AtEndOfPackage{\tabu@AtEnd \let\tabu@AtEnd \@undefined} +\let\tabu@AtEnd\@empty +\def\TMP@EnsureCode#1={% + \edef\tabu@AtEnd{\tabu@AtEnd + \catcode#1 \the\catcode#1}% + \catcode#1=% +}% \TMP@EnsureCode +\TMP@EnsureCode 33 = 12 % ! +\TMP@EnsureCode 58 = 12 % : (for siunitx) +\TMP@EnsureCode124 = 12 % | +\TMP@EnsureCode 36 = 3 % $ = math shift +\TMP@EnsureCode 38 = 4 % & = tab alignment character +\TMP@EnsureCode 32 = 10 % space +\TMP@EnsureCode 94 = 7 % ^ +\TMP@EnsureCode 95 = 8 % _ +%% Constants -------------------------------------------------------- +\newcount \c@taburow \def\thetaburow {\number\c@taburow} +\newcount \tabu@nbcols +\newcount \tabu@cnt +\newcount \tabu@Xcol +\let\tabu@start \@tempcnta +\let\tabu@stop \@tempcntb +\newcount \tabu@alloc \tabu@alloc=\m@ne +\newcount \tabu@nested +\def\tabu@alloc@{\global\advance\tabu@alloc \@ne \tabu@nested\tabu@alloc} +\newdimen \tabu@target +\newdimen \tabu@spreadtarget +\newdimen \tabu@naturalX +\newdimen \tabucolX +\let\tabu@DELTA \@tempdimc +\let\tabu@thick \@tempdima +\let\tabu@on \@tempdimb +\let\tabu@off \@tempdimc +\newdimen \tabu@Xsum +\newdimen \extrarowdepth +\newdimen \abovetabulinesep +\newdimen \belowtabulinesep +\newdimen \tabustrutrule \tabustrutrule \z@ +\newtoks \tabu@thebody +\newtoks \tabu@footnotes +\newsavebox \tabu@box +\newsavebox \tabu@arstrutbox +\newsavebox \tabu@hleads +\newsavebox \tabu@vleads +\newif \iftabu@colortbl +\newif \iftabu@siunitx +\newif \iftabu@measuring +\newif \iftabu@spread +\newif \iftabu@negcoef +\newif \iftabu@everyrow +\def\tabu@everyrowtrue {\global\let\iftabu@everyrow \iftrue} +\def\tabu@everyrowfalse{\global\let\iftabu@everyrow \iffalse} +\newif \iftabu@long +\newif \iftabuscantokens +\def\tabu@rescan {\tabu@verbatim \scantokens } +%% Utilities (for internal usage) ----------------------------------- +\def\tabu@gobblespace #1 {#1} +\def\tabu@gobbletoken #1#2{#1} +\def\tabu@gobbleX{\futurelet\@let@token \tabu@gobblex} +\def\tabu@gobblex{\if ^^J\noexpand\@let@token \expandafter\@gobble + \else\ifx \@sptoken\@let@token + \expandafter\tabu@gobblespace\expandafter\tabu@gobbleX + \fi\fi +}% \tabu@gobblex +\def\tabu@X{^^J} +{\obeyspaces +\global\let\tabu@spxiii= % saves an active space (for \ifx) +\gdef\tabu@@spxiii{ }} +\def\tabu@ifenvir {% only for \multicolumn + \expandafter\tabu@if@nvir\csname\@currenvir\endcsname +}% \tabu@ifenvir +\def\tabu@if@nvir #1{\csname @\ifx\tabu#1first\else + \ifx\longtabu#1first\else + second\fi\fi oftwo\endcsname +}% \tabu@ifenvir +\def\tabu@modulo #1#2{\numexpr\ifnum\numexpr#1=\z@ 0\else #1-(#1-(#2-1)/2)/(#2)*(#2)\fi} +{\catcode`\&=3 +\gdef\tabu@strtrim #1{% #1 = control sequence to trim + \ifodd 1\ifx #1\@empty \else \ifx #1\space \else 0\fi \fi + \let\tabu@c@l@r \@empty \let#1\@empty + \else \expandafter \tabu@trimspaces #1\@nnil + \fi +}% \tabu@strtrim +\gdef\tabu@trimspaces #1\@nnil{\let\tabu@c@l@r=#2\tabu@firstspace .#1& }% +\gdef\tabu@firstspace #1#2#3 &{\tabu@lastspace #2#3&} +\gdef\tabu@lastspace #1{\def #3{#1}% + \ifx #3\tabu@c@l@r \def\tabu@c@l@r{\protect\color{#1}}\expandafter\remove@to@nnil \fi + \tabu@trimspaces #1\@nnil} +}% \catcode +\def\tabu@sanitizearg #1#2{{% + \csname \ifcsname if@safe@actives\endcsname % + @safe@activestrue\else + relax\fi \endcsname + \edef#2{#1}\tabu@strtrim#2\@onelevel@sanitize#2% + \expandafter}\expandafter\def\expandafter#2\expandafter{#2}% +}% \tabu@sanitizearg +\def\tabu@textbar #1{\begingroup \endlinechar\m@ne \scantokens{\def\:{|}}% + \expandafter\endgroup \expandafter#1\:% !!! semi simple group !!! +}% \tabu@textbar +\def\tabu@everyrow@bgroup{\iftabu@everyrow \begingroup \else \noalign{\ifnum0=`}\fi \fi} +\def\tabu@everyrow@egroup{% + \iftabu@everyrow \expandafter \endgroup \the\toks@ + \else \ifnum0=`{\fi}% + \fi +}% \tabu@everyrow@egroup +\def\tabu@arstrut {\global\setbox\@arstrutbox \hbox{\vrule + height \arraystretch \dimexpr\ht\strutbox+\extrarowheight + depth \arraystretch \dimexpr\dp\strutbox+\extrarowdepth + width \z@}% +}% \tabu@arstrut +\def\tabu@rearstrut {% + \@tempdima \arraystretch\dimexpr\ht\strutbox+\extrarowheight \relax + \@tempdimb \arraystretch\dimexpr\dp\strutbox+\extrarowdepth \relax + \ifodd 1\ifdim \ht\@arstrutbox=\@tempdima + \ifdim \dp\@arstrutbox=\@tempdimb 0 \fi\fi + \tabu@mkarstrut + \fi +}% \tabu@rearstrut +\def\tabu@@DBG #1{\ifdim\tabustrutrule>\z@ \color{#1}\fi} +\def\tabu@DBG@arstrut {\global\setbox\@arstrutbox + \hbox to\z@{\hbox to\z@{\hss + {\tabu@DBG{cyan}\vrule + height \arraystretch \dimexpr\ht\strutbox+\extrarowheight + depth \z@ + width \tabustrutrule}\kern-\tabustrutrule + {\tabu@DBG{pink}\vrule + height \z@ + depth \arraystretch \dimexpr\dp\strutbox+\extrarowdepth + width \tabustrutrule}}}% +}% \tabu@DBG@arstrut +\def\tabu@save@decl{\toks\count@ \expandafter{\the\toks\expandafter\count@ + \@nextchar}}% +\def\tabu@savedecl{\ifcat$\d@llarend\else + \let\save@decl \tabu@save@decl \fi % no inversion of tokens in text mode +}% \tabu@savedecl +\def\tabu@finalstrut #1{\unskip\ifhmode\nobreak\fi\vrule height\z@ depth\z@ width\z@} +\newcommand*\tabuDisableCommands {\g@addto@macro\tabu@trialh@@k } +\let\tabu@trialh@@k \@empty +\def\tabu@nowrite #1#{{\afterassignment}\toks@} +\let\tabu@write\write +\let\tabu@immediate\immediate +\def\tabu@WRITE{\begingroup + \def\immediate\write{\aftergroup\endgroup + \tabu@immediate\tabu@write}% +}% \tabu@WRITE +\expandafter\def\expandafter\tabu@GenericError\expandafter{% + \expandafter\tabu@WRITE\GenericError} +\def\tabu@warn{\tabu@WRITE\PackageWarning{tabu}} +\def\tabu@noxfootnote [#1]{\@gobble} +\def\tabu@nocolor #1#{\@gobble} +\newcommand*\tabu@norowcolor[2][]{} +\def\tabu@maybesiunitx #1{\def\tabu@temp{#1}% + \futurelet\@let@token \tabu@m@ybesiunitx} +\def\tabu@m@ybesiunitx #1{\def\tabu@m@ybesiunitx {% + \ifx #1\@let@token \let\tabu@cellleft \@empty \let\tabu@cellright \@empty \fi + \tabu@temp}% \tabu@m@ybesiunitx +}\expandafter\tabu@m@ybesiunitx \csname siunitx_table_collect_begin:Nn\endcsname +\def\tabu@celllalign@def #1{\def\tabu@celllalign{\tabu@maybesiunitx{#1}}}% +%% Fixed vertical spacing adjustment: \extrarowsep ------------------ +\newcommand*\extrarowsep{\edef\tabu@C@extra{\the\numexpr\tabu@C@extra+1}% + \iftabu@everyrow \aftergroup\tabu@Gextra + \else \aftergroup\tabu@n@Gextra + \fi + \@ifnextchar={\tabu@gobbletoken\tabu@extra} \tabu@extra +}% \extrarowsep +\def\tabu@extra {\@ifnextchar_% + {\tabu@gobbletoken{\tabu@setextra\extrarowheight \extrarowdepth}} + {\ifx ^\@let@token \def\tabu@temp{% + \tabu@gobbletoken{\tabu@setextra\extrarowdepth \extrarowheight}}% + \else \let\tabu@temp \@empty + \afterassignment \tabu@setextrasep \extrarowdepth + \fi \tabu@temp}% +}% \tabu@extra +\def\tabu@setextra #1#2{\def\tabu@temp{\tabu@extr@#1#2}\afterassignment\tabu@temp#2} +\def\tabu@extr@ #1#2{\@ifnextchar^% + {\tabu@gobbletoken{\tabu@setextra\extrarowdepth \extrarowheight}} + {\ifx _\@let@token \def\tabu@temp{% + \tabu@gobbletoken{\tabu@setextra\extrarowheight \extrarowdepth}}% + \else \let\tabu@temp \@empty + \tabu@Gsave \tabu@G@extra \tabu@C@extra \extrarowheight \extrarowdepth + \fi \tabu@temp}% +}% \tabu@extr@ +\def\tabu@setextrasep {\extrarowheight=\extrarowdepth + \tabu@Gsave \tabu@G@extra \tabu@C@extra \extrarowheight \extrarowdepth +}% \tabu@setextrasep +\def\tabu@Gextra{\ifx \tabu@G@extra\@empty \else {\tabu@Rextra}\fi} +\def\tabu@n@Gextra{\ifx \tabu@G@extra\@empty \else \noalign{\tabu@Rextra}\fi} +\def\tabu@Rextra{\tabu@Grestore \tabu@G@extra \tabu@C@extra} +\let\tabu@C@extra \z@ +\let\tabu@G@extra \@empty +%% Dynamic vertical spacing adjustment: \tabulinesep ---------------- +\newcommand*\tabulinesep{\edef\tabu@C@linesep{\the\numexpr\tabu@C@linesep+1}% + \iftabu@everyrow \aftergroup\tabu@Glinesep + \else \aftergroup\tabu@n@Glinesep + \fi + \@ifnextchar={\tabu@gobbletoken\tabu@linesep} \tabu@linesep +}% \tabulinesep +\def\tabu@linesep {\@ifnextchar_% + {\tabu@gobbletoken{\tabu@setsep\abovetabulinesep \belowtabulinesep}} + {\ifx ^\@let@token \def\tabu@temp{% + \tabu@gobbletoken{\tabu@setsep\belowtabulinesep \abovetabulinesep}}% + \else \let\tabu@temp \@empty + \afterassignment \tabu@setlinesep \abovetabulinesep + \fi \tabu@temp}% +}% \tabu@linesep +\def\tabu@setsep #1#2{\def\tabu@temp{\tabu@sets@p#1#2}\afterassignment\tabu@temp#2} +\def\tabu@sets@p #1#2{\@ifnextchar^% + {\tabu@gobbletoken{\tabu@setsep\belowtabulinesep \abovetabulinesep}} + {\ifx _\@let@token \def\tabu@temp{% + \tabu@gobbletoken{\tabu@setsep\abovetabulinesep \belowtabulinesep}}% + \else \let\tabu@temp \@empty + \tabu@Gsave \tabu@G@linesep \tabu@C@linesep \abovetabulinesep \belowtabulinesep + \fi \tabu@temp}% +}% \tabu@sets@p +\def\tabu@setlinesep {\belowtabulinesep=\abovetabulinesep + \tabu@Gsave \tabu@G@linesep \tabu@C@linesep \abovetabulinesep \belowtabulinesep +}% \tabu@setlinesep +\def\tabu@Glinesep{\ifx \tabu@G@linesep\@empty \else {\tabu@Rlinesep}\fi} +\def\tabu@n@Glinesep{\ifx \tabu@G@linesep\@empty \else \noalign{\tabu@Rlinesep}\fi} +\def\tabu@Rlinesep{\tabu@Grestore \tabu@G@linesep \tabu@C@linesep} +\let\tabu@C@linesep \z@ +\let\tabu@G@linesep \@empty +%% \global\extrarowsep and \global\tabulinesep ------------------- +\def\tabu@Gsave #1#2#3#4{\xdef#1{#1% + \toks#2{\toks\the\currentgrouplevel{\global#3\the#3\global#4\the#4}}}% +}% \tabu@Gsave +\def\tabu@Grestore#1#2{% + \toks#2{}#1\toks\currentgrouplevel\expandafter{\expandafter}\the\toks#2\relax + \ifcat$\the\toks\currentgrouplevel$\else + \global\let#1\@empty \global\let#2\z@ + \the\toks\currentgrouplevel + \fi +}% \tabu@Grestore +%% Setting code for every row --------------------------------------- +\newcommand*\everyrow{\tabu@everyrow@bgroup + \tabu@start \z@ \tabu@stop \z@ \tabu@evrstartstop +}% \everyrow +\def\tabu@evrstartstop {\@ifnextchar^% + {\afterassignment \tabu@evrstartstop \tabu@stop=}% + {\ifx ^\@let@token + \afterassignment\tabu@evrstartstop \tabu@start=% + \else \afterassignment\tabu@everyr@w \toks@ + \fi}% +}% \tabu@evrstartstop +\def\tabu@everyr@w {% + \xdef\tabu@everyrow{% + \noexpand\tabu@everyrowfalse + \let\noalign \relax + \noexpand\tabu@rowfontreset + \iftabu@colortbl \noexpand\tabu@rc@ \fi % \taburowcolors + \let\noexpand\tabu@docline \noexpand\tabu@docline@evr + \the\toks@ + \noexpand\tabu@evrh@@k + \noexpand\tabu@rearstrut + \global\advance\c@taburow \@ne}% + \iftabu@everyrow \toks@\expandafter + {\expandafter\def\expandafter\tabu@evr@L\expandafter{\the\toks@}\ignorespaces}% + \else \xdef\tabu@evr@G{\the\toks@}% + \fi + \tabu@everyrow@egroup +}% \tabu@everyr@w +\def\tabu@evr {\def\tabu@evrh@@k} % for internal use only +\tabu@evr{} +%% line style and leaders ------------------------------------------- +\newcommand*\newtabulinestyle [1]{% + {\@for \@tempa :=#1\do{\expandafter\tabu@newlinestyle \@tempa==\@nil}}% +}% \newtabulinestyle +\def\tabu@newlinestyle #1=#2=#3\@nil{\tabu@getline {#2}% + \tabu@sanitizearg {#1}\@tempa + \ifodd 1\ifx \@tempa\@empty \ifdefined\tabu@linestyle@ 0 \fi\fi + \global\expandafter\let + \csname tabu@linestyle@\@tempa \endcsname =\tabu@thestyle \fi +}% \tabu@newlinestyle +\newcommand*\tabulinestyle [1]{\tabu@everyrow@bgroup \tabu@getline{#1}% + \iftabu@everyrow + \toks@\expandafter{\expandafter \def \expandafter + \tabu@ls@L\expandafter{\tabu@thestyle}\ignorespaces}% + \gdef\tabu@ls@{\tabu@ls@L}% + \else + \global\let\tabu@ls@G \tabu@thestyle + \gdef\tabu@ls@{\tabu@ls@G}% + \fi + \tabu@everyrow@egroup +}% \tabulinestyle +\newcommand*\taburulecolor{\tabu@everyrow@bgroup \tabu@textbar \tabu@rulecolor} +\def\tabu@rulecolor #1{\toks@{}% + \def\tabu@temp #1##1#1{\tabu@ruledrsc{##1}}\@ifnextchar #1% + \tabu@temp + \tabu@rulearc +}% \tabu@rulecolor +\def\tabu@ruledrsc #1{\edef\tabu@temp{#1}\tabu@strtrim\tabu@temp + \ifx \tabu@temp\@empty \def\tabu@temp{\tabu@rule@drsc@ {}{}}% + \else \edef\tabu@temp{\noexpand\tabu@rule@drsc@ {}{\tabu@temp}}% + \fi + \tabu@temp +}% \tabu@ruledrsc@ +\def\tabu@ruledrsc@ #1#{\tabu@rule@drsc@ {#1}} +\def\tabu@rule@drsc@ #1#2{% + \iftabu@everyrow + \ifx \\#1#2\\\toks@{\let\CT@drsc@ \relax}% + \else \toks@{\def\CT@drsc@{\color #1{#2}}}% + \fi + \else + \ifx \\#1#2\\\global\let\CT@drsc@ \relax + \else \gdef\CT@drsc@{\color #1{#2}}% + \fi + \fi + \tabu@rulearc +}% \tabu@rule@drsc@ +\def\tabu@rulearc #1#{\tabu@rule@arc@ {#1}} +\def\tabu@rule@arc@ #1#2{% + \iftabu@everyrow + \ifx \\#1#2\\\toks@\expandafter{\the\toks@ \def\CT@arc@{}}% + \else \toks@\expandafter{\the\toks@ \def\CT@arc@{\color #1{#2}}}% + \fi + \toks@\expandafter{\the\toks@ + \let\tabu@arc@L \CT@arc@ + \let\tabu@drsc@L \CT@drsc@ + \ignorespaces}% + \else + \ifx \\#1#2\\\gdef\CT@arc@{}% + \else \gdef\CT@arc@{\color #1{#2}}% + \fi + \global\let\tabu@arc@G \CT@arc@ + \global\let\tabu@drsc@G \CT@drsc@ + \fi + \tabu@everyrow@egroup +}% \tabu@rule@arc@ +\def\taburowcolors {\tabu@everyrow@bgroup \@testopt \tabu@rowcolors 1} +\def\tabu@rowcolors [#1]#2#{\tabu@rowc@lors{#1}{#2}} +\def\tabu@rowc@lors #1#2#3{% + \toks@{}\@defaultunits \count@ =\number0#2\relax \@nnil + \@defaultunits \tabu@start =\number0#1\relax \@nnil + \ifnum \count@<\tw@ \count@=\tw@ \fi + \advance\tabu@start \m@ne + \ifnum \tabu@start<\z@ \tabu@start \z@ \fi + \tabu@rowcolorseries #3\in@..\in@ \@nnil +}% \tabu@rowcolors +\def\tabu@rowcolorseries #1..#2\in@ #3\@nnil {% + \ifx \in@#1\relax + \iftabu@everyrow \toks@{\def\tabu@rc@{}\let\tabu@rc@L \tabu@rc@}% + \else \gdef\tabu@rc@{}\global\let\tabu@rc@G \tabu@rc@ + \fi + \else + \ifx \\#2\\\tabu@rowcolorserieserror \fi + \tabu@sanitizearg{#1}\tabu@temp + \tabu@sanitizearg{#2}\@tempa + \advance\count@ \m@ne + \iftabu@everyrow + \def\tabu@rc@ ##1##2##3##4{\def\tabu@rc@{% + \ifnum ##2=\c@taburow + \definecolorseries{tabu@rcseries@\the\tabu@nested}{rgb}{last}{##3}{##4}\fi + \ifnum \c@taburow<##2 \else + \ifnum \tabu@modulo {\c@taburow-##2}{##1+1}=\z@ + \resetcolorseries[{##1}]{tabu@rcseries@\the\tabu@nested}\fi + \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}% + \rowcolor{tabu@rc@\the\tabu@nested}\fi}% + }\edef\x{\noexpand\tabu@rc@ {\the\count@} + {\the\tabu@start} + {\tabu@temp} + {\@tempa}% + }\x + \toks@\expandafter{\expandafter\def\expandafter\tabu@rc@\expandafter{\tabu@rc@}}% + \toks@\expandafter{\the\toks@ \let\tabu@rc@L \tabu@rc@ \ignorespaces}% + \else % inside \noalign + \definecolorseries{tabu@rcseries@\the\tabu@nested}{rgb}{last}{\tabu@temp}{\@tempa}% + \expandafter\resetcolorseries\expandafter[\the\count@]{tabu@rcseries@\the\tabu@nested}% + \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}% + \let\noalign \relax \rowcolor{tabu@rc@\the\tabu@nested}% + \def\tabu@rc@ ##1##2{\gdef\tabu@rc@{% + \ifnum \tabu@modulo {\c@taburow-##2}{##1+1}=\@ne + \resetcolorseries[{##1}]{tabu@rcseries@\the\tabu@nested}\fi + \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}% + \rowcolor{tabu@rc@\the\tabu@nested}}% + }\edef\x{\noexpand\tabu@rc@{\the\count@}{\the\c@taburow}}\x + \global\let\tabu@rc@G \tabu@rc@ + \fi + \fi + \tabu@everyrow@egroup +}% \tabu@rowcolorseries +\tabuDisableCommands {\let\tabu@rc@ \@empty } +\def\tabu@rowcolorserieserror {\PackageError{tabu} + {Invalid syntax for \string\taburowcolors + \MessageBreak Please look at the documentation!}\@ehd +}% \tabu@rowcolorserieserror +\newcommand*\tabureset {% + \tabulinesep=\z@ \extrarowsep=\z@ \extratabsurround=\z@ + \tabulinestyle{}\everyrow{}\taburulecolor||{}\taburowcolors{}% +}% \tabureset +%% Parsing the line styles ------------------------------------------ +\def\tabu@getline #1{\begingroup + \csname \ifcsname if@safe@actives\endcsname % + @safe@activestrue\else + relax\fi \endcsname + \edef\tabu@temp{#1}\tabu@sanitizearg{#1}\@tempa + \let\tabu@thestyle \relax + \ifcsname tabu@linestyle@\@tempa \endcsname + \edef\tabu@thestyle{\endgroup + \def\tabu@thestyle{\expandafter\noexpand + \csname tabu@linestyle@\@tempa\endcsname}% + }\tabu@thestyle + \else \expandafter\tabu@definestyle \tabu@temp \@nil + \fi +}% \tabu@getline +\def\tabu@definestyle #1#2\@nil {\endlinechar \m@ne \makeatletter + \tabu@thick \maxdimen \tabu@on \maxdimen \tabu@off \maxdimen + \let\tabu@c@lon \@undefined \let\tabu@c@loff \@undefined + \ifodd 1\ifcat .#1\else\ifcat\relax #1\else 0\fi\fi % catcode 12 or non expandable cs + \def\tabu@temp{\tabu@getparam{thick}}% + \else \def\tabu@temp{\tabu@getparam{thick}\maxdimen}% + \fi + {% + \let\tabu@ \relax + \def\:{\obeyspaces \tabu@oXIII \tabu@commaXIII \edef\:}% (space active \: happy ;-)) + \scantokens{\:{\tabu@temp #1#2 \tabu@\tabu@}}% + \expandafter}\expandafter + \def\expandafter\:\expandafter{\:}% line spec rewritten now ;-) + \def\;{\def\:}% + \scantokens\expandafter{\expandafter\;\expandafter{\:}}% space is now inactive (catcode 10) + \let\tabu@ \tabu@getcolor \:% all arguments are ready now ;-) + \ifdefined\tabu@c@lon \else \let\tabu@c@lon\@empty \fi + \ifx \tabu@c@lon\@empty \def\tabu@c@lon{\CT@arc@}\fi + \ifdefined\tabu@c@loff \else \let\tabu@c@loff \@empty \fi + \ifdim \tabu@on=\maxdimen \ifdim \tabu@off<\maxdimen + \tabu@on \tabulineon \fi\fi + \ifdim \tabu@off=\maxdimen \ifdim \tabu@on<\maxdimen + \tabu@off \tabulineoff \fi\fi + \ifodd 1\ifdim \tabu@off=\maxdimen \ifdim \tabu@on=\maxdimen 0 \fi\fi + \in@true % + \else \in@false % + \fi + \ifdim\tabu@thick=\maxdimen \def\tabu@thick{\arrayrulewidth}% + \else \edef\tabu@thick{\the\tabu@thick}% + \fi + \edef \tabu@thestyle ##1##2{\endgroup + \def\tabu@thestyle{% + \ifin@ \noexpand\tabu@leadersstyle {\tabu@thick} + {\the\tabu@on}{##1} + {\the\tabu@off}{##2}% + \else \noexpand\tabu@rulesstyle + {##1\vrule width \tabu@thick}% + {##1\leaders \hrule height \tabu@thick \hfil}% + \fi}% + }\expandafter \expandafter + \expandafter \tabu@thestyle \expandafter + \expandafter \expandafter + {\expandafter\tabu@c@lon\expandafter}\expandafter{\tabu@c@loff}% +}% \tabu@definestyle +{\catcode`\O=\active \lccode`\O=`\o \catcode`\,=\active + \lowercase{\gdef\tabu@oXIII {\catcode`\o=\active \let O=\tabu@oxiii}} + \gdef\tabu@commaXIII {\catcode`\,=\active \let ,=\space} +}% \catcode +\def\tabu@oxiii #1{% + \ifcase \ifx n#1\z@ \else + \ifx f#1\@ne\else + \tw@ \fi\fi + \expandafter\tabu@onxiii + \or \expandafter\tabu@ofxiii + \else o% + \fi#1}% +\def\tabu@onxiii #1#2{% + \ifcase \ifx !#2\tw@ \else + \ifcat.\noexpand#2\z@ \else + \ifx \tabu@spxiii#2\@ne\else + \tw@ \fi\fi\fi + \tabu@getparam{on}#2\expandafter\@gobble + \or \expandafter\tabu@onxiii % (space is active) + \else o\expandafter\@firstofone + \fi{#1#2}}% +\def\tabu@ofxiii #1#2{% + \ifx #2f\expandafter\tabu@offxiii + \else o\expandafter\@firstofone + \fi{#1#2}} +\def\tabu@offxiii #1#2{% + \ifcase \ifx !#2\tw@ \else + \ifcat.\noexpand#2\z@ \else + \ifx\tabu@spxiii#2\@ne \else + \tw@ \fi\fi\fi + \tabu@getparam{off}#2\expandafter\@gobble + \or \expandafter\tabu@offxiii % (space is active) + \else o\expandafter\@firstofone + \fi{#1#2}} +\def\tabu@getparam #1{\tabu@ \csname tabu@#1\endcsname=} +\def\tabu@getcolor #1{% \tabu@ <- \tabu@getcolor after \edef + \ifx \tabu@#1\else % no more spec + \let\tabu@theparam=#1\afterassignment \tabu@getc@l@r #1\fi +}% \tabu@getcolor +\def\tabu@getc@l@r #1\tabu@ {% + \def\tabu@temp{#1}\tabu@strtrim \tabu@temp + \ifx \tabu@temp\@empty + \else%\ifcsname \string\color@\tabu@temp \endcsname % if the color exists + \ifx \tabu@theparam \tabu@off \let\tabu@c@loff \tabu@c@l@r + \else \let\tabu@c@lon \tabu@c@l@r + \fi + %\else \tabu@warncolour{\tabu@temp}% + \fi%\fi + \tabu@ % next spec +}% \tabu@getc@l@r +\def\tabu@warncolour #1{\PackageWarning{tabu} + {Color #1 is not defined. Default color used}% +}% \tabu@warncolour +\def\tabu@leadersstyle #1#2#3#4#5{\def\tabu@leaders{{#1}{#2}{#3}{#4}{#5}}% + \ifx \tabu@leaders\tabu@leaders@G \else + \tabu@LEADERS{#1}{#2}{#3}{#4}{#5}\fi +}% \tabu@leadersstyle +\def\tabu@rulesstyle #1#2{\let\tabu@leaders \@undefined + \gdef\tabu@thevrule{#1}\gdef\tabu@thehrule{#2}% +}% \tabu@rulesstyle +%% The leaders boxes ------------------------------------------------ +\def\tabu@LEADERS #1#2#3#4#5{%% width, dash, dash color, gap, gap color + {\let\color \tabu@color % => during trials -> \color = \tabu@nocolor + {% % but the leaders boxes should have colors ! + \def\@therule{\vrule}\def\@thick{height}\def\@length{width}% + \def\@box{\hbox}\def\@unbox{\unhbox}\def\@elt{\wd}% + \def\@skip{\hskip}\def\@ss{\hss}\def\tabu@leads{\tabu@hleads}% + \tabu@l@@d@rs {#1}{#2}{#3}{#4}{#5}% + \global\let\tabu@thehleaders \tabu@theleaders + }% + {% + \def\@therule{\hrule}\def\@thick{width}\def\@length{height}% + \def\@box{\vbox}\def\@unbox{\unvbox}\def\@elt{\ht}% + \def\@skip{\vskip}\def\@ss{\vss}\def\tabu@leads{\tabu@vleads}% + \tabu@l@@d@rs {#1}{#2}{#3}{#4}{#5}% + \global\let\tabu@thevleaders \tabu@theleaders + }% + \gdef\tabu@leaders@G{{#1}{#2}{#3}{#4}{#5}}% + }% +}% \tabu@LEADERS +\def\tabu@therule #1#2{\@therule \@thick#1\@length\dimexpr#2/2 \@depth\z@} +\def\tabu@l@@d@rs #1#2#3#4#5{%% width, dash, dash color, gap, gap color + \global\setbox \tabu@leads=\@box{% + {#3\tabu@therule{#1}{#2}}% + \ifx\\#5\\\@skip#4\else{#5\tabu@therule{#1}{#4*2}}\fi + {#3\tabu@therule{#1}{#2}}}% + \global\setbox\tabu@leads=\@box to\@elt\tabu@leads{\@ss + {#3\tabu@therule{#1}{#2}}\@unbox\tabu@leads}% + \edef\tabu@theleaders ##1{\def\noexpand\tabu@theleaders {% + {##1\tabu@therule{#1}{#2}}% + \xleaders \copy\tabu@leads \@ss + \tabu@therule{0pt}{-#2}{##1\tabu@therule{#1}{#2}}}% + }\tabu@theleaders{#3}% +}% \tabu@l@@d@rs +%% \tabu \endtabu \tabu* \longtabu \endlongtabu \longtabu* ---------- +\newcommand*\tabu {\tabu@longfalse + \ifmmode \def\tabu@ {\array}\def\endtabu {\endarray}% + \else \def\tabu@ {\tabu@tabular}\def\endtabu {\endtabular}\fi + \expandafter\let\csname tabu*\endcsname \tabu + \expandafter\def\csname endtabu*\endcsname{\endtabu}% + \tabu@spreadfalse \tabu@negcoeffalse \tabu@settarget +}% {tabu} +\let\tabu@tabular \tabular % +\expandafter\def\csname tabu*\endcsname{\tabuscantokenstrue \tabu} +\newcommand*\longtabu {\tabu@longtrue + \ifmmode\PackageError{tabu}{longtabu not allowed in math mode}\fi + \def\tabu@{\longtable}\def\endlongtabu{\endlongtable}% + \LTchunksize=\@M + \expandafter\let\csname tabu*\endcsname \tabu + \expandafter\def\csname endlongtabu*\endcsname{\endlongtabu}% + \let\LT@startpbox \tabu@LT@startpbox % \everypar{ array struts } + \tabu@spreadfalse \tabu@negcoeffalse \tabu@settarget +}% {longtabu} +\expandafter\def\csname longtabu*\endcsname{\tabuscantokenstrue \longtabu} +\def\tabu@nolongtabu{\PackageError{tabu} + {longtabu requires the longtable package}\@ehd} +%% Read the target and then : \tabular or \@array ------------------ +\def\tabu@settarget {\futurelet\@let@token \tabu@sett@rget } +\def\tabu@sett@rget {\tabu@target \z@ + \ifcase \ifx \bgroup\@let@token \z@ \else + \ifx \@sptoken\@let@token \@ne \else + \if t\@let@token \tw@ \else + \if s\@let@token \thr@@\else + \z@\fi\fi\fi\fi + \expandafter\tabu@begin + \or \expandafter\tabu@gobblespace\expandafter\tabu@settarget + \or \expandafter\tabu@to + \or \expandafter\tabu@spread + \fi +}% \tabu@sett@rget +\def\tabu@to to{\def\tabu@halignto{to}\tabu@gettarget} +\def\tabu@spread spread{\tabu@spreadtrue\def\tabu@halignto{spread}\tabu@gettarget} +\def\tabu@gettarget {\afterassignment\tabu@linegoaltarget \tabu@target } +\def\tabu@linegoaltarget {\futurelet\tabu@temp \tabu@linegoalt@rget } +\def\tabu@linegoalt@rget {% + \ifx \tabu@temp\LNGL@setlinegoal + \LNGL@setlinegoal \expandafter \@firstoftwo \fi % @gobbles \LNGL@setlinegoal + \tabu@begin +}% \tabu@linegoalt@rget +\def\tabu@begin #1#{% + \iftabu@measuring \expandafter\tabu@nestedmeasure \fi + \ifdim \tabu@target=\z@ \let\tabu@halignto \@empty + \else \edef\tabu@halignto{\tabu@halignto\the\tabu@target}% + \fi + \@testopt \tabu@tabu@ \tabu@aligndefault #1\@nil +}% \tabu@begin +\long\def\tabu@tabu@ [#1]#2\@nil #3{\tabu@setup + \def\tabu@align {#1}\def\tabu@savedpream{\NC@find #3}% + \tabu@ [\tabu@align ]#2{#3\tabu@rewritefirst }% +}% \tabu@tabu@ +\def\tabu@nestedmeasure {% + \ifodd 1\iftabu@spread \else \ifdim\tabu@target=\z@ \else 0 \fi\fi\relax + \tabu@spreadtrue + \else \begingroup \iffalse{\fi \ifnum0=`}\fi + \toks@{}\def\tabu@stack{b}% + \expandafter\tabu@collectbody\expandafter\tabu@quickrule + \expandafter\endgroup + \fi +}% \tabu@nestedmeasure +\def\tabu@quickrule {\indent\vrule height\z@ depth\z@ width\tabu@target} +%% \tabu@setup \tabu@init \tabu@indent +\def\tabu@setup{\tabu@alloc@ + \ifcase \tabu@nested + \ifmmode \else \iftabu@spread\else \ifdim\tabu@target=\z@ + \let\tabu@afterendpar \par + \fi\fi\fi + \def\tabu@aligndefault{c}\tabu@init \tabu@indent + \else % + \def\tabu@aligndefault{t}\let\tabudefaulttarget \linewidth + \fi + \let\tabu@thetarget \tabudefaulttarget \let\tabu@restored \@undefined + \edef\tabu@NC@list{\the\NC@list}\NC@list{\NC@do \tabu@rewritefirst}% + \everycr{}\let\@startpbox \tabu@startpbox % for nested tabu inside longtabu... + \let\@endpbox \tabu@endpbox % idem " " " " " " + \let\@tabarray \tabu@tabarray % idem " " " " " " + \tabu@setcleanup \tabu@setreset +}% \tabu@setup +\def\tabu@init{\tabu@starttimer \tabu@measuringfalse + \edef\tabu@hfuzz {\the\dimexpr\hfuzz+1sp}\global\tabu@footnotes{}% + \let\firsthline \tabu@firsthline \let\lasthline \tabu@lasthline + \let\firstline \tabu@firstline \let\lastline \tabu@lastline + \let\hline \tabu@hline \let\@xhline \tabu@xhline + \let\color \tabu@color \let\@arstrutbox \tabu@arstrutbox + \iftabu@colortbl\else\let\LT@@hline \tabu@LT@@hline \fi + \tabu@trivlist % + \let\@footnotetext \tabu@footnotetext \let\@xfootnotetext \tabu@xfootnotetext + \let\@xfootnote \tabu@xfootnote \let\centering \tabu@centering + \let\raggedright \tabu@raggedright \let\raggedleft \tabu@raggedleft + \let\tabudecimal \tabu@tabudecimal \let\Centering \tabu@Centering + \let\RaggedRight \tabu@RaggedRight \let\RaggedLeft \tabu@RaggedLeft + \let\justifying \tabu@justifying \let\rowfont \tabu@rowfont + \let\fbox \tabu@fbox \let\color@b@x \tabu@color@b@x + \let\tabu@@everycr \everycr \let\tabu@@everypar \everypar + \let\tabu@prepnext@tokORI \prepnext@tok\let\prepnext@tok \tabu@prepnext@tok + \let\tabu@multicolumnORI\multicolumn \let\multicolumn \tabu@multicolumn + \let\tabu@startpbox \@startpbox % for nested tabu inside longtabu pfff !!! + \let\tabu@endpbox \@endpbox % idem " " " " " " " + \let\tabu@tabarray \@tabarray % idem " " " " " " " + \tabu@adl@fix \let\endarray \tabu@endarray % colortbl & arydshln (delarray) + \iftabu@colortbl\CT@everycr\expandafter{\expandafter\iftabu@everyrow \the\CT@everycr \fi}\fi +}% \tabu@init +\def\tabu@indent{% correction for indentation + \ifdim \parindent>\z@\ifx \linewidth\tabudefaulttarget + \everypar\expandafter{% + \the\everypar\everypar\expandafter{\the\everypar}% + \setbox\z@=\lastbox + \ifdim\wd\z@>\z@ \edef\tabu@thetarget + {\the\dimexpr -\wd\z@+\tabudefaulttarget}\fi + \box\z@}% + \fi\fi +}% \tabu@indent +\def\tabu@setcleanup {% saves last global assignments + \ifodd 1\ifmmode \else \iftabu@long \else 0\fi\fi\relax + \def\tabu@aftergroupcleanup{% + \def\tabu@aftergroupcleanup{\aftergroup\tabu@cleanup}}% + \else + \def\tabu@aftergroupcleanup{% + \aftergroup\aftergroup\aftergroup\tabu@cleanup + \let\tabu@aftergroupcleanup \relax}% + \fi + \let\tabu@arc@Gsave \tabu@arc@G + \let\tabu@arc@G \tabu@arc@L % + \let\tabu@drsc@Gsave \tabu@drsc@G + \let\tabu@drsc@G \tabu@drsc@L % + \let\tabu@ls@Gsave \tabu@ls@G + \let\tabu@ls@G \tabu@ls@L % + \let\tabu@rc@Gsave \tabu@rc@G + \let\tabu@rc@G \tabu@rc@L % + \let\tabu@evr@Gsave \tabu@evr@G + \let\tabu@evr@G \tabu@evr@L % + \let\tabu@celllalign@save \tabu@celllalign + \let\tabu@cellralign@save \tabu@cellralign + \let\tabu@cellleft@save \tabu@cellleft + \let\tabu@cellright@save \tabu@cellright + \let\tabu@@celllalign@save \tabu@@celllalign + \let\tabu@@cellralign@save \tabu@@cellralign + \let\tabu@@cellleft@save \tabu@@cellleft + \let\tabu@@cellright@save \tabu@@cellright + \let\tabu@rowfontreset@save \tabu@rowfontreset + \let\tabu@@rowfontreset@save\tabu@@rowfontreset + \let\tabu@rowfontreset \@empty + \edef\tabu@alloc@save {\the\tabu@alloc}% restore at \tabu@reset + \edef\c@taburow@save {\the\c@taburow}% + \edef\tabu@naturalX@save {\the\tabu@naturalX}% + \let\tabu@naturalXmin@save \tabu@naturalXmin + \let\tabu@naturalXmax@save \tabu@naturalXmax + \let\tabu@mkarstrut@save \tabu@mkarstrut + \edef\tabu@clarstrut{% + \extrarowheight \the\dimexpr \ht\@arstrutbox-\ht\strutbox \relax + \extrarowdepth \the\dimexpr \dp\@arstrutbox-\dp\strutbox \relax + \let\noexpand\@arraystretch \@ne \noexpand\tabu@rearstrut}% +}% \tabu@setcleanup +\def\tabu@cleanup {\begingroup + \globaldefs\@ne \tabu@everyrowtrue + \let\tabu@arc@G \tabu@arc@Gsave + \let\CT@arc@ \tabu@arc@G + \let\tabu@drsc@G \tabu@drsc@Gsave + \let\CT@drsc@ \tabu@drsc@G + \let\tabu@ls@G \tabu@ls@Gsave + \let\tabu@ls@ \tabu@ls@G + \let\tabu@rc@G \tabu@rc@Gsave + \let\tabu@rc@ \tabu@rc@G + \let\CT@do@color \relax + \let\tabu@evr@G \tabu@evr@Gsave + \let\tabu@celllalign \tabu@celllalign@save + \let\tabu@cellralign \tabu@cellralign@save + \let\tabu@cellleft \tabu@cellleft@save + \let\tabu@cellright \tabu@cellright@save + \let\tabu@@celllalign \tabu@@celllalign@save + \let\tabu@@cellralign \tabu@@cellralign@save + \let\tabu@@cellleft \tabu@@cellleft@save + \let\tabu@@cellright \tabu@@cellright@save + \let\tabu@rowfontreset \tabu@rowfontreset@save + \let\tabu@@rowfontreset \tabu@@rowfontreset@save + \tabu@naturalX =\tabu@naturalX@save + \let\tabu@naturalXmax \tabu@naturalXmax@save + \let\tabu@naturalXmin \tabu@naturalXmin@save + \let\tabu@mkarstrut \tabu@mkarstrut@save + \c@taburow =\c@taburow@save + \ifcase \tabu@nested \tabu@alloc \m@ne\fi + \endgroup % + \ifcase \tabu@nested + \the\tabu@footnotes \global\tabu@footnotes{}% + \tabu@afterendpar \tabu@elapsedtime + \fi + \tabu@clarstrut + \everyrow\expandafter {\tabu@evr@G}% +}% \tabu@cleanup +\let\tabu@afterendpar \relax +\def\tabu@setreset {% + \edef\tabu@savedparams {% \relax for \tabu@message@save + \ifmmode \col@sep \the\arraycolsep + \else \col@sep \the\tabcolsep \fi \relax + \arrayrulewidth \the\arrayrulewidth \relax + \doublerulesep \the\doublerulesep \relax + \extratabsurround \the\extratabsurround \relax + \extrarowheight \the\extrarowheight \relax + \extrarowdepth \the\extrarowdepth \relax + \abovetabulinesep \the\abovetabulinesep \relax + \belowtabulinesep \the\belowtabulinesep \relax + \def\noexpand\arraystretch{\arraystretch}% + \ifdefined\minrowclearance \minrowclearance\the\minrowclearance\relax\fi}% + \begingroup + \@temptokena\expandafter{\tabu@savedparams}% => only for \savetabu / \usetabu + \ifx \tabu@arc@L\relax \else \tabu@setsave \tabu@arc@L \fi + \ifx \tabu@drsc@L\relax \else \tabu@setsave \tabu@drsc@L \fi + \tabu@setsave \tabu@ls@L \tabu@setsave \tabu@evr@L + \expandafter \endgroup \expandafter + \def\expandafter\tabu@saved@ \expandafter{\the\@temptokena + \let\tabu@arc@G \tabu@arc@L + \let\tabu@drsc@G \tabu@drsc@L + \let\tabu@ls@G \tabu@ls@L + \let\tabu@rc@G \tabu@rc@L + \let\tabu@evr@G \tabu@evr@L}% + \def\tabu@reset{\tabu@savedparams + \tabu@everyrowtrue \c@taburow \z@ + \let\CT@arc@ \tabu@arc@L + \let\CT@drsc@ \tabu@drsc@L + \let\tabu@ls@ \tabu@ls@L + \let\tabu@rc@ \tabu@rc@L + \global\tabu@alloc \tabu@alloc@save + \everyrow\expandafter{\tabu@evr@L}}% +}% \tabu@reset +\def\tabu@setsave #1{\expandafter\tabu@sets@ve #1\@nil{#1}} +\long\def\tabu@sets@ve #1\@nil #2{\@temptokena\expandafter{\the\@temptokena \def#2{#1}}} +%% The Rewriting Process ------------------------------------------- +\def\tabu@newcolumntype #1{% + \expandafter\tabu@new@columntype + \csname NC@find@\string#1\expandafter\endcsname + \csname NC@rewrite@\string#1\endcsname + {#1}% +}% \tabu@newcolumntype +\def\tabu@new@columntype #1#2#3{% + \def#1##1#3{\NC@{##1}}% + \let#2\relax \newcommand*#2% +}% \tabu@new@columntype +\def\tabu@privatecolumntype #1{% + \expandafter\tabu@private@columntype + \csname NC@find@\string#1\expandafter\endcsname + \csname NC@rewrite@\string#1\expandafter\endcsname + \csname tabu@NC@find@\string#1\expandafter\endcsname + \csname tabu@NC@rewrite@\string#1\endcsname + {#1}% +}% \tabu@privatecolumntype +\def\tabu@private@columntype#1#2#3#4{% + \g@addto@macro\tabu@privatecolumns{\let#1#3\let#2#4}% + \tabu@new@columntype#3#4% +}% \tabu@private@columntype +\let\tabu@privatecolumns \@empty +\newcommand*\tabucolumn [1]{\expandafter \def \expandafter + \tabu@highprioritycolumns\expandafter{\tabu@highprioritycolumns + \NC@do #1}}% +\let\tabu@highprioritycolumns \@empty +%% The | ``column'' : rewriting process -------------------------- +\tabu@privatecolumntype |{\tabu@rewritevline} +\newcommand*\tabu@rewritevline[1][]{\tabu@vlinearg{#1}% + \expandafter \NC@find \tabu@rewritten} +\def\tabu@lines #1{% + \ifx|#1\else \tabu@privatecolumntype #1{\tabu@rewritevline}\fi + \NC@list\expandafter{\the\NC@list \NC@do #1}% +}% \tabu@lines@ +\def\tabu@vlinearg #1{% + \ifx\\#1\\\def\tabu@thestyle {\tabu@ls@}% + \else\tabu@getline {#1}% + \fi + \def\tabu@rewritten ##1{\def\tabu@rewritten{!{##1\tabu@thevline}}% + }\expandafter\tabu@rewritten\expandafter{\tabu@thestyle}% + \expandafter \tabu@keepls \tabu@thestyle \@nil +}% \tabu@vlinearg +\def\tabu@keepls #1\@nil{% + \ifcat $\@cdr #1\@nil $% + \ifx \relax#1\else + \ifx \tabu@ls@#1\else + \let#1\relax + \xdef\tabu@mkpreambuffer{\tabu@mkpreambuffer + \tabu@savels\noexpand#1}\fi\fi\fi +}% \tabu@keepls +\def\tabu@thevline {\begingroup + \ifdefined\tabu@leaders + \setbox\@tempboxa=\vtop to\dimexpr + \ht\@arstrutbox+\dp\@arstrutbox{{\tabu@thevleaders}}% + \ht\@tempboxa=\ht\@arstrutbox \dp\@tempboxa=\dp\@arstrutbox + \box\@tempboxa + \else + \tabu@thevrule + \fi \endgroup +}% \tabu@thevline +\def\tabu@savels #1{% + \expandafter\let\csname\string#1\endcsname #1% + \expandafter\def\expandafter\tabu@reset\expandafter{\tabu@reset + \tabu@resetls#1}}% +\def\tabu@resetls #1{\expandafter\let\expandafter#1\csname\string#1\endcsname}% +%% \multicolumn inside tabu environment ----------------------------- +\tabu@newcolumntype \tabu@rewritemulticolumn{% + \aftergroup \tabu@endrewritemulticolumn % after \@mkpream group + \NC@list{\NC@do *}\tabu@textbar \tabu@lines + \tabu@savedecl + \tabu@privatecolumns + \NC@list\expandafter{\the\expandafter\NC@list \tabu@NC@list}% + \let\tabu@savels \relax + \NC@find +}% \tabu@rewritemulticolumn +\def\tabu@endrewritemulticolumn{\gdef\tabu@mkpreambuffer{}\endgroup} +\def\tabu@multicolumn{\tabu@ifenvir \tabu@multic@lumn \tabu@multicolumnORI} +\long\def\tabu@multic@lumn #1#2#3{\multispan{#1}\begingroup + \tabu@everyrowtrue + \NC@list{\NC@do \tabu@rewritemulticolumn}% + \expandafter\@gobbletwo % gobbles \multispan{#1} + \tabu@multicolumnORI{#1}{\tabu@rewritemulticolumn #2}% + {\iftabuscantokens \tabu@rescan \else \expandafter\@firstofone \fi + {#3}}% +}% \tabu@multic@lumn +%% The X column(s): rewriting process ----------------------------- +\tabu@privatecolumntype X[1][]{\begingroup \tabu@siunitx{\endgroup \tabu@rewriteX {#1}}} +\def\tabu@nosiunitx #1{#1{}{}\expandafter \NC@find \tabu@rewritten } +\def\tabu@siunitx #1{\@ifnextchar \bgroup + {\tabu@rewriteX@Ss{#1}} + {\tabu@nosiunitx{#1}}} +\def\tabu@rewriteX@Ss #1#2{\@temptokena{}% + \@defaultunits \let\tabu@temp =#2\relax\@nnil + \ifodd 1\ifx S\tabu@temp \else \ifx s\tabu@temp \else 0 \fi\fi + \def\NC@find{\def\NC@find >####1####2<####3\relax{#1 {####1}{####3}% + }\expandafter\NC@find \the\@temptokena \relax + }\expandafter\NC@rewrite@S \@gobble #2\relax + \else \tabu@siunitxerror + \fi + \expandafter \NC@find \tabu@rewritten +}% \tabu@rewriteX@Ss +\def\tabu@siunitxerror {\PackageError{tabu}{Not a S nor s column ! + \MessageBreak X column can only embed siunitx S or s columns}\@ehd +}% \tabu@siunitxerror +\def\tabu@rewriteX #1#2#3{\tabu@Xarg {#1}{#2}{#3}% + \iftabu@measuring + \else \tabu@measuringtrue % first X column found in the preamble + \let\@halignto \relax \let\tabu@halignto \relax + \iftabu@spread \tabu@spreadtarget \tabu@target \tabu@target \z@ + \else \tabu@spreadtarget \z@ \fi + \ifdim \tabu@target=\z@ + \setlength\tabu@target \tabu@thetarget + \tabu@message{\tabu@message@defaulttarget}% + \else \tabu@message{\tabu@message@target}\fi + \fi +}% \tabu@rewriteX +\def\tabu@rewriteXrestore #1#2#3{\let\@halignto \relax + \def\tabu@rewritten{l}} +\def\tabu@Xarg #1#2#3{% + \advance\tabu@Xcol \@ne \let\tabu@Xlcr \@empty + \let\tabu@Xdisp \@empty \let\tabu@Xmath \@empty + \ifx\\#1\\% + \def\tabu@rewritten{p}\tabucolX \p@ % + \else + \let\tabu@rewritten \@empty \let\tabu@temp \@empty \tabucolX \z@ + \tabu@Xparse {}#1\relax + \fi + \tabu@Xrewritten{#2}{#3}% +}% \tabu@Xarg +\def\tabu@Xparse #1{\futurelet\@let@token \tabu@Xtest} +\expandafter\def\expandafter\tabu@Xparsespace\space{\tabu@Xparse{}} +\def\tabu@Xtest{% + \ifcase \ifx \relax\@let@token \z@ \else + \if ,\@let@token \m@ne\else + \if p\@let@token 1\else + \if m\@let@token 2\else + \if b\@let@token 3\else + \if l\@let@token 4\else + \if c\@let@token 5\else + \if r\@let@token 6\else + \if j\@let@token 7\else + \if L\@let@token 8\else + \if C\@let@token 9\else + \if R\@let@token 10\else + \if J\@let@token 11\else + \ifx \@sptoken\@let@token 12\else + \if .\@let@token 13\else + \if -\@let@token 13\else + \ifcat $\@let@token 14\else + 15\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\relax + \or \tabu@Xtype {p}% + \or \tabu@Xtype {m}% + \or \tabu@Xtype {b}% + \or \tabu@Xalign \raggedright\relax + \or \tabu@Xalign \centering\relax + \or \tabu@Xalign \raggedleft\relax + \or \tabu@Xalign \tabu@justify\relax + \or \tabu@Xalign \RaggedRight\raggedright + \or \tabu@Xalign \Centering\centering + \or \tabu@Xalign \RaggedLeft\raggedleft + \or \tabu@Xalign \justifying\tabu@justify + \or \expandafter \tabu@Xparsespace + \or \expandafter \tabu@Xcoef + \or \expandafter \tabu@Xm@th + \or \tabu@Xcoef{}% + \else\expandafter \tabu@Xparse + \fi +}% \tabu@Xtest +\def\tabu@Xalign #1#2{% + \ifx \tabu@Xlcr\@empty \else \PackageWarning{tabu} + {Duplicate horizontal alignment specification}\fi + \ifdefined#1\def\tabu@Xlcr{#1}\let#1\relax + \else \def\tabu@Xlcr{#2}\let#2\relax\fi + \expandafter\tabu@Xparse +}% \tabu@Xalign +\def\tabu@Xtype #1{% + \ifx \tabu@rewritten\@empty \else \PackageWarning{tabu} + {Duplicate vertical alignment specification}\fi + \def\tabu@rewritten{#1}\expandafter\tabu@Xparse +}% \tabu@Xtype +\def\tabu@Xcoef#1{\edef\tabu@temp{\tabu@temp#1}% + \afterassignment\tabu@Xc@ef \tabu@cnt\number\if-#10\fi +}% \tabu@Xcoef +\def\tabu@Xc@ef{\advance\tabucolX \tabu@temp\the\tabu@cnt\p@ + \tabu@Xparse{}% +}% \tabu@Xc@ef +\def\tabu@Xm@th #1{\futurelet \@let@token \tabu@Xd@sp} +\def\tabu@Xd@sp{\let\tabu@Xmath=$% + \ifx $\@let@token \def\tabu@Xdisp{\displaystyle}% + \expandafter\tabu@Xparse + \else \expandafter\tabu@Xparse\expandafter{\expandafter}% + \fi +}% \tabu@Xd@sp +\def\tabu@Xrewritten {% + \ifx \tabu@rewritten\@empty \def\tabu@rewritten{p}\fi + \ifdim \tabucolX<\z@ \tabu@negcoeftrue + \else\ifdim \tabucolX=\z@ \tabucolX \p@ + \fi\fi + \edef\tabu@temp{{\the\tabu@Xcol}{\tabu@strippt\tabucolX}}% + \edef\tabu@Xcoefs{\tabu@Xcoefs \tabu@ \tabu@temp}% + \edef\tabu@rewritten ##1##2{\def\noexpand\tabu@rewritten{% + >{\tabu@Xlcr \ifx$\tabu@Xmath$\tabu@Xdisp\fi ##1}% + \tabu@rewritten {\tabu@hsize \tabu@temp}% + <{##2\ifx$\tabu@Xmath$\fi}}% + }\tabu@rewritten +}% \tabu@Xrewritten +\def\tabu@hsize #1#2{% + \ifdim #2\p@<\z@ + \ifdim \tabucolX=\maxdimen \tabu@wd{#1}\else + \ifdim \tabu@wd{#1}<-#2\tabucolX \tabu@wd{#1}\else -#2\tabucolX\fi + \fi + \else #2\tabucolX + \fi +}% \tabu@hsize +%% \usetabu and \preamble: rewriting process --------------------- +\tabu@privatecolumntype \usetabu [1]{% + \ifx\\#1\\\tabu@saveerr{}\else + \@ifundefined{tabu@saved@\string#1} + {\tabu@saveerr{#1}} + {\let\tabu@rewriteX \tabu@rewriteXrestore + \csname tabu@saved@\string#1\expandafter\endcsname\expandafter\@ne}% + \fi +}% \NC@rewrite@\usetabu +\tabu@privatecolumntype \preamble [1]{% + \ifx\\#1\\\tabu@saveerr{}\else + \@ifundefined{tabu@saved@\string#1} + {\tabu@saveerr{#1}} + {\csname tabu@saved@\string#1\expandafter\endcsname\expandafter\z@}% + \fi +}% \NC@rewrite@\preamble +%% Controlling the rewriting process ------------------------------- +\tabu@newcolumntype \tabu@rewritefirst{% + \iftabu@long \aftergroup \tabu@longpream % + \else \aftergroup \tabu@pream + \fi + \let\tabu@ \relax \let\tabu@hsize \relax + \let\tabu@Xcoefs \@empty \let\tabu@savels \relax + \tabu@Xcol \z@ \tabu@cnt \tw@ + \gdef\tabu@mkpreambuffer{\tabu@{}}\tabu@measuringfalse + \global\setbox\@arstrutbox \box\@arstrutbox + \NC@list{\NC@do *}\tabu@textbar \tabu@lines + \NC@list\expandafter{\the\NC@list \NC@do X}% + \iftabu@siunitx % + \NC@list\expandafter{\the\NC@list \NC@do S\NC@do s}\fi + \NC@list\expandafter{\the\expandafter\NC@list \tabu@highprioritycolumns}% + \expandafter\def\expandafter\tabu@NC@list\expandafter{% + \the\expandafter\NC@list \tabu@NC@list}% % * | X S + \NC@list\expandafter{\expandafter \NC@do \expandafter\usetabu + \expandafter \NC@do \expandafter\preamble + \the\NC@list \NC@do \tabu@rewritemiddle + \NC@do \tabu@rewritelast}% + \tabu@savedecl + \tabu@privatecolumns + \edef\tabu@prev{\the\@temptokena}\NC@find \tabu@rewritemiddle +}% NC@rewrite@\tabu@rewritefirst +\tabu@newcolumntype \tabu@rewritemiddle{% + \edef\tabu@temp{\the\@temptokena}\NC@find \tabu@rewritelast +}% \NC@rewrite@\tabu@rewritemiddle +\tabu@newcolumntype \tabu@rewritelast{% + \ifx \tabu@temp\tabu@prev \advance\tabu@cnt \m@ne + \NC@list\expandafter{\tabu@NC@list \NC@do \tabu@rewritemiddle + \NC@do \tabu@rewritelast}% + \else \let\tabu@prev\tabu@temp + \fi + \ifcase \tabu@cnt \expandafter\tabu@endrewrite + \else \expandafter\NC@find \expandafter\tabu@rewritemiddle + \fi +}% \NC@rewrite@\tabu@rewritelast +%% Choosing the strategy -------------------------------------------- +\def\tabu@endrewrite {% + \let\tabu@temp \NC@find + \ifx \@arrayright\relax \let\@arrayright \@empty \fi + \count@=% + \ifx \@finalstrut\tabu@finalstrut \z@ % outer in mode 0 print + \iftabu@measuring + \xdef\tabu@mkpreambuffer{\tabu@mkpreambuffer + \tabu@target \csname tabu@\the\tabu@nested.T\endcsname + \tabucolX \csname tabu@\the\tabu@nested.X\endcsname + \edef\@halignto {\ifx\@arrayright\@empty to\tabu@target\fi}}% + \fi + \else\iftabu@measuring 4 % X columns + \xdef\tabu@mkpreambuffer{\tabu@{\tabu@mkpreambuffer + \tabu@target \the\tabu@target + \tabu@spreadtarget \the\tabu@spreadtarget}% + \def\noexpand\tabu@Xcoefs{\tabu@Xcoefs}% + \edef\tabu@halignto{\ifx \@arrayright\@empty to\tabu@target\fi}}% + \let\tabu@Xcoefs \relax + \else\ifcase\tabu@nested \thr@@ % outer, no X + \global\let\tabu@afterendpar \relax + \else \@ne % inner, no X, outer in mode 1 or 2 + \fi + \ifdefined\tabu@usetabu + \else \ifdim\tabu@target=\z@ + \else \let\tabu@temp \tabu@extracolsep + \fi\fi + \fi + \fi + \xdef\tabu@mkpreambuffer{\count@ \the\count@ \tabu@mkpreambuffer}% + \tabu@temp +}% \tabu@endrewrite +\def\tabu@extracolsep{\@defaultunits \expandafter\let + \expandafter\tabu@temp \expandafter=\the\@temptokena \relax\@nnil + \ifx \tabu@temp\@sptoken + \expandafter\tabu@gobblespace \expandafter\tabu@extracolsep + \else + \edef\tabu@temp{\noexpand\NC@find + \if |\noexpand\tabu@temp @% + \else\if !\noexpand\tabu@temp @% + \else !% + \fi\fi + {\noexpand\extracolsep\noexpand\@flushglue}}% + \fi + \tabu@temp +}% \tabu@extrac@lsep +%% Implementing the strategy ---------------------------------------- +\long\def\tabu@pream #1\@preamble {% + \let\tabu@ \tabu@@ \tabu@mkpreambuffer \tabu@aftergroupcleanup + \NC@list\expandafter {\tabu@NC@list}% in case of nesting... + \ifdefined\tabu@usetabu \tabu@usetabu \tabu@target \z@ \fi + \let\tabu@savedpreamble \@preamble + \global\let\tabu@elapsedtime \relax + \tabu@thebody ={#1\tabu@aftergroupcleanup}% + \tabu@thebody =\expandafter{\the\expandafter\tabu@thebody + \@preamble}% + \edef\tabuthepreamble {\the\tabu@thebody}% ( no @ allowed for \scantokens ) + \tabu@select +}% \tabu@pream +\long\def\tabu@longpream #1\LT@bchunk #2\LT@bchunk{% + \let\tabu@ \tabu@@ \tabu@mkpreambuffer \tabu@aftergroupcleanup + \NC@list\expandafter {\tabu@NC@list}% in case of nesting... + \let\tabu@savedpreamble \@preamble + \global\let\tabu@elapsedtime \relax + \tabu@thebody ={#1\LT@bchunk #2\tabu@aftergroupcleanup \LT@bchunk}% + \edef\tabuthepreamble {\the\tabu@thebody}% ( no @ allowed for \scantokens ) + \tabu@select +}% \tabu@longpream +\def\tabu@select {% + \ifnum\tabu@nested>\z@ \tabuscantokensfalse \fi + \ifnum \count@=\@ne \iftabu@measuring \count@=\tw@ \fi\fi + \ifcase \count@ + \global\let\tabu@elapsedtime \relax + \tabu@seteverycr + \expandafter \tabuthepreamble % vertical adjustment (inherited from outer) + \or % exit in vertical measure + struts per cell because no X and outer in mode 3 + \tabu@evr{\tabu@verticalinit}\tabu@celllalign@def{\tabu@verticalmeasure}% + \def\tabu@cellralign{\tabu@verticalspacing}% + \tabu@seteverycr + \expandafter \tabuthepreamble + \or % exit without measure because no X and outer in mode 4 + \tabu@evr{}\tabu@celllalign@def{}\let\tabu@cellralign \@empty + \tabu@seteverycr + \expandafter \tabuthepreamble + \else % needs trials + \tabu@evr{}\tabu@celllalign@def{}\let\tabu@cellralign \@empty + \tabu@savecounters + \expandafter \tabu@setstrategy + \fi +}% \tabu@select +\def\tabu@@ {\gdef\tabu@mkpreambuffer} +%% Protections to set up before trials ------------------------------ +\def\tabu@setstrategy {\begingroup % + \tabu@trialh@@k \tabu@cnt \z@ % number of trials + \hbadness \@M \let\hbadness \@tempcnta + \hfuzz \maxdimen \let\hfuzz \@tempdima + \let\write \tabu@nowrite\let\GenericError \tabu@GenericError + \let\savetabu \@gobble \let\tabudefaulttarget \linewidth + \let\@footnotetext \@gobble \let\@xfootnote \tabu@xfootnote + \let\color \tabu@nocolor\let\rowcolor \tabu@norowcolor + \let\tabu@aftergroupcleanup \relax % only after the last trial + \tabu@mkpreambuffer + \ifnum \count@>\thr@@ \let\@halignto \@empty \tabucolX@init + \def\tabu@lasttry{\m@ne\p@}\fi + \begingroup \iffalse{\fi \ifnum0=`}\fi + \toks@{}\def\tabu@stack{b}\iftabuscantokens \endlinechar=10 \obeyspaces \fi % + \tabu@collectbody \tabu@strategy % +}% \tabu@setstrategy +\def\tabu@savecounters{% + \def\@elt ##1{\csname c@##1\endcsname\the\csname c@##1\endcsname}% + \edef\tabu@clckpt {\begingroup \globaldefs=\@ne \cl@@ckpt \endgroup}\let\@elt \relax +}% \tabu@savecounters +\def\tabucolX@init {% \tabucolX <= \tabu@target / (sum coefs > 0) + \dimen@ \z@ \tabu@Xsum \z@ \tabucolX \z@ \let\tabu@ \tabu@Xinit \tabu@Xcoefs + \ifdim \dimen@>\z@ + \@tempdima \dimexpr \tabu@target *\p@/\dimen@ + \tabu@hfuzz\relax + \ifdim \tabucolX<\@tempdima \tabucolX \@tempdima \fi + \fi +}% \tabucolX@init +\def\tabu@Xinit #1#2{\tabu@Xcol #1 \advance \tabu@Xsum + \ifdim #2\p@>\z@ #2\p@ \advance\dimen@ #2\p@ + \else -#2\p@ \tabu@negcoeftrue + \@tempdima \dimexpr \tabu@target*\p@/\dimexpr-#2\p@\relax \relax + \ifdim \tabucolX<\@tempdima \tabucolX \@tempdima \fi + \tabu@wddef{#1}{0pt}% + \fi +}% \tabu@Xinit +%% Collecting the environment body ---------------------------------- +\long\def\tabu@collectbody #1#2\end #3{% + \edef\tabu@stack{\tabu@pushbegins #2\begin\end\expandafter\@gobble\tabu@stack}% + \ifx \tabu@stack\@empty + \toks@\expandafter{\expandafter\tabu@thebody\expandafter{\the\toks@ #2}% + \def\tabu@end@envir{\end{#3}}% + \iftabuscantokens + \iftabu@long \def\tabu@endenvir {\end{#3}\tabu@gobbleX}% + \else \def\tabu@endenvir {\let\endarray \@empty + \end{#3}\tabu@gobbleX}% + \fi + \else \def\tabu@endenvir {\end{#3}}\fi}% + \let\tabu@collectbody \tabu@endofcollect + \else\def\tabu@temp{#3}% + \ifx \tabu@temp\@empty \toks@\expandafter{\the\toks@ #2\end }% + \else \ifx\tabu@temp\tabu@@spxiii \toks@\expandafter{\the\toks@ #2\end #3}% + \else \ifx\tabu@temp\tabu@X \toks@\expandafter{\the\toks@ #2\end #3}% + \else \toks@\expandafter{\the\toks@ #2\end{#3}}% + \fi\fi\fi + \fi + \tabu@collectbody{#1}% +}% \tabu@collectbody +\long\def\tabu@pushbegins#1\begin#2{\ifx\end#2\else b\expandafter\tabu@pushbegins\fi}% +\def\tabu@endofcollect #1{\ifnum0=`{}\fi + \expandafter\endgroup \the\toks@ #1% +}% \tabu@endofcollect +%% The trials: switching between strategies ------------------------- +\def\tabu@strategy {\relax % stops \count@ assignment ! + \ifcase\count@ % case 0 = print with vertical adjustment (outer is finished) + \expandafter \tabu@endoftrials + \or % case 1 = exit in vertical measure (outer in mode 3) + \expandafter\xdef\csname tabu@\the\tabu@nested.T\endcsname{\the\tabu@target}% + \expandafter\xdef\csname tabu@\the\tabu@nested.X\endcsname{\the\tabucolX}% + \expandafter \tabu@endoftrials + \or % case 2 = exit with a rule replacing the table (outer in mode 4) + \expandafter \tabu@quickend + \or % case 3 = outer is in mode 3 because of no X + \begingroup + \tabu@evr{\tabu@verticalinit}\tabu@celllalign@def{\tabu@verticalmeasure}% + \def\tabu@cellralign{\tabu@verticalspacing}% + \expandafter \tabu@measuring + \else % case 4 = horizontal measure + \begingroup + \global\let\tabu@elapsedtime \tabu@message@etime + \long\def\multicolumn##1##2##3{\multispan{##1}}% + \let\tabu@startpboxORI \@startpbox + \iftabu@spread + \def\tabu@naturalXmax {\z@}% + \let\tabu@naturalXmin \tabu@naturalXmax + \tabu@evr{\global\tabu@naturalX \z@}% + \let\@startpbox \tabu@startpboxmeasure + \else\iftabu@negcoef + \let\@startpbox \tabu@startpboxmeasure + \else \let\@startpbox \tabu@startpboxquick + \fi\fi + \expandafter \tabu@measuring + \fi +}% \tabu@strategy +\def\tabu@measuring{\expandafter \tabu@trial \expandafter + \count@ \the\count@ \tabu@endtrial +}% \tabu@measuring +\def\tabu@trial{\iftabu@long \tabu@longtrial \else \tabu@shorttrial \fi} +\def\tabu@shorttrial {\setbox\tabu@box \hbox\bgroup \tabu@seteverycr + \ifx \tabu@savecounters\relax \else + \let\tabu@savecounters \relax \tabu@clckpt \fi + $\iftabuscantokens \tabu@rescan \else \expandafter\@secondoftwo \fi + \expandafter{\expandafter \tabuthepreamble + \the\tabu@thebody + \csname tabu@adl@endtrial\endcsname + \endarray}$\egroup % got \tabu@box +}% \tabu@shorttrial +\def\tabu@longtrial {\setbox\tabu@box \hbox\bgroup \tabu@seteverycr + \ifx \tabu@savecounters\relax \else + \let\tabu@savecounters \relax \tabu@clckpt \fi + \iftabuscantokens \tabu@rescan \else \expandafter\@secondoftwo \fi + \expandafter{\expandafter \tabuthepreamble + \the\tabu@thebody + \tabuendlongtrial}\egroup % got \tabu@box +}% \tabu@longtrial +\def\tabuendlongtrial{% no @ allowed for \scantokens + \LT@echunk \global\setbox\@ne \hbox{\unhbox\@ne}\kern\wd\@ne + \LT@get@widths +}% \tabuendlongtrial +\def\tabu@adl@endtrial{% + \crcr \noalign{\global\adl@ncol \tabu@nbcols}}% anything global is crap, junky and fails ! +\def\tabu@seteverycr {\tabu@reset + \everycr \expandafter{\the\everycr \tabu@everycr}% + \let\everycr \tabu@noeverycr % +}% \tabu@seteverycr +\def\tabu@noeverycr{{\aftergroup\tabu@restoreeverycr \afterassignment}\toks@} +\def\tabu@restoreeverycr {\let\everycr \tabu@@everycr} +\def\tabu@everycr {\iftabu@everyrow \noalign{\tabu@everyrow}\fi} +\def\tabu@endoftrials {% + \iftabuscantokens \expandafter\@firstoftwo + \else \expandafter\@secondoftwo + \fi + {\expandafter \tabu@closetrialsgroup \expandafter + \tabu@rescan \expandafter{% + \expandafter\tabuthepreamble + \the\expandafter\tabu@thebody + \iftabu@long \else \endarray \fi}} + {\expandafter\tabu@closetrialsgroup \expandafter + \tabuthepreamble + \the\tabu@thebody}% + \tabu@endenvir % Finish ! +}% \tabu@endoftrials +\def\tabu@closetrialsgroup {% + \toks@\expandafter{\tabu@endenvir}% + \edef\tabu@bufferX{\endgroup + \tabucolX \the\tabucolX + \tabu@target \the\tabu@target + \tabu@cnt \the\tabu@cnt + \def\noexpand\tabu@endenvir{\the\toks@}% + %Quid de \@halignto = \tabu@halignto ?? + }% \tabu@bufferX + \tabu@bufferX + \ifcase\tabu@nested % print out (outer in mode 0) + \global\tabu@cnt \tabu@cnt + \tabu@evr{\tabu@verticaldynamicadjustment}% + \tabu@celllalign@def{\everypar{}}\let\tabu@cellralign \@empty + \let\@finalstrut \tabu@finalstrut + \else % vertical measure of nested tabu + \tabu@evr{\tabu@verticalinit}% + \tabu@celllalign@def{\tabu@verticalmeasure}% + \def\tabu@cellralign{\tabu@verticalspacing}% + \fi + \tabu@clckpt \let\@halignto \tabu@halignto + \let\@halignto \@empty + \tabu@seteverycr + \ifdim \tabustrutrule>\z@ \ifnum\tabu@nested=\z@ + \setbox\@arstrutbox \box\voidb@x % force \@arstrutbox to be rebuilt (visible struts) + \fi\fi +}% \tabu@closetrialsgroup +\def\tabu@quickend {\expandafter \endgroup \expandafter + \tabu@target \the\tabu@target \tabu@quickrule + \let\endarray \relax \tabu@endenvir +}% \tabu@quickend +\def\tabu@endtrial {\relax % stops \count@ assignment ! + \ifcase \count@ \tabu@err % case 0 = impossible here + \or \tabu@err % case 1 = impossible here + \or \tabu@err % case 2 = impossible here + \or % case 3 = outer goes into mode 0 + \def\tabu@bufferX{\endgroup}\count@ \z@ + \else % case 4 = outer goes into mode 3 + \iftabu@spread \tabu@spreadarith % inner into mode 1 (outer in mode 3) + \else \tabu@arith % or 2 (outer in mode 4) + \fi + \count@=% + \ifcase\tabu@nested \thr@@ % outer goes into mode 3 + \else\iftabu@measuring \tw@ % outer is in mode 4 + \else \@ne % outer is in mode 3 + \fi\fi + \edef\tabu@bufferX{\endgroup + \tabucolX \the\tabucolX + \tabu@target \the\tabu@target}% + \fi + \expandafter \tabu@bufferX \expandafter + \count@ \the\count@ \tabu@strategy +}% \tabu@endtrial +\def\tabu@err{\errmessage{(tabu) Internal impossible error! (\count@=\the\count@)}} +%% The algorithms: compute the widths / stop or go on --------------- +\def\tabu@arithnegcoef {% + \@tempdima \z@ \dimen@ \z@ \let\tabu@ \tabu@arith@negcoef \tabu@Xcoefs +}% \tabu@arithnegcoef +\def\tabu@arith@negcoef #1#2{% + \ifdim #2\p@>\z@ \advance\dimen@ #2\p@ % saturated by definition + \advance\@tempdima #2\tabucolX + \else + \ifdim -#2\tabucolX <\tabu@wd{#1}% c_i X < natural width <= \tabu@target-> saturated + \advance\dimen@ -#2\p@ + \advance\@tempdima -#2\tabucolX + \else + \advance\@tempdima \tabu@wd{#1}% natural width <= c_i X => neutralised + \ifdim \tabu@wd{#1}<\tabu@target \else % neutralised + \advance\dimen@ -#2\p@ % saturated (natural width = tabu@target) + \fi + \fi + \fi +}% \tabu@arith@negcoef +\def\tabu@givespace #1#2{% here \tabu@DELTA < \z@ + \ifdim \@tempdima=\z@ + \tabu@wddef{#1}{\the\dimexpr -\tabu@DELTA*\p@/\tabu@Xsum}% + \else + \tabu@wddef{#1}{\the\dimexpr \tabu@hsize{#1}{#2} + *(\p@ -\tabu@DELTA*\p@/\@tempdima)/\p@\relax}% + \fi +}% \tabu@givespace +\def\tabu@arith {\advance\tabu@cnt \@ne + \ifnum \tabu@cnt=\@ne \tabu@message{\tabu@titles}\fi + \tabu@arithnegcoef + \@tempdimb \dimexpr \wd\tabu@box -\@tempdima \relax % + \tabu@DELTA = \dimexpr \wd\tabu@box - \tabu@target \relax + \tabu@message{\tabu@message@arith}% + \ifdim \tabu@DELTA <\tabu@hfuzz + \ifdim \tabu@DELTA<\z@ % wd (tabu)<\tabu@target ? + \let\tabu@ \tabu@givespace \tabu@Xcoefs + \advance\@tempdima \@tempdimb \advance\@tempdima -\tabu@DELTA % for message + \else % already converged: nothing to do but nearly impossible... + \fi + \tabucolX \maxdimen + \tabu@measuringfalse + \else % need for narrower X columns + \tabucolX =\dimexpr (\@tempdima -\tabu@DELTA) *\p@/\tabu@Xsum \relax + \tabu@measuringtrue + \@whilesw \iftabu@measuring\fi {% + \advance\tabu@cnt \@ne + \tabu@arithnegcoef + \tabu@DELTA =\dimexpr \@tempdima+\@tempdimb -\tabu@target \relax % always < 0 here + \tabu@message{\tabu@header + \tabu@msgalign \tabucolX { }{ }{ }{ }{ }\@@ + \tabu@msgalign \@tempdima+\@tempdimb { }{ }{ }{ }{ }\@@ + \tabu@msgalign \tabu@target { }{ }{ }{ }{ }\@@ + \tabu@msgalign@PT \dimen@ { }{}{}{}{}{}{}\@@ + \ifdim -\tabu@DELTA<\tabu@hfuzz \tabu@spaces target ok\else + \tabu@msgalign \dimexpr -\tabu@DELTA *\p@/\dimen@ {}{}{}{}{}\@@ + \fi}% + \ifdim -\tabu@DELTA<\tabu@hfuzz + \advance\@tempdima \@tempdimb % for message + \tabu@measuringfalse + \else + \advance\tabucolX \dimexpr -\tabu@DELTA *\p@/\dimen@ \relax + \fi + }% + \fi + \tabu@message{\tabu@message@reached}% + \edef\tabu@bufferX{\endgroup \tabu@cnt \the\tabu@cnt + \tabucolX \the\tabucolX + \tabu@target \the\tabu@target}% +}% \tabu@arith +\def\tabu@spreadarith {% + \dimen@ \z@ \@tempdima \tabu@naturalXmax \let\tabu@ \tabu@spread@arith \tabu@Xcoefs + \edef\tabu@naturalXmin {\the\dimexpr\tabu@naturalXmin*\dimen@/\p@}% + \@tempdimc =\dimexpr \wd\tabu@box -\tabu@naturalXmax+\tabu@naturalXmin \relax + \iftabu@measuring + \tabu@target =\dimexpr \@tempdimc+\tabu@spreadtarget \relax + \edef\tabu@bufferX{\endgroup \tabucolX \the\tabucolX \tabu@target\the\tabu@target}% + \else + \tabu@message{\tabu@message@spreadarith}% + \ifdim \dimexpr \@tempdimc+\tabu@spreadtarget >\tabu@target + \tabu@message{(tabu) spread + \ifdim \@tempdimc>\tabu@target useless here: default target used% + \else too large: reduced to fit default target\fi.}% + \else + \tabu@target =\dimexpr \@tempdimc+\tabu@spreadtarget \relax + \tabu@message{(tabu) spread: New target set to \the\tabu@target^^J}% + \fi + \begingroup \let\tabu@wddef \@gobbletwo + \@tempdimb \@tempdima + \tabucolX@init + \tabu@arithnegcoef + \wd\tabu@box =\dimexpr \wd\tabu@box +\@tempdima-\@tempdimb \relax + \expandafter\endgroup \expandafter\tabucolX \the\tabucolX + \tabu@arith + \fi +}% \tabu@spreadarith +\def\tabu@spread@arith #1#2{% + \ifdim #2\p@>\z@ \advance\dimen@ #2\p@ + \else \advance\@tempdima \tabu@wd{#1}\relax + \fi +}% \tabu@spread@arith +%% Reporting in the .log file --------------------------------------- +\def\tabu@message@defaulttarget{% + \ifnum\tabu@nested=\z@^^J(tabu) Default target: + \ifx\tabudefaulttarget\linewidth \string\linewidth + \ifdim \tabu@thetarget=\linewidth \else + -\the\dimexpr\linewidth-\tabu@thetarget\fi = + \else\ifx\tabudefaulttarget\linegoal\string\linegoal= + \fi\fi + \else (tabu) Default target (nested): \fi + \the\tabu@target \on@line + \ifnum\tabu@nested=\z@ , page \the\c@page\fi} +\def\tabu@message@target {^^J(tabu) Target specified: + \the\tabu@target \on@line, page \the\c@page} +\def\tabu@message@arith {\tabu@header + \tabu@msgalign \tabucolX { }{ }{ }{ }{ }\@@ + \tabu@msgalign \wd\tabu@box { }{ }{ }{ }{ }\@@ + \tabu@msgalign \tabu@target { }{ }{ }{ }{ }\@@ + \tabu@msgalign@PT \dimen@ { }{}{}{}{}{}{}\@@ + \ifdim \tabu@DELTA<\tabu@hfuzz giving space\else + \tabu@msgalign \dimexpr (\@tempdima-\tabu@DELTA) *\p@/\tabu@Xsum -\tabucolX {}{}{}{}{}\@@ + \fi +}% \tabu@message@arith +\def\tabu@message@spreadarith {\tabu@spreadheader + \tabu@msgalign \tabu@spreadtarget { }{ }{ }{ }{}\@@ + \tabu@msgalign \wd\tabu@box { }{ }{ }{ }{}\@@ + \tabu@msgalign -\tabu@naturalXmax { }{}{}{}{}\@@ + \tabu@msgalign \tabu@naturalXmin { }{ }{ }{ }{}\@@ + \tabu@msgalign \ifdim \dimexpr\@tempdimc>\tabu@target \tabu@target + \else \@tempdimc+\tabu@spreadtarget \fi + {}{}{}{}{}\@@} +\def\tabu@message@negcoef #1#2{ + \tabu@spaces\tabu@spaces\space * #1. X[\rem@pt#2]: + \space width = \tabu@wd {#1} + \expandafter\string\csname tabu@\the\tabu@nested.W\number#1\endcsname + \ifdim -\tabu@pt#2\tabucolX<\tabu@target + < \number-\rem@pt#2 X + = \the\dimexpr -\tabu@pt#2\tabucolX \relax + \else + <= \the\tabu@target\space < \number-\rem@pt#2 X\fi} +\def\tabu@message@reached{\tabu@header + ******* Reached Target: + hfuzz = \tabu@hfuzz\on@line\space *******} +\def\tabu@message@etime{\edef\tabu@stoptime{\the\pdfelapsedtime}% + \tabu@message{(tabu)\tabu@spaces Time elapsed during measure: + \the\numexpr(\tabu@stoptime-\tabu@starttime-32767)/65536\relax sec + \the\numexpr\numexpr(\tabu@stoptime-\tabu@starttime) + -\numexpr(\tabu@stoptime-\tabu@starttime-32767)/65536\relax*65536\relax + *1000/65536\relax ms \tabu@spaces(\the\tabu@cnt\space + cycle\ifnum\tabu@cnt>\@ne s\fi)^^J^^J}} +\def\tabu@message@verticalsp {% + \ifdim \@tempdima>\tabu@ht + \ifdim \@tempdimb>\tabu@dp + \expandafter\expandafter\expandafter\string\tabu@ht = + \tabu@msgalign \@tempdima { }{ }{ }{ }{ }\@@ + \expandafter\expandafter\expandafter\string\tabu@dp = + \tabu@msgalign \@tempdimb { }{ }{ }{ }{ }\@@^^J% + \else + \expandafter\expandafter\expandafter\string\tabu@ht = + \tabu@msgalign \@tempdima { }{ }{ }{ }{ }\@@^^J% + \fi + \else\ifdim \@tempdimb>\tabu@dp + \tabu@spaces\tabu@spaces\tabu@spaces + \expandafter\expandafter\expandafter\string\tabu@dp = + \tabu@msgalign \@tempdimb { }{ }{ }{ }{ }\@@^^J\fi + \fi +}% \tabu@message@verticalsp +\edef\tabu@spaces{\@spaces} +\def\tabu@strippt{\expandafter\tabu@pt\the} +{\@makeother\P \@makeother\T\lowercase{\gdef\tabu@pt #1PT{#1}}} +\def\tabu@msgalign{\expandafter\tabu@msg@align\the\dimexpr} +\def\tabu@msgalign@PT{\expandafter\tabu@msg@align\romannumeral-`\0\tabu@strippt} +\def\do #1{% + \def\tabu@msg@align##1.##2##3##4##5##6##7##8##9\@@{% + \ifnum##1<10 #1 #1\else + \ifnum##1<100 #1 \else + \ifnum##1<\@m #1\fi\fi\fi + ##1.##2##3##4##5##6##7##8#1}% + \def\tabu@header{(tabu) \ifnum\tabu@cnt<10 #1\fi\the\tabu@cnt) }% + \def\tabu@titles{\ifnum \tabu@nested=\z@ + (tabu) Try#1 #1 tabu X #1 #1 #1tabu Width #1 #1 Target + #1 #1 #1 Coefs #1 #1 #1 Update^^J\fi}% + \def\tabu@spreadheader{% + (tabu) Try#1 #1 Spread #1 #1 tabu Width #1 #1 #1 Nat. X #1 #1 #1 #1Nat. Min. + #1 New Target^^J% + (tabu) sprd} + \def\tabu@message@save {\begingroup + \def\x ####1{\tabu@msg@align ####1{ }{ }{ }{ }{}\@@} + \def\z ####1{\expandafter\x\expandafter{\romannumeral-`\0\tabu@strippt + \dimexpr####1\p@{ }{ }}}% + \let\color \relax \def\tabu@rulesstyle ####1####2{\detokenize{####1}}% + \let\CT@arc@ \relax \let\@preamble \@gobble + \let\tabu@savedpream \@firstofone + \let\tabu@savedparams \@firstofone + \def\tabu@target ####1\relax {(tabu) target #1 #1 #1 #1 #1 = \x{####1}^^J}% + \def\tabucolX ####1\relax {(tabu) X columns width#1 = \x{####1}^^J}% + \def\tabu@nbcols ####1\relax {(tabu) Number of columns: \z{####1}^^J}% + \def\tabu@aligndefault ####1{(tabu) Default alignment: #1 #1 ####1^^J}% + \def\col@sep ####1\relax {(tabu) column sep #1 #1 #1 = \x{####1}^^J}% + \def\arrayrulewidth ####1\relax{(tabu) arrayrulewidth #1 = \x{####1}}% + \def\doublerulesep ####1\relax { doublerulesep = \x{####1}^^J}% + \def\extratabsurround####1\relax{(tabu) extratabsurround = \x{####1}^^J}% + \def\extrarowheight ####1\relax{(tabu) extrarowheight #1 = \x{####1}}% + \def\extrarowdepth ####1\relax {extrarowdepth = \x{####1}^^J}% + \def\abovetabulinesep####1\relax{(tabu) abovetabulinesep=\x{####1} }% + \def\belowtabulinesep####1\relax{ belowtabulinesep=\x{####1}^^J}% + \def\arraystretch ####1{(tabu) arraystretch #1 #1 = \z{####1}^^J}% + \def\minrowclearance####1\relax{(tabu) minrowclearance #1 = \x{####1}^^J}% + \def\tabu@arc@L ####1{(tabu) taburulecolor #1 #1 = ####1^^J}% + \def\tabu@drsc@L ####1{(tabu) tabudoublerulecolor= ####1^^J}% + \def\tabu@evr@L ####1{(tabu) everyrow #1 #1 #1 #1 = \detokenize{####1}^^J}% + \def\tabu@ls@L ####1{(tabu) line style = \detokenize{####1}^^J}% + \def\NC@find ####1\@nil{(tabu) tabu preamble#1 #1 = \detokenize{####1}^^J}% + \def\tabu@wddef####1####2{(tabu) Natural width ####1 = \x{####2}^^J}% + \let\edef \@gobbletwo \let\def \@empty \let\let \@gobbletwo + \tabu@message{% + (tabu) \string\savetabu{\tabu@temp}: \on@line^^J% + \tabu@usetabu \@nil^^J}% + \endgroup} +}\do{ } +%% Measuring the natural width (varwidth) - store the results ------- +\def\tabu@startpboxmeasure #1{\bgroup % entering \vtop + \edef\tabu@temp{\expandafter\@secondoftwo \ifx\tabu@hsize #1\else\relax\fi}% + \ifodd 1\ifx \tabu@temp\@empty 0 \else % starts with \tabu@hsize ? + \iftabu@spread \else % if spread -> measure + \ifdim \tabu@temp\p@>\z@ 0 \fi\fi\fi% if coef>0 -> do not measure + \let\@startpbox \tabu@startpboxORI % restore immediately (nesting) + \tabu@measuringtrue % for the quick option... + \tabu@Xcol =\expandafter\@firstoftwo\ifx\tabu@hsize #1\fi + \ifdim \tabu@temp\p@>\z@ \ifdim \tabu@temp\tabucolX<\tabu@target + \tabu@target=\tabu@temp\tabucolX \fi\fi + \setbox\tabu@box \hbox \bgroup + \begin{varwidth}\tabu@target + \let\FV@ListProcessLine \tabu@FV@ListProcessLine % \hbox to natural width... + \narrowragged \arraybackslash \parfillskip \@flushglue + \ifdefined\pdfadjustspacing \pdfadjustspacing\z@ \fi + \bgroup \aftergroup\tabu@endpboxmeasure + \ifdefined \cellspacetoplimit \tabu@cellspacepatch \fi + \else \expandafter\@gobble + \tabu@startpboxquick{#1}% \@gobble \bgroup + \fi +}% \tabu@startpboxmeasure +\def\tabu@cellspacepatch{\def\bcolumn##1\@nil{}\let\ecolumn\@empty + \bgroup\color@begingroup} +\def\tabu@endpboxmeasure {% + \@finalstrut \@arstrutbox + \end{varwidth}\egroup % + \ifdim \tabu@temp\p@ <\z@ % neg coef + \ifdim \tabu@wd\tabu@Xcol <\wd\tabu@box + \tabu@wddef\tabu@Xcol {\the\wd\tabu@box}% + \tabu@debug{\tabu@message@endpboxmeasure}% + \fi + \else % spread coef>0 + \global\advance \tabu@naturalX \wd\tabu@box + \@tempdima =\dimexpr \wd\tabu@box *\p@/\dimexpr \tabu@temp\p@\relax \relax + \ifdim \tabu@naturalXmax <\tabu@naturalX + \xdef\tabu@naturalXmax {\the\tabu@naturalX}\fi + \ifdim \tabu@naturalXmin <\@tempdima + \xdef\tabu@naturalXmin {\the\@tempdima}\fi + \fi + \box\tabu@box \egroup % end of \vtop (measure) restore \tabu@target +}% \tabu@endpboxmeasure +\def\tabu@wddef #1{\expandafter\xdef + \csname tabu@\the\tabu@nested.W\number#1\endcsname} +\def\tabu@wd #1{\csname tabu@\the\tabu@nested.W\number#1\endcsname} +\def\tabu@message@endpboxmeasure{\tabu@spaces\tabu@spaces<-> % <-> save natural wd + \the\tabu@Xcol. X[\tabu@temp]: + target = \the\tabucolX \space + \expandafter\expandafter\expandafter\string\tabu@wd\tabu@Xcol + =\tabu@wd\tabu@Xcol +}% \tabu@message@endpboxmeasure +\def\tabu@startpboxquick {\bgroup + \let\@startpbox \tabu@startpboxORI % restore immediately + \let\tabu \tabu@quick % \begin is expanded before... + \expandafter\@gobble \@startpbox % gobbles \bgroup +}% \tabu@startpboxquick +\def\tabu@quick {\begingroup \iffalse{\fi \ifnum0=`}\fi + \toks@{}\def\tabu@stack{b}\tabu@collectbody \tabu@endquick +}% \tabu@quick +\def\tabu@endquick {% + \ifodd 1\ifx\tabu@end@envir\tabu@endtabu \else + \ifx\tabu@end@envir\tabu@endtabus \else 0\fi\fi\relax + \endgroup + \else \let\endtabu \relax + \tabu@end@envir + \fi +}% \tabu@quick +\def\tabu@endtabu {\end{tabu}} +\def\tabu@endtabus {\end{tabu*}} +%% Measuring the heights and depths - store the results ------------- +\def\tabu@verticalmeasure{\everypar{}% + \ifnum \currentgrouptype>12 % 14=semi-simple, 15=math shift group + \setbox\tabu@box =\hbox\bgroup + \let\tabu@verticalspacing \tabu@verticalsp@lcr + \d@llarbegin % after \hbox ... + \else + \edef\tabu@temp{\ifnum\currentgrouptype=5\vtop + \else\ifnum\currentgrouptype=12\vcenter + \else\vbox\fi\fi}% + \setbox\tabu@box \hbox\bgroup$\tabu@temp \bgroup + \let\tabu@verticalspacing \tabu@verticalsp@pmb + \fi +}% \tabu@verticalmeasure +\def\tabu@verticalsp@lcr{% + \d@llarend \egroup % + \@tempdima \dimexpr \ht\tabu@box+\abovetabulinesep + \@tempdimb \dimexpr \dp\tabu@box+\belowtabulinesep \relax + \ifdim\tabustrutrule>\z@ \tabu@debug{\tabu@message@verticalsp}\fi + \ifdim \tabu@ht<\@tempdima \tabu@htdef{\the\@tempdima}\fi + \ifdim \tabu@dp<\@tempdimb \tabu@dpdef{\the\@tempdimb}\fi + \noindent\vrule height\@tempdima depth\@tempdimb +}% \tabu@verticalsp@lcr +\def\tabu@verticalsp@pmb{% inserts struts as needed + \par \expandafter\egroup + \expandafter$\expandafter + \egroup \expandafter + \@tempdimc \the\prevdepth + \@tempdima \dimexpr \ht\tabu@box+\abovetabulinesep + \@tempdimb \dimexpr \dp\tabu@box+\belowtabulinesep \relax + \ifdim\tabustrutrule>\z@ \tabu@debug{\tabu@message@verticalsp}\fi + \ifdim \tabu@ht<\@tempdima \tabu@htdef{\the\@tempdima}\fi + \ifdim \tabu@dp<\@tempdimb \tabu@dpdef{\the\@tempdimb}\fi + \let\@finalstrut \@gobble + \hrule height\@tempdima depth\@tempdimb width\hsize +%% \box\tabu@box +}% \tabu@verticalsp@pmb + +\def\tabu@verticalinit{% + \ifnum \c@taburow=\z@ \tabu@rearstrut \fi % after \tabu@reset ! + \advance\c@taburow \@ne + \tabu@htdef{\the\ht\@arstrutbox}\tabu@dpdef{\the\dp\@arstrutbox}% + \advance\c@taburow \m@ne +}% \tabu@verticalinit +\def\tabu@htdef {\expandafter\xdef \csname tabu@\the\tabu@nested.H\the\c@taburow\endcsname} +\def\tabu@ht {\csname tabu@\the\tabu@nested.H\the\c@taburow\endcsname} +\def\tabu@dpdef {\expandafter\xdef \csname tabu@\the\tabu@nested.D\the\c@taburow\endcsname} +\def\tabu@dp {\csname tabu@\the\tabu@nested.D\the\c@taburow\endcsname} +\def\tabu@verticaldynamicadjustment {% + \advance\c@taburow \@ne + \extrarowheight \dimexpr\tabu@ht - \ht\strutbox + \extrarowdepth \dimexpr\tabu@dp - \dp\strutbox + \let\arraystretch \@empty + \advance\c@taburow \m@ne +}% \tabu@verticaldynamicadjustment +\def\tabuphantomline{\crcr \noalign{% + {\globaldefs \@ne + \setbox\@arstrutbox \box\voidb@x + \let\tabu@@celllalign \tabu@celllalign + \let\tabu@@cellralign \tabu@cellralign + \let\tabu@@cellleft \tabu@cellleft + \let\tabu@@cellright \tabu@cellright + \let\tabu@@thevline \tabu@thevline + \let\tabu@celllalign \@empty + \let\tabu@cellralign \@empty + \let\tabu@cellright \@empty + \let\tabu@cellleft \@empty + \let\tabu@thevline \relax}% + \edef\tabu@temp{\tabu@multispan \tabu@nbcols{\noindent &}}% + \toks@\expandafter{\tabu@temp \noindent\tabu@everyrowfalse \cr + \noalign{\tabu@rearstrut + {\globaldefs\@ne + \let\tabu@celllalign \tabu@@celllalign + \let\tabu@cellralign \tabu@@cellralign + \let\tabu@cellleft \tabu@@cellleft + \let\tabu@cellright \tabu@@cellright + \let\tabu@thevline \tabu@@thevline}}}% + \expandafter}\the\toks@ +}% \tabuphantomline +%% \firsthline and \lasthline corrections --------------------------- +\def\tabu@firstline {\tabu@hlineAZ \tabu@firsthlinecorrection {}} +\def\tabu@firsthline{\tabu@hlineAZ \tabu@firsthlinecorrection \hline} +\def\tabu@lastline {\tabu@hlineAZ \tabu@lasthlinecorrection {}} +\def\tabu@lasthline {\tabu@hlineAZ \tabu@lasthlinecorrection \hline} +\def\tabu@hline {% replaces \hline if no colortbl (see \AtBeginDocument) + \noalign{\ifnum0=`}\fi + {\CT@arc@\hrule height\arrayrulewidth}% + \futurelet \tabu@temp \tabu@xhline +}% \tabu@hline +\def\tabu@xhline{% + \ifx \tabu@temp \hline + {\ifx \CT@drsc@\relax \vskip + \else\ifx \CT@drsc@\@empty \vskip + \else \CT@drsc@\hrule height + \fi\fi + \doublerulesep}% + \fi + \ifnum0=`{\fi}% +}% \tabu@xhline +\def\tabu@hlineAZ #1#2{\noalign{\ifnum0=`}\fi \dimen@ \z@ \count@ \z@ + \toks@{}\def\tabu@hlinecorrection{#1}\def\tabu@temp{#2}% + \tabu@hlineAZsurround +}% \tabu@hlineAZ +\newcommand*\tabu@hlineAZsurround[1][\extratabsurround]{% + \extratabsurround #1\let\tabucline \tabucline@scan + \let\hline \tabu@hlinescan \let\firsthline \hline + \let\cline \tabu@clinescan \let\lasthline \hline + \expandafter \futurelet \expandafter \tabu@temp + \expandafter \tabu@nexthlineAZ \tabu@temp +}% \tabu@hlineAZsurround +\def\tabu@hlinescan {\tabu@thick \arrayrulewidth \tabu@xhlineAZ \hline} +\def\tabu@clinescan #1{\tabu@thick \arrayrulewidth \tabu@xhlineAZ {\cline{#1}}} +\def\tabucline@scan{\@testopt \tabucline@sc@n {}} +\def\tabucline@sc@n #1[#2]{\tabu@xhlineAZ {\tabucline[{#1}]{#2}}} +\def\tabu@nexthlineAZ{% + \ifx \tabu@temp\hline \else + \ifx \tabu@temp\cline \else + \ifx \tabu@temp\tabucline \else + \tabu@hlinecorrection + \fi\fi\fi +}% \tabu@nexthlineAZ +\def\tabu@xhlineAZ #1{% + \toks@\expandafter{\the\toks@ #1}% + \@tempdimc \tabu@thick % The last line width + \ifcase\count@ \@tempdimb \tabu@thick % The first line width + \else \advance\dimen@ \dimexpr \tabu@thick+\doublerulesep \relax + \fi + \advance\count@ \@ne \futurelet \tabu@temp \tabu@nexthlineAZ +}% \tabu@xhlineAZ +\def\tabu@firsthlinecorrection{% \count@ = number of \hline -1 + \@tempdima \dimexpr \ht\@arstrutbox+\dimen@ + \edef\firsthline{% + \omit \hbox to\z@{\hss{\noexpand\tabu@DBG{yellow}\vrule + height \the\dimexpr\@tempdima+\extratabsurround + depth \dp\@arstrutbox + width \tabustrutrule}\hss}\cr + \noalign{\vskip -\the\dimexpr \@tempdima+\@tempdimb + +\dp\@arstrutbox \relax}% + \the\toks@ + }\ifnum0=`{\fi + \expandafter}\firsthline % we are then ! +}% \tabu@firsthlinecorrection +\def\tabu@lasthlinecorrection{% + \@tempdima \dimexpr \dp\@arstrutbox+\dimen@+\@tempdimb+\@tempdimc + \edef\lasthline{% + \the\toks@ + \noalign{\vskip -\the\dimexpr\dimen@+\@tempdimb+\dp\@arstrutbox}% + \omit \hbox to\z@{\hss{\noexpand\tabu@DBG{yellow}\vrule + depth \the\dimexpr \dp\@arstrutbox+\@tempdimb+\dimen@ + +\extratabsurround-\@tempdimc + height \z@ + width \tabustrutrule}\hss}\cr + }\ifnum0=`{\fi + \expandafter}\lasthline % we are then ! +}% \tabu@lasthlinecorrection +\def\tabu@LT@@hline{% + \ifx\LT@next\hline + \global\let\LT@next \@gobble + \ifx \CT@drsc@\relax + \gdef\CT@LT@sep{% + \noalign{\penalty-\@medpenalty\vskip\doublerulesep}}% + \else + \gdef\CT@LT@sep{% + \multispan\LT@cols{% + \CT@drsc@\leaders\hrule\@height\doublerulesep\hfill}\cr}% + \fi + \else + \global\let\LT@next\empty + \gdef\CT@LT@sep{% + \noalign{\penalty-\@lowpenalty\vskip-\arrayrulewidth}}% + \fi + \ifnum0=`{\fi}% + \multispan\LT@cols + {\CT@arc@\leaders\hrule\@height\arrayrulewidth\hfill}\cr + \CT@LT@sep + \multispan\LT@cols + {\CT@arc@\leaders\hrule\@height\arrayrulewidth\hfill}\cr + \noalign{\penalty\@M}% + \LT@next +}% \tabu@LT@@hline +%% Horizontal lines : \tabucline ------------------------------------ +\let\tabu@start \@tempcnta +\let\tabu@stop \@tempcntb +\newcommand*\tabucline{\noalign{\ifnum0=`}\fi \tabu@cline} +\newcommand*\tabu@cline[2][]{\tabu@startstop{#2}% + \ifnum \tabu@stop<\z@ \toks@{}% + \else \tabu@clinearg{#1}\tabu@thestyle + \edef\tabucline{\toks@{% + \ifnum \tabu@start>\z@ \omit + \tabu@multispan\tabu@start {\span\omit}&\fi + \omit \tabu@multispan\tabu@stop {\span\omit}% + \tabu@thehline\cr + }}\tabucline + \tabu@tracinglines{(tabu:tabucline) Style: #1^^J\the\toks@^^J^^J}% + \fi + \futurelet \tabu@temp \tabu@xcline +}% \tabu@cline +\def\tabu@clinearg #1{% + \ifx\\#1\\\let\tabu@thestyle \tabu@ls@ + \else \@defaultunits \expandafter\let\expandafter\@tempa + \romannumeral-`\0#1\relax \@nnil + \ifx \hbox\@tempa \tabu@clinebox{#1}% + \else\ifx \box\@tempa \tabu@clinebox{#1}% + \else\ifx \vbox\@tempa \tabu@clinebox{#1}% + \else\ifx \vtop\@tempa \tabu@clinebox{#1}% + \else\ifx \copy\@tempa \tabu@clinebox{#1}% + \else\ifx \leaders\@tempa \tabu@clineleads{#1}% + \else\ifx \cleaders\@tempa \tabu@clineleads{#1}% + \else\ifx \xleaders\@tempa \tabu@clineleads{#1}% + \else\tabu@getline {#1}% + \fi\fi\fi\fi\fi\fi\fi\fi + \fi +}% \tabu@clinearg +\def\tabu@clinebox #1{\tabu@clineleads{\xleaders#1\hss}} +\def\tabu@clineleads #1{% + \let\tabu@thestyle \relax \let\tabu@leaders \@undefined + \gdef\tabu@thehrule{#1}} +\def\tabu@thehline{\begingroup + \ifdefined\tabu@leaders + \noexpand\tabu@thehleaders + \else \noexpand\tabu@thehrule + \fi \endgroup +}% \tabu@thehline +\def\tabu@xcline{% + \ifx \tabu@temp\tabucline + \toks@\expandafter{\the\toks@ \noalign + {\ifx\CT@drsc@\relax \vskip + \else \CT@drsc@\hrule height + \fi + \doublerulesep}}% + \fi + \tabu@docline +}% \tabu@xcline +\def\tabu@docline {\ifnum0=`{\fi \expandafter}\the\toks@} +\def\tabu@docline@evr {\xdef\tabu@doclineafter{\the\toks@}% + \ifnum0=`{\fi}\aftergroup\tabu@doclineafter} +\def\tabu@multispan #1#2{% + \ifnum\numexpr#1>\@ne #2\expandafter\tabu@multispan + \else \expandafter\@gobbletwo + \fi {#1-1}{#2}% +}% \tabu@multispan +\def\tabu@startstop #1{\tabu@start@stop #1\relax 1-\tabu@nbcols \@nnil} +\def\tabu@start@stop #1-#2\@nnil{% + \@defaultunits \tabu@start\number 0#1\relax \@nnil + \@defaultunits \tabu@stop \number 0#2\relax \@nnil + \tabu@stop \ifnum \tabu@start>\tabu@nbcols \m@ne + \else\ifnum \tabu@stop=\z@ \tabu@nbcols + \else\ifnum \tabu@stop>\tabu@nbcols \tabu@nbcols + \else \tabu@stop + \fi\fi\fi + \advance\tabu@start \m@ne + \ifnum \tabu@start>\z@ \advance\tabu@stop -\tabu@start \fi +}% \tabu@start@stop +%% Numbers: siunitx S columns (and \tabudecimal) ------------------- +\def\tabu@tabudecimal #1{% + \def\tabu@decimal{#1}\@temptokena{}% + \let\tabu@getdecimal@ \tabu@getdecimal@ignorespaces + \tabu@scandecimal +}% \tabu@tabudecimal +\def\tabu@scandecimal{\futurelet \tabu@temp \tabu@getdecimal@} +\def\tabu@skipdecimal#1{#1\tabu@scandecimal} +\def\tabu@getdecimal@ignorespaces{% + \ifcase 0\ifx\tabu@temp\ignorespaces\else + \ifx\tabu@temp\@sptoken1\else + 2\fi\fi\relax + \let\tabu@getdecimal@ \tabu@getdecimal + \expandafter\tabu@skipdecimal + \or \expandafter\tabu@gobblespace\expandafter\tabu@scandecimal + \else \expandafter\tabu@skipdecimal + \fi +}% \tabu@getdecimal@ignorespaces +\def\tabu@get@decimal#1{\@temptokena\expandafter{\the\@temptokena #1}% + \tabu@scandecimal} +\def\do#1{% + \def\tabu@get@decimalspace#1{% + \@temptokena\expandafter{\the\@temptokena #1}\tabu@scandecimal}% +}\do{ } +\let\tabu@@tabudecimal \tabu@tabudecimal +\def\tabu@getdecimal{% + \ifcase 0\ifx 0\tabu@temp\else + \ifx 1\tabu@temp\else + \ifx 2\tabu@temp\else + \ifx 3\tabu@temp\else + \ifx 4\tabu@temp\else + \ifx 5\tabu@temp\else + \ifx 6\tabu@temp\else + \ifx 7\tabu@temp\else + \ifx 8\tabu@temp\else + \ifx 9\tabu@temp\else + \ifx .\tabu@temp\else + \ifx ,\tabu@temp\else + \ifx -\tabu@temp\else + \ifx +\tabu@temp\else + \ifx e\tabu@temp\else + \ifx E\tabu@temp\else + \ifx\tabu@cellleft\tabu@temp1\else + \ifx\ignorespaces\tabu@temp1\else + \ifx\@sptoken\tabu@temp2\else + 3\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\relax + \expandafter\tabu@get@decimal + \or \expandafter\tabu@skipdecimal + \or \expandafter\tabu@get@decimalspace + \else\expandafter\tabu@printdecimal + \fi +}% \tabu@getdecimal +\def\tabu@printdecimal{% + \edef\tabu@temp{\the\@temptokena}% + \ifx\tabu@temp\@empty\else + \ifx\tabu@temp\space\else + \expandafter\tabu@decimal\expandafter{\the\@temptokena}% + \fi\fi +}% \tabu@printdecimal +%% Verbatim inside X columns ---------------------------------------- +\def\tabu@verbatim{% + \let\verb \tabu@verb + \let\FV@DefineCheckEnd \tabu@FV@DefineCheckEnd +}% \tabu@verbatim +\let\tabu@ltx@verb \verb +\def\tabu@verb{\@ifstar {\tabu@ltx@verb*} \tabu@ltx@verb} +\def\tabu@fancyvrb {% + \def\tabu@FV@DefineCheckEnd ##1{% + \def\tabu@FV@DefineCheckEnd{% + ##1% + \let\FV@CheckEnd \tabu@FV@CheckEnd + \let\FV@@CheckEnd \tabu@FV@@CheckEnd + \let\FV@@@CheckEnd \tabu@FV@@@CheckEnd + \edef\FV@EndScanning{% + \def\noexpand\next{\noexpand\end{\FV@EnvironName}}% + \global\let\noexpand\FV@EnvironName\relax + \noexpand\next}% + \xdef\FV@EnvironName{\detokenize\expandafter{\FV@EnvironName}}}% + }\expandafter\tabu@FV@DefineCheckEnd\expandafter{\FV@DefineCheckEnd} +}% \tabu@fancyvrb +\def\tabu@FV@CheckEnd #1{\expandafter\FV@@CheckEnd \detokenize{#1\end{}}\@nil} +\edef\tabu@FV@@@CheckEnd {\detokenize{\end{}}} +\begingroup +\catcode`\[1 \catcode`\]2 +\@makeother\{ \@makeother\} + \edef\x[\endgroup + \def\noexpand\tabu@FV@@CheckEnd ##1\detokenize[\end{]##2\detokenize[}]##3% + ]\x \@nil{\def\@tempa{#2}\def\@tempb{#3}} +\def\tabu@FV@ListProcessLine #1{% + \hbox {%to \hsize{% + \kern\leftmargin + \hbox {%to \linewidth{% + \FV@LeftListNumber + \FV@LeftListFrame + \FancyVerbFormatLine{#1}\hss +%% DG/SR modification begin - Jan. 28, 1998 (for numbers=right add-on) +%% \FV@RightListFrame}% + \FV@RightListFrame + \FV@RightListNumber}% +%% DG/SR modification end + \hss}} +%% \savetabu -------------------------------------------------------- +\newcommand*\savetabu[1]{\noalign{% + \tabu@sanitizearg{#1}\tabu@temp + \ifx \tabu@temp\@empty \tabu@savewarn{}{The tabu will not be saved}\else + \@ifundefined{tabu@saved@\tabu@temp}{}{\tabu@savewarn{#1}{Overwriting}}% + \ifdefined\tabu@restored \expandafter\let + \csname tabu@saved@\tabu@temp \endcsname \tabu@restored + \else {\tabu@save}% + \fi + \fi}% +}% \savetabu +\def\tabu@save {% + \toks0\expandafter{\tabu@saved@}% + \iftabu@negcoef + \let\tabu@wddef \relax \let\tabu@ \tabu@savewd \edef\tabu@savewd{\tabu@Xcoefs}% + \toks0\expandafter{\the\toks\expandafter0\tabu@savewd}\fi + \toks1\expandafter{\tabu@savedpream}% + \toks2\expandafter{\tabu@savedpreamble}% + \let\@preamble \relax + \let\tabu@savedpream \relax \let\tabu@savedparams \relax + \edef\tabu@preamble{% + \def\noexpand\tabu@aligndefault{\tabu@align}% + \def\tabu@savedparams {\noexpand\the\toks0}% + \def\tabu@savedpream {\noexpand\the\toks1}}% + \edef\tabu@usetabu{% + \def\@preamble {\noexpand\the\toks2}% + \tabu@target \the\tabu@target \relax + \tabucolX \the\tabucolX \relax + \tabu@nbcols \the\tabu@nbcols \relax + \def\noexpand\tabu@aligndefault{\tabu@align}% + \def\tabu@savedparams {\noexpand\the\toks0}% + \def\tabu@savedpream {\noexpand\the\toks1}}% + \let\tabu@aligndefault \relax \let\@sharp \relax + \edef\@tempa{\noexpand\tabu@s@ved + {\tabu@usetabu} + {\tabu@preamble} + {\the\toks1}}\@tempa + \tabu@message@save +}% \tabu@save +\long\def\tabu@s@ved #1#2#3{% + \def\tabu@usetabu{#1}% + \expandafter\gdef\csname tabu@saved@\tabu@temp\endcsname ##1{% + \ifodd ##1% \usetabu + \tabu@measuringfalse \tabu@spreadfalse % Just in case... + \gdef\tabu@usetabu {% + \ifdim \tabu@target>\z@ \tabu@warn@usetabu \fi + \global\let\tabu@usetabu \@undefined + \def\@halignto {to\tabu@target}% + #1% + \ifx \tabu@align\tabu@aligndefault@text + \ifnum \tabu@nested=\z@ + \let\tabu@align \tabu@aligndefault \fi\fi}% + \else % \preamble + \gdef\tabu@preamble {% + \global\let\tabu@preamble \@undefined + #2% + \ifx \tabu@align\tabu@aligndefault@text + \ifnum \tabu@nested=\z@ + \let\tabu@align \tabu@aligndefault \fi\fi}% + \fi + #3}% +}% \tabu@s@ved +\def\tabu@aligndefault@text {\tabu@aligndefault}% +\def\tabu@warn@usetabu {\PackageWarning{tabu} + {Specifying a target with \string\usetabu\space is useless + \MessageBreak The target cannot be changed!}} +\def\tabu@savewd #1#2{\ifdim #2\p@<\z@ \tabu@wddef{#1}{\tabu@wd{#1}}\fi} +\def\tabu@savewarn#1#2{\PackageInfo{tabu} + {User-name `#1' already used for \string\savetabu + \MessageBreak #2}}% +\def\tabu@saveerr#1{\PackageError{tabu} + {User-name `#1' is unknown for \string\usetabu + \MessageBreak I cannot restore an unknown preamble!}\@ehd} +%% \rowfont --------------------------------------------------------- +\newskip \tabu@cellskip +\def\tabu@rowfont{\ifdim \baselineskip=\z@\noalign\fi + {\ifnum0=`}\fi \tabu@row@font} +\newcommand*\tabu@row@font[2][]{% + \ifnum7=\currentgrouptype + \global\let\tabu@@cellleft \tabu@cellleft + \global\let\tabu@@cellright \tabu@cellright + \global\let\tabu@@celllalign \tabu@celllalign + \global\let\tabu@@cellralign \tabu@cellralign + \global\let\tabu@@rowfontreset\tabu@rowfontreset + \fi + \global\let\tabu@rowfontreset \tabu@rowfont@reset + \expandafter\gdef\expandafter\tabu@cellleft\expandafter{\tabu@cellleft #2}% + \ifcsname tabu@cell@#1\endcsname % row alignment + \csname tabu@cell@#1\endcsname \fi + \ifnum0=`{\fi}% end of group / noalign group +}% \rowfont +\def\tabu@ifcolorleavevmode #1{\let\color \tabu@leavevmodecolor #1\let\color\tabu@color}% +\def\tabu@rowfont@reset{% + \global\let\tabu@rowfontreset \tabu@@rowfontreset + \global\let\tabu@cellleft \tabu@@cellleft + \global\let\tabu@cellright \tabu@@cellright + \global\let\tabu@cellfont \@empty + \global\let\tabu@celllalign \tabu@@celllalign + \global\let\tabu@cellralign \tabu@@cellralign +}% \tabu@@rowfontreset +\let\tabu@rowfontreset \@empty % overwritten \AtBeginDocument if colortbl +%% \tabu@prepnext@tok ----------------------------------------------- +\newif \iftabu@cellright +\def\tabu@prepnext@tok{% + \ifnum \count@<\z@ % + \@tempcnta \@M % + \tabu@nbcols\z@ + \let\tabu@fornoopORI \@fornoop + \tabu@cellrightfalse + \else + \ifcase \numexpr \count@-\@tempcnta \relax % (case 0): prev. token is left + \advance \tabu@nbcols \@ne + \iftabu@cellright % before-previous token is right and is finished + \tabu@cellrightfalse % + \tabu@righttok + \fi + \tabu@lefttok + \or % (case 1) previous token is right + \tabu@cellrighttrue \let\@fornoop \tabu@lastnoop + \else % special column: do not change the token + \iftabu@cellright % before-previous token is right + \tabu@cellrightfalse + \tabu@righttok + \fi + \fi % \ifcase + \fi + \tabu@prepnext@tokORI +}% \tabu@prepnext@tok +\long\def\tabu@lastnoop#1\@@#2#3{\tabu@lastn@@p #2\@nextchar \in@\in@@} +\def\tabu@lastn@@p #1\@nextchar #2#3\in@@{% + \ifx \in@#2\else + \let\@fornoop \tabu@fornoopORI + \xdef\tabu@mkpreambuffer{\tabu@nbcols\the\tabu@nbcols \tabu@mkpreambuffer}% + \toks0\expandafter{\expandafter\tabu@everyrowtrue \the\toks0}% + \expandafter\prepnext@tok + \fi +}% \tabu@lastnoop +\def\tabu@righttok{% + \advance \count@ \m@ne + \toks\count@\expandafter {\the\toks\count@ \tabu@cellright \tabu@cellralign}% + \advance \count@ \@ne +}% \tabu@righttok +\def\tabu@lefttok{\toks\count@\expandafter{\expandafter\tabu@celllalign + \the\toks\count@ \tabu@cellleft}% after because of $ +}% \tabu@lefttok +%% Neutralisation of glues ------------------------------------------ +\let\tabu@cellleft \@empty +\let\tabu@cellright \@empty +\tabu@celllalign@def{\tabu@cellleft}% +\let\tabu@cellralign \@empty +\def\tabu@cell@align #1#2#3{% + \let\tabu@maybesiunitx \toks@ \tabu@celllalign + \global \expandafter \tabu@celllalign@def \expandafter {\the\toks@ #1}% + \toks@\expandafter{\tabu@cellralign #2}% + \xdef\tabu@cellralign{\the\toks@}% + \toks@\expandafter{\tabu@cellleft #3}% + \xdef\tabu@cellleft{\the\toks@}% +}% \tabu@cell@align +\def\tabu@cell@l{% force alignment to left + \tabu@cell@align + {\tabu@removehfil \raggedright \tabu@cellleft}% left + {\tabu@flush1\tabu@ignorehfil}% right + \raggedright +}% \tabu@cell@l +\def\tabu@cell@c{% force alignment to center + \tabu@cell@align + {\tabu@removehfil \centering \tabu@flush{.5}\tabu@cellleft} + {\tabu@flush{.5}\tabu@ignorehfil} + \centering +}% \tabu@cell@c +\def\tabu@cell@r{% force alignment to right + \tabu@cell@align + {\tabu@removehfil \raggedleft \tabu@flush1\tabu@cellleft} + \tabu@ignorehfil + \raggedleft +}% \tabu@cell@r +\def\tabu@cell@j{% force justification (for p, m, b columns) + \tabu@cell@align + {\tabu@justify\tabu@cellleft} + {} + \tabu@justify +}% \tabu@cell@j +\def\tabu@justify{% + \leftskip\z@skip \@rightskip\leftskip \rightskip\@rightskip + \parfillskip\@flushglue +}% \tabu@justify +%% ragged2e settings +\def\tabu@cell@L{% force alignment to left (ragged2e) + \tabu@cell@align + {\tabu@removehfil \RaggedRight \tabu@cellleft} + {\tabu@flush 1\tabu@ignorehfil} + \RaggedRight +}% \tabu@cell@L +\def\tabu@cell@C{% force alignment to center (ragged2e) + \tabu@cell@align + {\tabu@removehfil \Centering \tabu@flush{.5}\tabu@cellleft} + {\tabu@flush{.5}\tabu@ignorehfil} + \Centering +}% \tabu@cell@C +\def\tabu@cell@R{% force alignment to right (ragged2e) + \tabu@cell@align + {\tabu@removehfil \RaggedLeft \tabu@flush 1\tabu@cellleft} + \tabu@ignorehfil + \RaggedLeft +}% \tabu@cell@R +\def\tabu@cell@J{% force justification (ragged2e) + \tabu@cell@align + {\justifying \tabu@cellleft} + {} + \justifying +}% \tabu@cell@J +\def\tabu@flush#1{% + \iftabu@colortbl % colortbl uses \hfill rather than \hfil + \hskip \ifnum13<\currentgrouptype \stretch{#1}% + \else \ifdim#1pt<\p@ \tabu@cellskip + \else \stretch{#1} + \fi\fi \relax + \else % array.sty + \ifnum 13<\currentgrouptype + \hfil \hskip1sp \relax \fi + \fi +}% \tabu@flush +\let\tabu@hfil \hfil +\let\tabu@hfill \hfill +\let\tabu@hskip \hskip +\def\tabu@removehfil{% + \iftabu@colortbl + \unkern \tabu@cellskip =\lastskip + \ifnum\gluestretchorder\tabu@cellskip =\tw@ \hskip-\tabu@cellskip + \else \tabu@cellskip \z@skip + \fi + \else + \ifdim\lastskip=1sp\unskip\fi + \ifnum\gluestretchorder\lastskip =\@ne + \hfilneg % \hfilneg for array.sty but not for colortbl... + \fi + \fi +}% \tabu@removehfil +\def\tabu@ignorehfil{\aftergroup \tabu@nohfil} +\def\tabu@nohfil{% \hfil -> do nothing + restore original \hfil + \def\hfil{\let\hfil \tabu@hfil}% local to (alignment template) group +}% \tabu@nohfil +\def\tabu@colortblalignments {% if colortbl + \def\tabu@nohfil{% + \def\hfil {\let\hfil \tabu@hfil}% local to (alignment template) group + \def\hfill {\let\hfill \tabu@hfill}% (colortbl uses \hfill) pfff... + \def\hskip ####1\relax{\let\hskip \tabu@hskip}}% local +}% \tabu@colortblalignments +%% Taking care of footnotes and hyperfootnotes ---------------------- +\long\def\tabu@footnotetext #1{% + \edef\@tempa{\the\tabu@footnotes + \noexpand\footnotetext [\the\csname c@\@mpfn\endcsname]}% + \global\tabu@footnotes\expandafter{\@tempa {#1}}}% +\long\def\tabu@xfootnotetext [#1]#2{% + \global\tabu@footnotes\expandafter{\the\tabu@footnotes + \footnotetext [{#1}]{#2}}} +\let\tabu@xfootnote \@xfootnote +\long\def\tabu@Hy@ftntext{\tabu@Hy@ftntxt {\the \c@footnote }} +\long\def\tabu@Hy@xfootnote [#1]{% + \begingroup + \value\@mpfn #1\relax + \protected@xdef \@thefnmark {\thempfn}% + \endgroup + \@footnotemark \tabu@Hy@ftntxt {#1}% +}% \tabu@Hy@xfootnote +\long\def\tabu@Hy@ftntxt #1#2{% + \edef\@tempa{% + \the\tabu@footnotes + \begingroup + \value\@mpfn #1\relax + \noexpand\protected@xdef\noexpand\@thefnmark {\noexpand\thempfn}% + \expandafter \noexpand \expandafter + \tabu@Hy@footnotetext \expandafter{\Hy@footnote@currentHref}% + }% + \global\tabu@footnotes\expandafter{\@tempa {#2}% + \endgroup}% +}% \tabu@Hy@ftntxt +\long\def\tabu@Hy@footnotetext #1#2{% + \H@@footnotetext{% + \ifHy@nesting + \hyper@@anchor {#1}{#2}% + \else + \Hy@raisedlink{% + \hyper@@anchor {#1}{\relax}% + }% + \def\@currentHref {#1}% + \let\@currentlabelname \@empty + #2% + \fi + }% +}% \tabu@Hy@footnotetext +%% No need for \arraybackslash ! ------------------------------------ +\def\tabu@latextwoe {% +\def\tabu@temp##1##2##3{{\toks@\expandafter{##2##3}\xdef##1{\the\toks@}}} +\tabu@temp \tabu@centering \centering \arraybackslash +\tabu@temp \tabu@raggedleft \raggedleft \arraybackslash +\tabu@temp \tabu@raggedright \raggedright \arraybackslash +}% \tabu@latextwoe +\def\tabu@raggedtwoe {% +\def\tabu@temp ##1##2##3{{\toks@\expandafter{##2##3}\xdef##1{\the\toks@}}} +\tabu@temp \tabu@Centering \Centering \arraybackslash +\tabu@temp \tabu@RaggedLeft \RaggedLeft \arraybackslash +\tabu@temp \tabu@RaggedRight \RaggedRight \arraybackslash +\tabu@temp \tabu@justifying \justifying \arraybackslash +}% \tabu@raggedtwoe +\def\tabu@normalcrbackslash{\let\\\@normalcr} +\def\tabu@trivlist{\expandafter\def\expandafter\@trivlist\expandafter{% + \expandafter\tabu@normalcrbackslash \@trivlist}} +%% Utilities: \fbox \fcolorbox and \tabudecimal ------------------- +\def\tabu@fbox {\leavevmode\afterassignment\tabu@beginfbox \setbox\@tempboxa\hbox} +\def\tabu@beginfbox {\bgroup \kern\fboxsep + \bgroup\aftergroup\tabu@endfbox} +\def\tabu@endfbox {\kern\fboxsep\egroup\egroup + \@frameb@x\relax} +\def\tabu@color@b@x #1#2{\leavevmode \bgroup + \def\tabu@docolor@b@x{#1{#2\color@block{\wd\z@}{\ht\z@}{\dp\z@}\box\z@}}% + \afterassignment\tabu@begincolor@b@x \setbox\z@ \hbox +}% \tabu@color@b@x +\def\tabu@begincolor@b@x {\kern\fboxsep \bgroup + \aftergroup\tabu@endcolor@b@x \set@color} +\def\tabu@endcolor@b@x {\kern\fboxsep \egroup + \dimen@\ht\z@ \advance\dimen@ \fboxsep \ht\z@ \dimen@ + \dimen@\dp\z@ \advance\dimen@ \fboxsep \dp\z@ \dimen@ + \tabu@docolor@b@x \egroup +}% \tabu@endcolor@b@x +%% Corrections (arydshln, delarray, colortbl) ----------------------- +\def\tabu@fix@arrayright {%% \@arrayright is missing from \endarray + \iftabu@colortbl + \ifdefined\adl@array % + \def\tabu@endarray{% + \adl@endarray \egroup \adl@arrayrestore \CT@end \egroup % + \@arrayright % + \gdef\@preamble{}}% + \else % + \def\tabu@endarray{% + \crcr \egroup \egroup % + \@arrayright % + \gdef\@preamble{}\CT@end}% + \fi + \else + \ifdefined\adl@array % + \def\tabu@endarray{% + \adl@endarray \egroup \adl@arrayrestore \egroup % + \@arrayright % + \gdef\@preamble{}}% + \else % + \PackageWarning{tabu} + {\string\@arrayright\space is missing from the + \MessageBreak definition of \string\endarray. + \MessageBreak Compatibility with delarray.sty is broken.}% + \fi\fi +}% \tabu@fix@arrayright +\def\tabu@adl@xarraydashrule #1#2#3{% + \ifnum\@lastchclass=\adl@class@start\else + \ifnum\@lastchclass=\@ne\else + \ifnum\@lastchclass=5 \else % @-arg (class 5) and !-arg (class 1) + \adl@leftrulefalse \fi\fi % must be treated the same + \fi + \ifadl@zwvrule\else \ifadl@inactive\else + \@addtopreamble{\vrule\@width\arrayrulewidth + \@height\z@ \@depth\z@}\fi \fi + \ifadl@leftrule + \@addtopreamble{\adl@vlineL{\CT@arc@}{\adl@dashgapcolor}% + {\number#1}#3}% + \else \@addtopreamble{\adl@vlineR{\CT@arc@}{\adl@dashgapcolor}% + {\number#2}#3} + \fi +}% \tabu@adl@xarraydashrule +\def\tabu@adl@act@endpbox {% + \unskip \ifhmode \nobreak \fi \@finalstrut \@arstrutbox + \egroup \egroup + \adl@colhtdp \box\adl@box \hfil +}% \tabu@adl@act@endpbox +\def\tabu@adl@fix {% + \let\adl@xarraydashrule \tabu@adl@xarraydashrule % arydshln + \let\adl@act@endpbox \tabu@adl@act@endpbox % arydshln + \let\adl@act@@endpbox \tabu@adl@act@endpbox % arydshln + \let\@preamerror \@preamerr % arydshln +}% \tabu@adl@fix +%% Correction for longtable' \@startbox definition ------------------ +%% => \everypar is ``missing'' : TeX should be in vertical mode +\def\tabu@LT@startpbox #1{% + \bgroup + \let\@footnotetext\LT@p@ftntext + \setlength\hsize{#1}% + \@arrayparboxrestore + \everypar{% + \vrule \@height \ht\@arstrutbox \@width \z@ + \everypar{}}% +}% \tabu@LT@startpbox +%% \tracingtabu and the package options ------------------ +\DeclareOption{delarray}{\AtEndOfPackage{\RequirePackage{delarray}}} +\DeclareOption{linegoal}{% + \AtEndOfPackage{% + \RequirePackage{linegoal}[2010/12/07]% + \let\tabudefaulttarget \linegoal% \linegoal is \linewidth if not pdfTeX +}} +\DeclareOption{scantokens}{\tabuscantokenstrue} +\DeclareOption{debugshow}{\AtEndOfPackage{\tracingtabu=\tw@}} +\def\tracingtabu {\begingroup\@ifnextchar=% + {\afterassignment\tabu@tracing\count@} + {\afterassignment\tabu@tracing\count@1\relax}} +\def\tabu@tracing{\expandafter\endgroup + \expandafter\tabu@tr@cing \the\count@ \relax +}% \tabu@tracing +\def\tabu@tr@cing #1\relax {% + \ifnum#1>\thr@@ \let\tabu@tracinglines\message + \else \let\tabu@tracinglines\@gobble + \fi + \ifnum#1>\tw@ \let\tabu@DBG \tabu@@DBG + \def\tabu@mkarstrut {\tabu@DBG@arstrut}% + \tabustrutrule 1.5\p@ + \else \let\tabu@DBG \@gobble + \def\tabu@mkarstrut {\tabu@arstrut}% + \tabustrutrule \z@ + \fi + \ifnum#1>\@ne \let\tabu@debug \message + \else \let\tabu@debug \@gobble + \fi + \ifnum#1>\z@ + \let\tabu@message \message + \let\tabu@tracing@save \tabu@message@save + \let\tabu@starttimer \tabu@pdftimer + \else + \let\tabu@message \@gobble + \let\tabu@tracing@save \@gobble + \let\tabu@starttimer \relax + \fi +}% \tabu@tr@cing +%% Setup \AtBeginDocument +\AtBeginDocument{\tabu@AtBeginDocument} +\def\tabu@AtBeginDocument{\let\tabu@AtBeginDocument \@undefined + \ifdefined\arrayrulecolor \tabu@colortbltrue % + \tabu@colortblalignments % different glues are used + \else \tabu@colortblfalse \fi + \ifdefined\CT@arc@ \else \let\CT@arc@ \relax \fi + \ifdefined\CT@drsc@\else \let\CT@drsc@ \relax \fi + \let\tabu@arc@L \CT@arc@ \let\tabu@drsc@L \CT@drsc@ + \ifodd 1\ifcsname siunitx_table_collect_begin:Nn\endcsname % + \expandafter\ifx + \csname siunitx_table_collect_begin:Nn\endcsname\relax 0\fi\fi\relax + \tabu@siunitxtrue + \else \let\tabu@maybesiunitx \@firstofone % + \let\tabu@siunitx \tabu@nosiunitx + \tabu@siunitxfalse + \fi + \ifdefined\adl@array % + \else \let\tabu@adl@fix \relax + \let\tabu@adl@endtrial \@empty \fi + \ifdefined\longtable % + \else \let\longtabu \tabu@nolongtabu \fi + \ifdefined\cellspacetoplimit \tabu@warn@cellspace\fi + \csname\ifcsname ifHy@hyperfootnotes\endcsname % + ifHy@hyperfootnotes\else iffalse\fi\endcsname + \let\tabu@footnotetext \tabu@Hy@ftntext + \let\tabu@xfootnote \tabu@Hy@xfootnote \fi + \ifdefined\FV@DefineCheckEnd% + \tabu@fancyvrb \fi + \ifdefined\color % + \let\tabu@color \color + \def\tabu@leavevmodecolor ##1{% + \def\tabu@leavevmodecolor {\leavevmode ##1}% + }\expandafter\tabu@leavevmodecolor\expandafter{\color}% + \else + \let\tabu@color \tabu@nocolor + \let\tabu@leavevmodecolor \@firstofone \fi + \tabu@latextwoe + \ifdefined\@raggedtwoe@everyselectfont % + \tabu@raggedtwoe + \else + \let\tabu@cell@L \tabu@cell@l + \let\tabu@cell@R \tabu@cell@r + \let\tabu@cell@C \tabu@cell@c + \let\tabu@cell@J \tabu@cell@j \fi + \expandafter\in@ \expandafter\@arrayright \expandafter{\endarray}% + \ifin@ \let\tabu@endarray \endarray + \else \tabu@fix@arrayright \fi% + \everyrow{}% +}% \tabu@AtBeginDocument +\def\tabu@warn@cellspace{% + \PackageWarning{tabu}{% + Package cellspace has some limitations + \MessageBreak And redefines some macros of array.sty. + \MessageBreak Please use \string\tabulinesep\space to control + \MessageBreak vertical spacing of lines inside tabu environment}% +}% \tabu@warn@cellspace +%% tabu Package initialisation +\tabuscantokensfalse +\let\tabu@arc@G \relax +\let\tabu@drsc@G \relax +\let\tabu@evr@G \@empty +\let\tabu@rc@G \@empty +\def\tabu@ls@G {\tabu@linestyle@}% +\let\tabu@@rowfontreset \@empty % +\let\tabu@@celllalign \@empty +\let\tabu@@cellralign \@empty +\let\tabu@@cellleft \@empty +\let\tabu@@cellright \@empty +\def\tabu@naturalXmin {\z@} +\def\tabu@naturalXmax {\z@} +\let\tabu@rowfontreset \@empty +\def\tabulineon {4pt}\let\tabulineoff \tabulineon +\tabu@everyrowtrue +\ifdefined\pdfelapsedtime % + \def\tabu@pdftimer {\xdef\tabu@starttime{\the\pdfelapsedtime}}% +\else \let\tabu@pdftimer \relax \let\tabu@message@etime \relax +\fi +\tracingtabu=\z@ +\newtabulinestyle {=\maxdimen}% creates the 'factory' settings \tabu@linestyle@ +\tabulinestyle{} +\taburowcolors{} +\let\tabudefaulttarget \linewidth +\ProcessOptions* % \ProcessOptions* is quicker ! +\endinput +%% +%% End of file `tabu.sty'. diff --git a/docs/.nojekyll b/client/addons/org/functions/fnc_create.sqf similarity index 100% rename from docs/.nojekyll rename to client/addons/org/functions/fnc_create.sqf diff --git a/docs.7z b/docs.7z new file mode 100644 index 0000000..52aebe1 Binary files /dev/null and b/docs.7z differ diff --git a/docs/README.md b/docs/README.md index 678ded1..94d6106 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,31 +1,142 @@ -

- - - latest-release - - - open-issues - - - build-status - -

+# ArmaDragonflyClient Documentation -Welcome to **ArmaDragonflyClient**. +This documentation provides details on all functions available in `ArmaDragonflyClient`. These functions allow you to interact with the in-memory database system for Arma 3. -This addon was designed for the Arma 3 Community.\ -If something is broken, contact **J. Schmidt92** or open a new issue on **[GitHub](https://github.com/jschmidt92/ArmaDragonflyClient/issues)**. +## Function Categories -Feel free to check out the **[Roadmap](https://github.com/users/jschmidt92/projects/7)**. _(WIP)_ +The functions are categorized by their purpose: -Copyright © 2024 Creedcoder, J.Schmidt, All rights reserved\ -Do not edit without permission! +### [Core Functions](core/README.md) +- [init](core/init.md) - Initialize the database system +- [handler](core/handler.md) - Handle callbacks from the extension +- [processQueue](core/processQueue.md) - Process queued database operations +- [scheduler](core/scheduler.md) - Schedule database operations +- [addTask](core/addTask.md) - Add a task to the scheduler +- [printAddonName](core/printAddonName.md) - Print the addon name +- [test](core/test.md) - Test the database connection -> This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.\ -To view a copy of this license, vist https://creativecommons.org/licenses/by-nc-sa/4.0/ or send a letter to Creative Commons,\ -PO Box 1866, Mountain View, CA 94042 +### [Basic Data Operations](basic/README.md) +- [get](basic/get.md) - Get a value from the database +- [set](basic/set.md) - Set a value in the database +- [delete](basic/delete.md) - Delete a value from the database +- [save](basic/save.md) - Save the database to disk +- [fetch](basic/fetch.md) - Fetch a value from the database -## Contributors +### [Hash Operations](hash/README.md) +- [hashGet](hash/hashGet.md) - Get a field from a hash +- [hashGetAll](hash/hashGetAll.md) - Get all fields from a hash +- [hashGetAllId](hash/hashGetAllId.md) - Get all fields from a hash for a specific ID +- [hashGetId](hash/hashGetId.md) - Get a field from a hash for a specific ID +- [hashSet](hash/hashSet.md) - Set a field in a hash +- [hashSetBulk](hash/hashSetBulk.md) - Set multiple fields in a hash in one operation +- [hashSetId](hash/hashSetId.md) - Set a field in a hash for a specific ID +- [hashSetIdBulk](hash/hashSetIdBulk.md) - Set multiple fields in a hash for a specific ID in one operation -- **_Creedcoder_** for his contributions, help, input and time -![logo](./_media/logo.svg) +### [List Operations](list/README.md) +- [listAdd](list/listAdd.md) - Add an item to a list +- [listGet](list/listGet.md) - Get items from a list +- [listLoad](list/listLoad.md) - Load a list from the database +- [listRemove](list/listRemove.md) - Remove an item from a list +- [listSet](list/listSet.md) - Set an item in a list + +## Usage Examples + +### Basic Usage +```sqf +// Initialize the database +[] call dragonfly_db_fnc_init; + +// Set a value +["myKey", [myValue]] call dragonfly_db_fnc_set; + +// Get a value +["myKey", "myFunction"] call dragonfly_db_fnc_get; + +// Delete a key +["myKey"] call dragonfly_db_fnc_delete; +``` + +### Hash Operations +```sqf +// Set a hash field (context mode) +["myField", [myValue]] call dragonfly_db_fnc_hashSet; + +// Get a hash field (context mode) +["myField", "myFunction"] call dragonfly_db_fnc_hashGet; + +// Get all hash fields (context mode) +["myFunction"] call dragonfly_db_fnc_hashGetAll; + +// Set multiple hash fields (context mode) +[[ + "loadout", [getUnitLoadout player], + "position", [getPosASL player], + "direction", [getDir player], + "stance", [stance player] +]] call dragonfly_db_fnc_hashSetBulk; + +// Remove a hash field (context mode) +["myField"] call dragonfly_db_fnc_hashRemove; + +// Delete a hash table (context mode) +[] call dragonfly_db_fnc_hashDelete; +``` +```sqf +// Set a hash field for specific ID +["myHash", "myField", [myValue]] call dragonfly_db_fnc_hashSetId; + +// Get a hash field for specific ID +["myHash", "myField", "myFunction"] call dragonfly_db_fnc_hashGetId; + +// Get all hash fields for specific ID +["myHash"] call dragonfly_db_fnc_hashGetAllId; + +// Set multiple hash fields for specific ID +[[ + getPlayerUID player, + "loadout", [getUnitLoadout player], + "position", [getPosASL player], + "direction", [getDir player], + "stance", [stance player] +]] call dragonfly_db_fnc_hashSetIdBulk; + +// Remove a hash field for specific ID +["myHash", "myField"] call dragonfly_db_fnc_hashRemoveId; + +// Delete a hash table for specific ID +["myHash"] call dragonfly_db_fnc_hashDeleteId; +``` + +### List Operations +```sqf +// Add an item to a list +["myList", ["myItem"]] call dragonfly_db_fnc_listAdd; + +// Set an item from a list +["myList", 0, [myNewValue]] call dragonfly_db_fnc_listSet; + +// Get an item from a list +["myList", 0, "myFunction"] call dragonfly_db_fnc_listGet; + +// Get items from a list +["myList", "myFunction"] call dragonfly_db_fnc_listLoad; + +// Remove an item from a list +["myList", 0] call dragonfly_db_fnc_listRemove; + +// Delete a list +["myList"] call dragonfly_db_fnc_listDelete; +``` + +## Function Documentation Structure + +Each function documentation includes: +- Function name and purpose +- Parameters +- Return value +- Examples +- Notes and warnings + +## License +This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. +To view a copy of this license, visit https://creativecommons.org/licenses/by-nc-sa/4.0/ or send a letter to Creative Commons,
PO Box 1866, Mountain View, CA 94042 \ No newline at end of file diff --git a/docs/_media/logo.svg b/docs/_media/logo.svg deleted file mode 100644 index b87e1e5..0000000 --- a/docs/_media/logo.svg +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_navbar.md b/docs/_navbar.md deleted file mode 100644 index 44fdabd..0000000 --- a/docs/_navbar.md +++ /dev/null @@ -1,35 +0,0 @@ -* [Getting Started](getting-started/index.md) - -* Main - * [Add Task](main/addTask.md) - * [Handler](main/handler.md) - * [Init](main/init.md) - * [Process Queue](main/processQueue.md) - * [Scheduler](main/scheduler.md) - * [Setup](main/setup.md) - -* Generic - * [Delete Key](generic/delete.md) - * [Get Key](generic/get.md) - * [Set Key](generic/set.md) - -* Hashes - * [Hash Get](hashes/hashGet.md) - * [Hash Get ID](hashes/hashGetId.md) - * [Hash Get All](hashes/hashGetAll.md) - * [Hash Get All ID](hashes/hashGetAllId.md) - * [Hash Set](hashes/hashSet.md) - * [Hash Set ID](hashes/hashSetId.md) - * [Hash Set Bulk](hashes/hashSetBulk.md) - * [Hash Set Bulk ID](hashes/hashSetBulkId.md) - -* Lists - * [List Add](lists/listAdd.md) - * [List Get](lists/listGet.md) - * [List Load](lists/listLoad.md) - * [List Remove](lists/listRemove.md) - * [List Set](lists/listSet.md) - -* Misc - * [Save DB](misc/saveDb.md) - * [Test](misc/test.md) \ No newline at end of file diff --git a/docs/_site/README.md b/docs/_site/README.md deleted file mode 100644 index 264a994..0000000 --- a/docs/_site/README.md +++ /dev/null @@ -1,29 +0,0 @@ -

- - - latest-release - - - open-issues - - - build-status - -

- -Welcome to **ArmaDragonflyClient**. - -This addon was designed for the Arma 3 Community.\ -If something is broken, contact **J. Schmidt92** or open a new issue on **[GitHub](https://github.com/jschmidt92/ArmaDragonflyClient/issues)**. - -Copyright © 2024 Creedcoder, J.Schmidt, All rights reserved\ -Do not edit without permission! - -> This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.\ -To view a copy of this license, vist https://creativecommons.org/licenses/by-nc-sa/4.0/ or send a letter to Creative Commons,\ -PO Box 1866, Mountain View, CA 94042 - -## Contributors - -- **_Creedcoder_** for his contributions, help, input and time -![logo](./_media/logo.svg) diff --git a/docs/_site/favicon.ico b/docs/_site/favicon.ico deleted file mode 100644 index 75a4f21..0000000 Binary files a/docs/_site/favicon.ico and /dev/null differ diff --git a/docs/_site/generic/delete.md b/docs/_site/generic/delete.md deleted file mode 100644 index 6dd0635..0000000 --- a/docs/_site/generic/delete.md +++ /dev/null @@ -1,22 +0,0 @@ -# Delete Key - -## Description - -Delete stored key from DB. - -## Usage - -```sqf -Arguments: - 0: STRING - Name of stored key from DB. - -Examples: - [getPlayerUID player] call dragonfly_db_fnc_delete (Server or Singleplayer Only) - [getPlayerUID player] remoteExecCall ["dragonfly_db_fnc_delete", 2, false] (Multiplayer Only) -``` - -## Links - -[Delete Key](generic/delete.md) | -[Get Key](generic/get.md) | -[Set Key](generic/set.md) diff --git a/docs/_site/generic/get.md b/docs/_site/generic/get.md deleted file mode 100644 index 72de62e..0000000 --- a/docs/_site/generic/get.md +++ /dev/null @@ -1,25 +0,0 @@ -# Get Key - -## Description - -Get value of stored key from DB. - -## Usage - -```sqf -Arguments: - 0: STRING - Name of stored Key - 1: STRING - NetID of target to return data from function (default: "") - 2: STRING - Name of function to return data (default: "") - 3: BOOLEAN - Unscheduled environment (default: false) - -Examples: - [getPlayerUID player, "dragonfly_db_fnc_test"] call dragonfly_db_fnc_get (Server or Singleplayer Only) - [getPlayerUID player, netId player, "dragonfly_db_fnc_test", false] remoteExecCall ["dragonfly_db_fnc_get", 2, false] (Multiplayer Only) -``` - -## Links - -[Delete Key](generic/delete.md) | -[Get Key](generic/get.md) | -[Set Key](generic/set.md) diff --git a/docs/_site/generic/set.md b/docs/_site/generic/set.md deleted file mode 100644 index c4494fe..0000000 --- a/docs/_site/generic/set.md +++ /dev/null @@ -1,23 +0,0 @@ -# Set Key - -## Description - -Set value of stored key from DB. - -## Usage - -```sqf -Arguments: - 0: STRING - Name of stored Key - 1: [ARRAY|STRING|NUMBER|BOOL] - Value to store in key (default: []) - -Examples: - ["test", ["Hello World!"]] call dragonfly_db_fnc_set (Server or Singleplayer Only) - ["test", ["Hello World!"]] remoteExecCall ["dragonfly_db_fnc_set", 2, false] (Multiplayer Only) -``` - -## Links - -[Delete Key](generic/delete.md) | -[Get Key](generic/get.md) | -[Set Key](generic/set.md) diff --git a/docs/_site/getting-started/index.md b/docs/_site/getting-started/index.md deleted file mode 100644 index 9f52702..0000000 --- a/docs/_site/getting-started/index.md +++ /dev/null @@ -1,83 +0,0 @@ -# Getting Started - -Read through [Getting Started](https://www.dragonflydb.io/docs/getting-started) Guide from DragonflyDB to get Dragonfly up and running on your machine or use the provided binaries within the `dragonfly` folder. - -## OS Compatibility - -ArmaDragonflyClient is currently only compatible with Windows. Linux is planned for a future release. - -## Usage - -1. Download the latest release from the [Releases](https://github.com/ArmaDragonflyClient/ArmaDragonflyClient/releases) page. -2. Extract the zip file to your Arma 3 directory. -3. Create the init.sqf file in your mission folder and add the following code: - -```sqf -addMissionEventHandler ["ExtensionCallback", { - params ["_name", "_function", "_data"]; - diag_log _this; - if (_name isEqualTo "ArmaDragonflyClient") then { - parseSimpleArray _data call (missionNamespace getVariable [_function, { - hint "Function does not exist!" - }]); - }; -}]; -``` - -4. Create the initServer.sqf file in your mission folder and add the following code: - -```sqf -if (isServer || isDedicated) then { - true spawn dragonfly_db_fnc_init; - [] call sof_server_init_fnc_serverSetup; -}; -``` - -5. Implement data persistence using DragonflyDB: - - - To enable saving and loading data from DragonflyDB, you need to create the necessary functions. - - Refer to the [Add Task](https://jschmidt92.github.io/ArmaDragonflyClient/#/main/addTask) wiki page for detailed information on how to create tasks in DragonflyDB. - - Utilize the `dragonfly_db_fnc_addTask` function to add tasks to the DragonflyDB queue for saving and loading data. - - Here's an example of how you can create a task to save data: - - ```sqf - ["hsetid", getPlayerUID player, "loadout", -1, getUnitLoadout player, "", "", false] call dragonfly_db_fnc_addTask; - ``` - - This example adds a task to set the value of the field "loadout" in the hash player UID to the player's loadout. - - - To load data, you can create a task using the appropriate task type, such as "hgetall" or "hget": - - ```sqf - ["hgetallid", getPlayerUID player, "", -1, [], "myCallback", "", false] call dragonfly_db_fnc_addTask; - ``` - - This example adds a task to retrieve all values from the hash player UID and pass the retrieved data to the "myCallback" function for further processing. - - - Ensure that you provide the correct task type, key names, field names, and callback functions based on your specific data requirements. Please refer to the Task Types section below for more information on available task types and their corresponding data types. - - Properly handle the retrieved data in the callback functions to utilize it effectively in your project. - -By following these steps and leveraging the `dragonfly_db_fnc_addTask` function, you can implement robust data persistence functionality using DragonflyDB in your Arma 3 project. - -### Task Types - -| Task Type | Data Type | -| ---------- | -------------------------------------------------------------------------------------------------------- | -| get | [Get Data Type](https://jschmidt92.github.io/ArmaDragonflyClient/#/generic/get) | -| set | [Set Data Type](https://jschmidt92.github.io/ArmaDragonflyClient/#/generic/set) | -| del | [Delete Data Type](https://jschmidt92.github.io/ArmaDragonflyClient/#/generic/delete) | -| hget | [Hash Get Data Type](https://jschmidt92.github.io/ArmaDragonflyClient/#/hashes/hashGet) | -| hgetid | [Hash Get by ID Data Type](https://jschmidt92.github.io/ArmaDragonflyClient/#/hashes/hashGetId) | -| hgetall | [Hash Get All Data Type](https://jschmidt92.github.io/ArmaDragonflyClient/#/hashes/hashGetAll) | -| hgetallid | [Hash Get All by ID Data Type](https://jschmidt92.github.io/ArmaDragonflyClient/#/hashes/hashGetAllId) | -| hset | [Hash Set Data Type](https://jschmidt92.github.io/ArmaDragonflyClient/#/hashes/hashSet) | -| hsetbulk | [Hash Set Bulk Data Type](https://jschmidt92.github.io/ArmaDragonflyClient/#/hashes/hashSetBulk) | -| hsetid | [Hash Set by ID Data Type](https://jschmidt92.github.io/ArmaDragonflyClient/#/hashes/hashSetId) | -| hsetidbulk | [Hash Set Bulk by ID Data Type](https://jschmidt92.github.io/ArmaDragonflyClient/#/hashes/hashSetBulkId) | -| listadd | [List Add Data Type](https://jschmidt92.github.io/ArmaDragonflyClient/#/lists/listAdd) | -| listidx | [List Index Data Type](https://jschmidt92.github.io/ArmaDragonflyClient/#/lists/listGet) | -| listrng | [List Range Data Type](https://jschmidt92.github.io/ArmaDragonflyClient/#/lists/listLoad) | -| listrem | [List Remove Data Type](https://jschmidt92.github.io/ArmaDragonflyClient/#/lists/listRemove) | -| listset | [List Set Data Type](https://jschmidt92.github.io/ArmaDragonflyClient/#/lists/listSet) | - -## Links diff --git a/docs/_site/hashes/hashGet.md b/docs/_site/hashes/hashGet.md deleted file mode 100644 index 8bfc209..0000000 --- a/docs/_site/hashes/hashGet.md +++ /dev/null @@ -1,30 +0,0 @@ -# Hash Get - -## Description - -Get value of field in hash stored at key from DB. - -## Usage - -```sqf -Arguments: - 0: STRING - Name of stored field in hash (default: "") - 1: STRING - NetID of target to return data from function (default: "") - 2: STRING - Name of function to return data (default: "") - 3: BOOLEAN - Unscheduled environment (default: false) - -Examples: - ["loadout", "", "dragonfly_db_fnc_test", false] call dragonfly_db_fnc_hashGet (Server or Singleplayer Only) - ["loadout", netId player, "dragonfly_db_fnc_test", false] remoteExecCall ["dragonfly_db_fnc_hashGet", 2, false] (Multiplayer Only) -``` - -## Links - -[Hash Get](hashes/hashGet.md) | -[Hash Get ID](hashes/hashGetId.md) | -[Hash Get All](hashes/hashGetAll.md) | -[Hash Get All ID](hashes/hashGetAllId.md) | -[Hash Set](hashes/hashSet.md) | -[Hash Set ID](hashes/hashSetId.md) | -[Hash Set Bulk](hashes/hashSetBulk.md) | -[Hash Set Bulk ID](hashes/hashSetBulkId.md) diff --git a/docs/_site/hashes/hashGetAll.md b/docs/_site/hashes/hashGetAll.md deleted file mode 100644 index 21beb12..0000000 --- a/docs/_site/hashes/hashGetAll.md +++ /dev/null @@ -1,29 +0,0 @@ -# Hash Get All - -## Description - -Get all fields and values from hash stored at key from DB. - -## Usage - -```sqf -Arguments: - 0: STRING - NetID of target to return data from function (default: "") - 1: STRING - Name of function to return data (default: "") - 2: BOOLEAN - Unscheduled environment (default: false) - -Examples: - ["", "dragonfly_db_fnc_test", false] call dragonfly_db_fnc_hashGetAll (Server or Singleplayer Only) - [netId player, "dragonfly_db_fnc_test", false] remoteExecCall ["dragonfly_db_fnc_hashGetAll", 2, false] (Multiplayer Only) -``` - -## Links - -[Hash Get](hashes/hashGet.md) | -[Hash Get ID](hashes/hashGetId.md) | -[Hash Get All](hashes/hashGetAll.md) | -[Hash Get All ID](hashes/hashGetAllId.md) | -[Hash Set](hashes/hashSet.md) | -[Hash Set ID](hashes/hashSetId.md) | -[Hash Set Bulk](hashes/hashSetBulk.md) | -[Hash Set Bulk ID](hashes/hashSetBulkId.md) diff --git a/docs/_site/hashes/hashGetAllId.md b/docs/_site/hashes/hashGetAllId.md deleted file mode 100644 index c90d2ef..0000000 --- a/docs/_site/hashes/hashGetAllId.md +++ /dev/null @@ -1,30 +0,0 @@ -# Hash Get All ID - -## Description - -Get all fields and values from hash stored at key from DB. - -## Usage - -```sqf -Arguments: - 0: STRING - Name of stored key with hash (default: "") - 1: STRING - NetID of target to return data from function (default: "") - 2: STRING - Name of function to return data (default: "") - 3: BOOLEAN - Unscheduled environment (default: false) - -Examples: - [getPlayerUID player, "", "dragonfly_db_fnc_test", false] call dragonfly_db_fnc_hashGetAllId (Server or Singleplayer Only) - [getPlayerUID player, netId player, "dragonfly_db_fnc_test", false] remoteExecCall ["dragonfly_db_fnc_hashGetAllId", 2, false] (Multiplayer Only) -``` - -## Links - -[Hash Get](hashes/hashGet.md) | -[Hash Get ID](hashes/hashGetId.md) | -[Hash Get All](hashes/hashGetAll.md) | -[Hash Get All ID](hashes/hashGetAllId.md) | -[Hash Set](hashes/hashSet.md) | -[Hash Set ID](hashes/hashSetId.md) | -[Hash Set Bulk](hashes/hashSetBulk.md) | -[Hash Set Bulk ID](hashes/hashSetBulkId.md) diff --git a/docs/_site/hashes/hashGetId.md b/docs/_site/hashes/hashGetId.md deleted file mode 100644 index 471b2be..0000000 --- a/docs/_site/hashes/hashGetId.md +++ /dev/null @@ -1,31 +0,0 @@ -# Hash Get ID - -## Description - -Get value of field in hash stored at key from DB. - -## Usage - -```sqf -Arguments: - 0: STRING - Name of stored key with hash (default: "") - 1: STRING - Name of stored field in hash (default: "") - 2: STRING - NetID of target to return data from function (default: "") - 3: STRING - Name of function to return data (default: "") - 4: BOOLEAN - Unscheduled environment (default: false) - -Examples: - [getPlayerUID player, "loadout", "", "dragonfly_db_fnc_test", false] call dragonfly_db_fnc_hashGetId (Server or Singleplayer Only) - [getPlayerUID player, "loadout", netId player, "dragonfly_db_fnc_test", false] remoteExecCall ["dragonfly_db_fnc_hashGetId", 2, false] (Multiplayer Only) -``` - -## Links - -[Hash Get](hashes/hashGet.md) | -[Hash Get ID](hashes/hashGetId.md) | -[Hash Get All](hashes/hashGetAll.md) | -[Hash Get All ID](hashes/hashGetAllId.md) | -[Hash Set](hashes/hashSet.md) | -[Hash Set ID](hashes/hashSetId.md) | -[Hash Set Bulk](hashes/hashSetBulk.md) | -[Hash Set Bulk ID](hashes/hashSetBulkId.md) diff --git a/docs/_site/hashes/hashSet.md b/docs/_site/hashes/hashSet.md deleted file mode 100644 index e0b15fb..0000000 --- a/docs/_site/hashes/hashSet.md +++ /dev/null @@ -1,28 +0,0 @@ -# Hash Set - -## Description - -Set value of field in hash stored at key from DB. - -## Usage - -```sqf -Arguments: - 0: STRING - Name of stored field in hash (default: "") - 1: [ARRAY|STRING|NUMBER|BOOL] - Value to store in hash field (default: []) - -Examples: - ["loadout", [getUnitLoadout player]] call dragonfly_db_fnc_hashSet (Server or Singleplayer Only) - ["loadout", [getUnitLoadout player]] remoteExecCall ["dragonfly_db_fnc_hashSet", 2, false] (Multiplayer Only) -``` - -## Links - -[Hash Get](hashes/hashGet.md) | -[Hash Get ID](hashes/hashGetId.md) | -[Hash Get All](hashes/hashGetAll.md) | -[Hash Get All ID](hashes/hashGetAllId.md) | -[Hash Set](hashes/hashSet.md) | -[Hash Set ID](hashes/hashSetId.md) | -[Hash Set Bulk](hashes/hashSetBulk.md) | -[Hash Set Bulk ID](hashes/hashSetBulkId.md) diff --git a/docs/_site/hashes/hashSetBulk.md b/docs/_site/hashes/hashSetBulk.md deleted file mode 100644 index 1be143a..0000000 --- a/docs/_site/hashes/hashSetBulk.md +++ /dev/null @@ -1,27 +0,0 @@ -# Hash Set Bulk - -## Description - -Set fields and values in hash stored at key from DB. - -## Usage - -```sqf -Arguments: - 0: [ARRAY|STRING|NUMBER|BOOL] - Fields and Values to store in hash (default: []) - -Examples: - ["loadout", [getUnitLoadout player], "position", [getPosASLVisual player]] call dragonfly_db_fnc_hashSetBulk (Server or Singleplayer Only) - ["loadout", [getUnitLoadout player], "position", [getPosASLVisual player]] remoteExecCall ["dragonfly_db_fnc_hashSetBulk", 2, false] (Multiplayer Only) -``` - -## Links - -[Hash Get](hashes/hashGet.md) | -[Hash Get ID](hashes/hashGetId.md) | -[Hash Get All](hashes/hashGetAll.md) | -[Hash Get All ID](hashes/hashGetAllId.md) | -[Hash Set](hashes/hashSet.md) | -[Hash Set ID](hashes/hashSetId.md) | -[Hash Set Bulk](hashes/hashSetBulk.md) | -[Hash Set Bulk ID](hashes/hashSetBulkId.md) diff --git a/docs/_site/hashes/hashSetBulkId.md b/docs/_site/hashes/hashSetBulkId.md deleted file mode 100644 index 0bd41df..0000000 --- a/docs/_site/hashes/hashSetBulkId.md +++ /dev/null @@ -1,27 +0,0 @@ -# Hash Set Bulk ID - -## Description - -Set fields and values in hash stored at key from DB. - -## Usage - -```sqf -Arguments: - 0: [ARRAY|STRING|NUMBER|BOOL] - Fields and Values to store in hash (default: []) - -Examples: - [getPlayerUID player, "loadout", [getUnitLoadout player], "position", [getPosASLVisual player]] call dragonfly_db_fnc_hashSetBulk (Server or Singleplayer Only) - [getPlayerUID player, "loadout", [getUnitLoadout player], "position", [getPosASLVisual player]] remoteExecCall ["dragonfly_db_fnc_hashSetBulk", 2, false] (Multiplayer Only) -``` - -## Links - -[Hash Get](hashes/hashGet.md) | -[Hash Get ID](hashes/hashGetId.md) | -[Hash Get All](hashes/hashGetAll.md) | -[Hash Get All ID](hashes/hashGetAllId.md) | -[Hash Set](hashes/hashSet.md) | -[Hash Set ID](hashes/hashSetId.md) | -[Hash Set Bulk](hashes/hashSetBulk.md) | -[Hash Set Bulk ID](hashes/hashSetBulkId.md) diff --git a/docs/_site/hashes/hashSetId.md b/docs/_site/hashes/hashSetId.md deleted file mode 100644 index b872000..0000000 --- a/docs/_site/hashes/hashSetId.md +++ /dev/null @@ -1,29 +0,0 @@ -# Hash Set ID - -## Description - -Set value of field in hash stored at key from DB. - -## Usage - -```sqf -Arguments: - 0: STRING - Name of stored key with hash (default: "") - 1: STRING - Name of stored field in hash (default: "") - 2: [ARRAY|STRING|NUMBER|BOOL] - Value to store in hash field (default: []) - -Examples: - [getPlayerUID player, "loadout", []] call dragonfly_db_fnc_hashSetId (Server or Singleplayer Only) - [getPlayerUID player, "loadout", []] remoteExecCall ["dragonfly_db_fnc_hashSetId", 2, false] (Multiplayer Only) -``` - -## Links - -[Hash Get](hashes/hashGet.md) | -[Hash Get ID](hashes/hashGetId.md) | -[Hash Get All](hashes/hashGetAll.md) | -[Hash Get All ID](hashes/hashGetAllId.md) | -[Hash Set](hashes/hashSet.md) | -[Hash Set ID](hashes/hashSetId.md) | -[Hash Set Bulk](hashes/hashSetBulk.md) | -[Hash Set Bulk ID](hashes/hashSetBulkId.md) diff --git a/docs/_site/index.html b/docs/_site/index.html deleted file mode 100644 index 83dcfba..0000000 --- a/docs/_site/index.html +++ /dev/null @@ -1,215 +0,0 @@ - - - - - Knowledgebase - - - - - - - - -
- - - - - - - - - diff --git a/docs/_site/lists/listAdd.md b/docs/_site/lists/listAdd.md deleted file mode 100644 index 9323b93..0000000 --- a/docs/_site/lists/listAdd.md +++ /dev/null @@ -1,25 +0,0 @@ -# List Add - -## Description - -Add element to list stored at key from DB. - -## Usage - -```sqf -Arguments: - 0: STRING - Name of stored key (default: "") - 1: [ARRAY|STRING|NUMBER|BOOL] - Value to insert into key (default: []) - -Examples: - ["events", ["Server state saved to DB 071620241600"]] call dragonfly_db_fnc_listAdd (Server or Singleplayer Only) - ["events", ["Server state saved to DB 071620241600"]] remoteExecCall ["dragonfly_db_fnc_listAdd", 2, false] (Multiplayer Only) -``` - -## Links - -[List Add](lists/listAdd.md) | -[List Get](lists/listGet.md) | -[List Load](lists/listLoad.md) | -[List Remove](lists/listRemove.md) | -[List Set](lists/listSet.md) diff --git a/docs/_site/lists/listGet.md b/docs/_site/lists/listGet.md deleted file mode 100644 index 6eba86a..0000000 --- a/docs/_site/lists/listGet.md +++ /dev/null @@ -1,28 +0,0 @@ -# List Get - -## Description - -Get element of list stored at key from DB. - -## Usage - -```sqf -Arguments: - 0: STRING - Name of stored key (default: "") - 1: SCALAR - Index of stored value in list (default: -1) - 2: STRING - NetID of target to return data from function (default: "") - 3: STRING - Name of function to return data (default: "") - 4: BOOLEAN - Unscheduled environment (default: false) - -Examples: - ["events", 0, "", "dragonfly_db_fnc_test", false] call dragonfly_db_fnc_listGet (Server or Singleplayer Only) - ["events", 0, netId player, "dragonfly_db_fnc_test", false] remoteExecCall ["dragonfly_db_fnc_listGet", 2, false] (Multiplayer Only) -``` - -## Links - -[List Add](lists/listAdd.md) | -[List Get](lists/listGet.md) | -[List Load](lists/listLoad.md) | -[List Remove](lists/listRemove.md) | -[List Set](lists/listSet.md) diff --git a/docs/_site/lists/listLoad.md b/docs/_site/lists/listLoad.md deleted file mode 100644 index 38dfc43..0000000 --- a/docs/_site/lists/listLoad.md +++ /dev/null @@ -1,27 +0,0 @@ -# List Load - -## Description - -Get all elements of list stored at key from DB. - -## Usage - -```sqf -Arguments: - 0: STRING - Name of stored key (default: "") - 1: STRING - NetID of target to return data from function (default: "") - 2: STRING - Name of function to return data (default: "") - 3: BOOLEAN - Unscheduled environment (default: false) - -Examples: - ["events", "", "dragonfly_db_fnc_test", false] call dragonfly_db_fnc_listLoad (Server or Singleplayer Only) - ["events", netId player, "dragonfly_db_fnc_test", false] remoteExecCall ["dragonfly_db_fnc_listLoad", 2, false] (Multiplayer Only) -``` - -## Links - -[List Add](lists/listAdd.md) | -[List Get](lists/listGet.md) | -[List Load](lists/listLoad.md) | -[List Remove](lists/listRemove.md) | -[List Set](lists/listSet.md) diff --git a/docs/_site/lists/listRemove.md b/docs/_site/lists/listRemove.md deleted file mode 100644 index ae35001..0000000 --- a/docs/_site/lists/listRemove.md +++ /dev/null @@ -1,25 +0,0 @@ -# List Remove - -## Description - -Remove element of list stored at key from DB. - -## Usage - -```sqf -Arguments: - 0: STRING - Name of stored key (default: "") - 1: SCALAR - Index of stored value in list (default: -1) - -Examples: - ["events", 0] call dragonfly_db_fnc_listRemove (Server or Singleplayer Only) - ["events", 0] remoteExecCall ["dragonfly_db_fnc_listRemove", 2, false] (Multiplayer Only) -``` - -## Links - -[List Add](lists/listAdd.md) | -[List Get](lists/listGet.md) | -[List Load](lists/listLoad.md) | -[List Remove](lists/listRemove.md) | -[List Set](lists/listSet.md) diff --git a/docs/_site/lists/listSet.md b/docs/_site/lists/listSet.md deleted file mode 100644 index 698bf48..0000000 --- a/docs/_site/lists/listSet.md +++ /dev/null @@ -1,26 +0,0 @@ -# List Set - -## Description - -Set element of list stored at key from DB. - -## Usage - -```sqf -Arguments: - 0: STRING - Name of stored key (default: "") - 1: SCALAR - Index of stored value in list (default: -1) - 2: [ARRAY|STRING|NUMBER|BOOL] - Value to set for index (default: []) - -Examples: - ["events", 0, ["Hello World!"]] call dragonfly_db_fnc_listSet (Server or Singleplayer Only) - ["events", 0, ["Hello World!"]] remoteExecCall ["dragonfly_db_fnc_listSet", 2, false] (Multiplayer Only) -``` - -## Links - -[List Add](lists/listAdd.md) | -[List Get](lists/listGet.md) | -[List Load](lists/listLoad.md) | -[List Remove](lists/listRemove.md) | -[List Set](lists/listSet.md) diff --git a/docs/_site/main/addTask.md b/docs/_site/main/addTask.md deleted file mode 100644 index 329d1a3..0000000 --- a/docs/_site/main/addTask.md +++ /dev/null @@ -1,32 +0,0 @@ -# Add Task - -## Description - -Add task to queue. - -## Usage - -```sqf -Arguments: - 0: STRING - Type of task - 1: STRING - Name of stored key (default: "") - 2: STRING - Name of stored hash key field (default: "") - 3: SCALAR - Index of stored value in list (default: -1) - 4: [ARRAY|STRING|NUMBER|BOOL] - Value to store in key (default: []) - 5: STRING - Name of function to return data (default: "") - 6: STRING - NetID of target to return data from function (default: "") - 7: BOOLEAN - Unscheduled environment (default: false) - -Examples: - ["hgetall", "", "", -1, [], "dragonfly_db_fnc_test", "", false] call dragonfly_db_fnc_addTask (Server or Singleplayer Only) - ["hgetallid", getPlayerUID player, "", -1, [], "dragonfly_db_fnc_test", netId player, false] remoteExecCall ["dragonfly_db_fnc_addTask", 2, false] (Multiplayer Only) -``` - -## Links - -[Add Task](main/addTask.md) | -[Handler](main/handler.md) | -[Init](main/init.md) | -[Process Queue](main/processQueue.md) | -[Scheduler](main/scheduler.md) | -[Setup](main/setup.md) diff --git a/docs/_site/main/handler.md b/docs/_site/main/handler.md deleted file mode 100644 index 16c546f..0000000 --- a/docs/_site/main/handler.md +++ /dev/null @@ -1,28 +0,0 @@ -# Handler - -## Description - -Handle data from DB. - -## Usage - -```sqf -Arguments: - 0: STRING - Name of function to return data (default: "") - 1: STRING - NetID of target to return data from function (default: "") - 2: BOOLEAN - Unscheduled environment (default: false) - 3: [ARRAY|STRING|NUMBER|BOOL] - Value to store in key (default: []) - -Examples: - ["dragonfly_db_fnc_test", "", false, ["Hello World!"]] call dragonfly_db_fnc_handler (Server or Singleplayer Only) - ["dragonfly_db_fnc_test", netId player, false, ["Hello World!"]] remoteExecCall ["dragonfly_db_fnc_handler", 2, false] (Multiplayer Only) -``` - -## Links - -[Add Task](main/addTask.md) | -[Handler](main/handler.md) | -[Init](main/init.md) | -[Process Queue](main/processQueue.md) | -[Scheduler](main/scheduler.md) | -[Setup](main/setup.md) diff --git a/docs/_site/main/init.md b/docs/_site/main/init.md deleted file mode 100644 index ed7a22a..0000000 --- a/docs/_site/main/init.md +++ /dev/null @@ -1,24 +0,0 @@ -# Initialization - -## Description - -Initial Extension settings. - -## Usage - -```sqf -Arguments: - N/A - -Example: - N/A -``` - -## Links - -[Add Task](main/addTask.md) | -[Handler](main/handler.md) | -[Init](main/init.md) | -[Process Queue](main/processQueue.md) | -[Scheduler](main/scheduler.md) | -[Setup](main/setup.md) diff --git a/docs/_site/main/processQueue.md b/docs/_site/main/processQueue.md deleted file mode 100644 index ea20d12..0000000 --- a/docs/_site/main/processQueue.md +++ /dev/null @@ -1,25 +0,0 @@ -# Process Queue - -## Description - -Processes a queue of tasks to be executed. - -## Usage - -```sqf -Arguments: - N/A - -Examples: - [] spawn dragonfly_db_fnc_processQueue (Server or Singleplayer Only) - [] remoteExec ["dragonfly_db_fnc_processQueue", 2, false] (Multiplayer Only) -``` - -## Links - -[Add Task](main/addTask.md) | -[Handler](main/handler.md) | -[Init](main/init.md) | -[Process Queue](main/processQueue.md) | -[Scheduler](main/scheduler.md) | -[Setup](main/setup.md) diff --git a/docs/_site/main/scheduler.md b/docs/_site/main/scheduler.md deleted file mode 100644 index 35f94ae..0000000 --- a/docs/_site/main/scheduler.md +++ /dev/null @@ -1,25 +0,0 @@ -# Scheduler - -## Description - -Scheduled Environment for extension. - -## Usage - -```sqf -Arguments: - 0: STRING - Task ID from extension (default: "") - -Examples: - ["071620241600_get"] call dragonfly_db_fnc_scheduler (Server or Singleplayer Only) - ["071620241600_get"] remoteExecCall ["dragonfly_db_fnc_scheduler", 2, false] (Multiplayer Only) -``` - -## Links - -[Add Task](main/addTask.md) | -[Handler](main/handler.md) | -[Init](main/init.md) | -[Process Queue](main/processQueue.md) | -[Scheduler](main/scheduler.md) | -[Setup](main/setup.md) diff --git a/docs/_site/main/setup.md b/docs/_site/main/setup.md deleted file mode 100644 index 5785bb3..0000000 --- a/docs/_site/main/setup.md +++ /dev/null @@ -1,27 +0,0 @@ -# Setup - -## Description - -Setup Extension to communicate with DB. - -## Usage - -```sqf -Arguments: - 0: STRING - Name host (default: "localhost") - 1: SCALAR - Port of host (default: 6379) - 2: STRING - Password of host (default: "xyz123") - -Examples: - ["localhost", 6379, "xyz123"] call dragonfly_db_fnc_setup (Server or Singleplayer Only) - ["localhost", 6379, "xyz123"] remoteExecCall ["dragonfly_db_fnc_setup", 2, false] (Multiplayer Only) -``` - -## Links - -[Add Task](main/addTask.md) | -[Handler](main/handler.md) | -[Init](main/init.md) | -[Process Queue](main/processQueue.md) | -[Scheduler](main/scheduler.md) | -[Setup](main/setup.md) diff --git a/docs/_site/misc/saveDb.md b/docs/_site/misc/saveDb.md deleted file mode 100644 index d129090..0000000 --- a/docs/_site/misc/saveDb.md +++ /dev/null @@ -1,22 +0,0 @@ -# Save DB - -## Description - -Save DB to disc. - -## Usage - -```sqf -Arguments: - N/A - -Examples: - [] call dragonfly_db_fnc_saveDB (Server or Singleplayer Only) - [] remoteExecCall ["dragonfly_db_fnc_saveDB", 2, false] (Multiplayer Only) -``` - -## Links - -[Save DB](misc/saveDb.md) | -[Setup](misc/setup.md) | -[Test](misc/test.md) diff --git a/docs/_site/misc/test.md b/docs/_site/misc/test.md deleted file mode 100644 index 0197da4..0000000 --- a/docs/_site/misc/test.md +++ /dev/null @@ -1,22 +0,0 @@ -# Test - -## Description - -Test Function. - -## Usage - -```sqf -Arguments: - 0: [ARRAY|STRING|NUMBER|BOOL] - Value to test (default: []) - -Examples: - ["Hello World!"] spawn dragonfly_db_fnc_test (Server or Singleplayer Only) - ["Hello World!"] remoteExec ["dragonfly_db_fnc_test", 2, false] (Multiplayer Only) -``` - -## Links - -[Save DB](misc/saveDb.md) | -[Setup](misc/setup.md) | -[Test](misc/test.md) diff --git a/docs/basic/README.md b/docs/basic/README.md new file mode 100644 index 0000000..ab4e0b8 --- /dev/null +++ b/docs/basic/README.md @@ -0,0 +1,33 @@ +# Basic Data Operations + +This section contains documentation for the basic data operations of ArmaDragonflyClient that allow for simple key-value storage and retrieval. + +## Available Functions + +- [delete](delete.md) - Delete a value from the database +- [fetch](fetch.md) - Fetch a value from the database +- [get](get.md) - Get a value from the database +- [save](save.md) - Save the database to disk +- [set](set.md) - Set a value in the database + +## Example Usage + +```sqf +// Set a value +["myKey", [myValue]] call dragonfly_db_fnc_set; + +// Get a value +["myKey", "myFunction"] call dragonfly_db_fnc_get; + +// Delete a key +["myKey"] call dragonfly_db_fnc_delete; + +// Save database to disk +[] call dragonfly_db_fnc_save; +``` + +## Related Categories + +- [Core Functions](../core/README.md) +- [Hash Operations](../hash/README.md) +- [List Operations](../list/README.md) \ No newline at end of file diff --git a/docs/basic/delete.md b/docs/basic/delete.md new file mode 100644 index 0000000..de80e9c --- /dev/null +++ b/docs/basic/delete.md @@ -0,0 +1,50 @@ +--- +title: ArmaDragonflyClient - Delete Key +icon: mdi:file-text-outline +excerpt: Remove the specified key from DragonflyClient. +--- + +# dragonfly_db_fnc_delete + +## Description +Removes the specified key from the database. This function deletes the key-value pair completely from storage. + +## Syntax +```sqf +[_key] call dragonfly_db_fnc_delete +``` + +## Parameters +| Parameter | Type | Description | +|-----------|--------|-------------------------------------------| +| `_key` | String | Name of the key to delete from the database | + +## Return Value +None. The operation runs asynchronously. + +## Examples +### Delete a key in singleplayer or on the server: +```sqf +["playerData"] call dragonfly_db_fnc_delete; +``` + +### Delete a key on the server from a client: +```sqf +["playerData"] remoteExecCall ["dragonfly_db_fnc_delete", 2, false]; +``` + +## Notes +- This operation is permanent and cannot be undone +- If the key doesn't exist, the operation will have no effect +- This function only affects specific keys, not hash tables or lists + +## Related Functions +- `dragonfly_db_fnc_get`: Retrieves a value by key +- `dragonfly_db_fnc_set`: Stores a value by key +- `dragonfly_db_fnc_scheduler`: Processes the callback response + +## Links + +[Delete Key](delete.md) | +[Get Key](get.md) | +[Set Key](set.md) \ No newline at end of file diff --git a/docs/basic/fetch.md b/docs/basic/fetch.md new file mode 100644 index 0000000..5222ff9 --- /dev/null +++ b/docs/basic/fetch.md @@ -0,0 +1,45 @@ +--- +title: ArmaDragonflyClient - Fetch +icon: mdi:file-text-outline +excerpt: Handles data chunks received from the database extension when data is too large to be returned in a single callback. +--- + +# dragonfly_db_fnc_fetch + +## Description +Handles data chunks received from the database extension when data is too large to be returned in a single callback. This function collects all chunks of data, reassembles them in the correct order, and then passes the complete data to the handler function. + +## Syntax +```sqf +[_uniqueID, _function, _index, _total, _datachunk, _call, _netId] call dragonfly_db_fnc_fetch +``` + +## Parameters +| Parameter | Type | Description | +|-------------|-----------|-------------------------------------------------------------| +| `_uniqueID` | String | Unique identifier for this data fetch operation | +| `_function` | String | Name of the function to call after data is assembled | +| `_index` | Number | Current chunk index (0-based) | +| `_total` | Number | Total number of chunks expected | +| `_datachunk`| String | The chunk of data being received | +| `_call` | Boolean | Whether to call the function directly (true) or spawn (false) | +| `_netId` | String | (Optional) NetID of the player to whom the data belongs | + +## Return Value +None. When all chunks are received, the function will: +1. Assemble the complete data string +2. Parse it as a simple array +3. Call the specified handler function with the parsed data + +## Examples +This function is typically not called directly but is triggered by the extension's callback mechanism when large datasets are retrieved. + +## Notes +- The function stores received chunks in the global array `dragonfly_db_fetch_array` +- Chunks are sorted by their index to ensure correct assembly regardless of arrival order +- After successful processing, the chunks for this uniqueID are removed from the array +- This function is essential for handling large datasets that exceed the callback buffer limit + +## Related Functions +- `dragonfly_db_fnc_handler`: Receives the assembled data and routes it to the appropriate function +- `dragonfly_db_fnc_scheduler`: Manages the callback queue and triggers data fetching diff --git a/docs/basic/get.md b/docs/basic/get.md new file mode 100644 index 0000000..2d1d0da --- /dev/null +++ b/docs/basic/get.md @@ -0,0 +1,55 @@ +--- +title: ArmaDragonflyClient - Get Key +icon: mdi:file-text-outline +excerpt: Get the value of stored key from DragonflyClient. +--- + +# dragonfly_db_fnc_get + +## Description +Retrieves the value of a stored key from the database. This function performs an asynchronous request to the database and passes the retrieved data to the specified callback function. + +## Syntax +```sqf +[_key, _function, _call, _netId] call dragonfly_db_fnc_get +``` + +## Parameters +| Parameter | Type | Description | +|-------------|-----------|-----------------------------------------------------------------| +| `_key` | String | Name of the stored key to retrieve from the database | +| `_function` | String | Name of the function to call when data is retrieved | +| `_call` | Boolean | Whether to call the function directly (true) or spawn (false) | +| `_netId` | String | (Optional) NetID of the player to whom the data should be returned | + +## Return Value +None. When data is retrieved, it will be passed to the specified function. The operation runs asynchronously. + +## Examples +### Retrieve data in singleplayer or on the server: +```sqf +[getPlayerUID player, "dragonfly_db_fnc_test"] call dragonfly_db_fnc_get; +``` + +### Retrieve data on the server and send to a specific client: +```sqf +[getPlayerUID player, "dragonfly_db_fnc_test", false, netId player] remoteExecCall ["dragonfly_db_fnc_get", 2, false]; +``` + +## Notes +- The function exit with an error if the key or function parameters are empty +- Data is processed through the scheduler system, which manages callback responses +- For large data that exceeds buffer limits, it will be automatically chunked and reassembled +- The callback function must be defined to accept the retrieved data +- The `_call` parameter determines whether the callback is executed directly or spawned in a separate thread + +## Related Functions +- `dragonfly_db_fnc_set`: Stores a value by key +- `dragonfly_db_fnc_delete`: Removes a value by key +- `dragonfly_db_fnc_scheduler`: Processes the callback response + +## Links + +[Delete Key](delete.md) | +[Get Key](get.md) | +[Set Key](set.md) \ No newline at end of file diff --git a/docs/basic/save.md b/docs/basic/save.md new file mode 100644 index 0000000..56cdb17 --- /dev/null +++ b/docs/basic/save.md @@ -0,0 +1,43 @@ +--- +title: ArmaDragonflyClient - Save DB +icon: mdi:file-text-outline +excerpt: Save DB to disc. +--- + +# dragonfly_db_fnc_save + +## Description +Saves the entire database to disk storage. This function persists all data (key-value pairs, hash tables, and lists) to a file, allowing it to be retrieved later even after server restart. + +## Syntax +```sqf +[] call dragonfly_db_fnc_save +``` + +## Parameters +None. The function saves the database without any parameters. + +## Return Value +None. The operation runs synchronously and saves the database immediately. + +## Examples +### Save the database without creating a backup: +```sqf +[] call dragonfly_db_fnc_save; +``` + +### Call the save function remotely from a client: +```sqf +[] remoteExecCall ["dragonfly_db_fnc_save", 2, false]; +``` + +## Notes +- This function should be called periodically to ensure data persistence +- Saving is a resource-intensive operation, so it shouldn't be called too frequently +- Consider saving before mission end or during low-activity periods + +## Related Functions +None. + +## Links +None. \ No newline at end of file diff --git a/docs/basic/set.md b/docs/basic/set.md new file mode 100644 index 0000000..76985da --- /dev/null +++ b/docs/basic/set.md @@ -0,0 +1,58 @@ +--- +title: ArmaDragonflyClient - Set Key +icon: mdi:file-text-outline +excerpt: Set the value of stored key from DragonflyClient. +--- + +# dragonfly_db_fnc_set + +## Description +Stores a value in the database with the specified key. This function allows saving various data types (arrays, strings, numbers, or booleans) that can be retrieved later using the key. + +## Syntax +```sqf +[_key, _data] call dragonfly_db_fnc_set +``` + +## Parameters +| Parameter | Type | Description | Default | +|-----------|----------------------------------|----------------------------------------------|---------| +| `_key` | String | Name of the key to store the data under | "" | +| `_data` | Array, String, Number, or Boolean| The value to store in the database | [] | + +## Return Value +None. The operation runs asynchronously. + +## Examples +### Store a simple array: +```sqf +["playerInventory", ["item1", "item2", "item3"]] call dragonfly_db_fnc_set; +``` + +### Store player data under their UID: +```sqf +[getPlayerUID player, [name player, getPos player, getAllGear player]] call dragonfly_db_fnc_set; +``` + +### Call the set function remotely from a client: +```sqf +["serverSetting", [true, 30, "normal"]] remoteExecCall ["dragonfly_db_fnc_set", 2, false]; +``` + +## Notes +- The function validates both the key and data before attempting to store +- If the key already exists, its value will be overwritten +- Complex data structures should be serialized into arrays +- There are no size limits for data, but extremely large values might impact performance +- For structured data, consider using hash tables instead of key-value pairs + +## Related Functions +- `dragonfly_db_fnc_get`: Retrieves a value by key +- `dragonfly_db_fnc_delete`: Removes a value by key +- `dragonfly_db_fnc_scheduler`: Processes the callback response + +## Links + +[Delete Key](delete.md) | +[Get Key](get.md) | +[Set Key](set.md) \ No newline at end of file diff --git a/docs/core/README.md b/docs/core/README.md new file mode 100644 index 0000000..3ff5ed5 --- /dev/null +++ b/docs/core/README.md @@ -0,0 +1,29 @@ +# Core Functions + +This section contains documentation for the core functions of ArmaDragonflyClient that handle initialization, process management, and scheduling. + +## Available Functions + +- [addTask](addTask.md) - Add a task to the scheduler +- [handler](handler.md) - Handle callbacks from the extension +- [init](init.md) - Initialize the database system +- [printAddonName](printAddonName.md) - Print the addon name +- [processQueue](processQueue.md) - Process queued database operations +- [scheduler](scheduler.md) - Schedule database operations +- [test](test.md) - Test the database connection + +## Example Usage + +```sqf +// Initialize the database +[] call dragonfly_db_fnc_init; + +// Test the database connection +[] call dragonfly_db_fnc_test; +``` + +## Related Categories + +- [Basic Data Operations](../basic/README.md) +- [Hash Operations](../hash/README.md) +- [List Operations](../list/README.md) \ No newline at end of file diff --git a/docs/core/addTask.md b/docs/core/addTask.md new file mode 100644 index 0000000..a13edac --- /dev/null +++ b/docs/core/addTask.md @@ -0,0 +1,68 @@ +--- +title: ArmaDragonflyClient - Add Task +icon: mdi:file-text-outline +excerpt: Add task to queue. +--- + +# dragonfly_db_fnc_addTask + +## Description +Adds a task to the database operation queue. This function is used to schedule database operations that can be processed sequentially, providing a way to manage multiple database requests in an organized manner. + +## Syntax +```sqf +[_taskType, _key, _keyField, _index, _value, _function, _call, _netId] call dragonfly_db_fnc_addTask +``` + +## Parameters +| Parameter | Type | Description | Default | +|-------------|----------------------------------|----------------------------------------------------|---------| +| `_taskType` | String | Type of operation to perform (e.g., "hgetall") | "" | +| `_key` | String | Name of the stored key | "" | +| `_keyField` | String | Field name for hash operations | "" | +| `_index` | Number | Index for list operations | -1 | +| `_value` | Array, String, Number, or Boolean| Value to store (for set operations) | [] | +| `_function` | String | Name of function to call with the result | "" | +| `_call` | Boolean | Whether to call the function directly (true) or spawn (false) | false | +| `_netId` | String | NetID of the target to receive the result | "" | + +## Return Value +None. The task is added to the queue and processed asynchronously. + +## Examples +### Add a hash table retrieval task: +```sqf +["hgetall", "", "", -1, [], "dragonfly_db_fnc_test"] call dragonfly_db_fnc_addTask; +``` + +### Add a player-specific task that returns data to a specific client: +```sqf +["hgetallid", getPlayerUID player, "", -1, [], "dragonfly_db_fnc_test", false, netId player] remoteExecCall ["dragonfly_db_fnc_addTask", 2, false]; +``` + +### Add a list operation task: +```sqf +["listadd", "playerMessages", "", -1, ["New message content"], ""] call dragonfly_db_fnc_addTask; +``` + +## Notes +- Tasks are processed in the order they are added to the queue +- If the queue is not currently being processed, this function will start the processing +- The task type determines which database operation will be performed +- This function is particularly useful for scheduling multiple related operations +- All operations performed through the task queue are logged for debugging + +## Related Functions +- `dragonfly_db_fnc_processQueue`: Processes the pending tasks in the queue +- `dragonfly_db_fnc_handler`: Handles the results of completed database operations +- `dragonfly_db_fnc_scheduler`: Manages callback responses from the database + +## Links + +[Add Task](addTask.md) | +[Handler](handler.md) | +[Init](init.md) | +[Print Addon Name](printAddonName.md) | +[Process Queue](processQueue.md) | +[Scheduler](scheduler.md) | +[Test](test.md) \ No newline at end of file diff --git a/docs/core/handler.md b/docs/core/handler.md new file mode 100644 index 0000000..d4aa77d --- /dev/null +++ b/docs/core/handler.md @@ -0,0 +1,65 @@ +--- +title: ArmaDragonflyClient - Handler +icon: mdi:file-text-outline +excerpt: Handle data from DB. +--- + +# dragonfly_db_fnc_handler + +## Description +Handles data received from the database and routes it to the appropriate function. This function is a critical component of the callback system, receiving data from database operations and directing it to the specified function, either locally or to a remote client. + +## Syntax +```sqf +[_uniqueID, _function, _call, _data, _netId] call dragonfly_db_fnc_handler +``` + +## Parameters +| Parameter | Type | Description | Default | +|-------------|----------------------------------|-------------------------------------------------------|---------| +| `_uniqueID` | String | Unique identifier for the data chunk | "" | +| `_function` | String | Name of function to receive the data | "" | +| `_call` | Boolean | Whether to call the function directly (true) or spawn (false) | false | +| `_data` | Array, String, Number, or Boolean| The data retrieved from the database | [] | +| `_netId` | String | (Optional) NetID of the player to receive the data | nil | + +## Return Value +None. The data is passed to the specified function for processing. + +## Examples +### Process data locally: +```sqf +["0123456789", "dragonfly_db_fnc_test", false, ["Hello World!"]] call dragonfly_db_fnc_handler; +``` + +### Send data to a specific client: +```sqf +["0123456789", "dragonfly_db_fnc_test", false, ["Hello World!"], netId player] remoteExecCall ["dragonfly_db_fnc_handler", 2, false]; +``` + +### Process data with direct call (synchronous): +```sqf +["0123456789", "dragonfly_db_fnc_processInventory", true, [["weapon1", 30], ["item2", 5]]] call dragonfly_db_fnc_handler; +``` + +## Notes +- The function validates that both the function name and data are valid before proceeding +- When a netId is provided, the data is sent to that specific client using remoteExec +- The `_call` parameter determines whether the function is called directly (synchronous) or spawned (asynchronous) +- This function is typically called by the scheduler or other core components rather than directly by user code +- Each handler call is logged, which is useful for debugging data flow + +## Related Functions +- `dragonfly_db_fnc_scheduler`: Processes callbacks from the database extension +- `dragonfly_db_fnc_fetch`: Assembles data chunks for large datasets +- `dragonfly_db_fnc_addTask`: Adds tasks to the database operation queue + +## Links + +[Add Task](addTask.md) | +[Handler](handler.md) | +[Init](init.md) | +[Print Addon Name](printAddonName.md) | +[Process Queue](processQueue.md) | +[Scheduler](scheduler.md) | +[Test](test.md) \ No newline at end of file diff --git a/docs/core/init.md b/docs/core/init.md new file mode 100644 index 0000000..e6ea870 --- /dev/null +++ b/docs/core/init.md @@ -0,0 +1,44 @@ +--- +title: ArmaDragonflyClient - Initialization +icon: mdi:file-text-outline +excerpt: Initial Extension settings. +--- + +# dragonfly_db_fnc_init + +## Description +Initializes the ArmaDragonflyClient extension and sets up the initial settings. This function loads the extension, checks its version, sets the buffer size, and logs the initialization status. It is automatically called during mission startup. + +## Syntax +```sqf +// This function is automatically called during initialization and doesn't need to be called directly +``` + +## Parameters +None. This function does not require any parameters. + +## Return Value +None. The function sets up internal variables and logs initialization information. + +## Examples +This function is automatically executed during framework initialization and doesn't need to be called manually. + +## Notes +- Sets the global buffer size to 10240 bytes (10KB) +- Logs the DLL version number for reference +- Confirms successful loading of all functions +- Outputs initialization status to the RPT logs +- This is one of the first functions called when the framework loads + +## Related Functions +- `dragonfly_db_fnc_save`: Saves database data to disk + +## Links + +[Add Task](addTask.md) | +[Handler](handler.md) | +[Init](init.md) | +[Print Addon Name](printAddonName.md) | +[Process Queue](processQueue.md) | +[Scheduler](scheduler.md) | +[Test](test.md) \ No newline at end of file diff --git a/docs/core/printAddonName.md b/docs/core/printAddonName.md new file mode 100644 index 0000000..8a6869f --- /dev/null +++ b/docs/core/printAddonName.md @@ -0,0 +1,53 @@ +--- +title: ArmaDragonflyClient - Print Addon Name +icon: mdi:file-text-outline +excerpt: Displays the addon name in system chat. +--- + +# dragonfly_db_fnc_printAddonName + +## Description +Displays a thank you message with the addon name in the system chat. This is a simple utility function that can be used to acknowledge the use of the framework or to verify that the addon is properly loaded. + +## Syntax +```sqf +[] call dragonfly_db_fnc_printAddonName +``` + +## Parameters +None. This function does not require any parameters. + +## Return Value +None. The function outputs a message to the system chat. + +## Examples +### Display the addon name message: +```sqf +[] call dragonfly_db_fnc_printAddonName; +``` + +### Use in a welcome script: +```sqf +if (isServer) then { + [] remoteExec ["dragonfly_db_fnc_printAddonName", 0, true]; +}; +``` + +## Notes +- The function uses the ADDON macro defined in script_component.hpp +- This displays a message directly in the player's system chat +- Can be useful as a quick verification that the addon is loaded correctly +- Often used during development or for first-time users + +## Related Functions +- `dragonfly_db_fnc_init`: Initializes the database system + +## Links + +[Add Task](addTask.md) | +[Handler](handler.md) | +[Init](init.md) | +[Print Addon Name](printAddonName.md) | +[Process Queue](processQueue.md) | +[Scheduler](scheduler.md) | +[Test](test.md) \ No newline at end of file diff --git a/docs/core/processQueue.md b/docs/core/processQueue.md new file mode 100644 index 0000000..da9ec36 --- /dev/null +++ b/docs/core/processQueue.md @@ -0,0 +1,58 @@ +--- +title: ArmaDragonflyClient - Process Queue +icon: mdi:file-text-outline +excerpt: Processes a queue of tasks to be executed. +--- + +# dragonfly_db_fnc_processQueue + +## Description +Processes the queue of pending database tasks sequentially. This function executes each task in the queue one by one, handling various database operations based on the task type. It continues processing until the queue is empty. + +## Syntax +```sqf +[] spawn dragonfly_db_fnc_processQueue +``` + +## Parameters +None. This function does not require any parameters. + +## Return Value +None. The function processes tasks in the queue and updates the processing state. + +## Examples +### Start processing the queue manually: +```sqf +[] spawn dragonfly_db_fnc_processQueue; +``` + +### Trigger queue processing from a client: +```sqf +[] remoteExec ["dragonfly_db_fnc_processQueue", 2, false]; +``` + +## Notes +- Sets `GVAR(isProcessing)` to true while running and false when complete +- Processes one task per second to prevent overloading +- Handles a wide range of database operations including: + - Key-value operations (get, set, delete) + - Hash table operations (hget, hset, hgetall, etc.) + - List operations (listadd, listrng, listset, etc.) +- Automatically started by `dragonfly_db_fnc_addTask` when new tasks are added +- Each task execution is logged for debugging purposes +- Should typically be spawned rather than called to avoid blocking + +## Related Functions +- `dragonfly_db_fnc_addTask`: Adds tasks to the queue for processing +- `dragonfly_db_fnc_handler`: Handles data returned from database operations +- `dragonfly_db_fnc_scheduler`: Manages callback responses from the database + +## Links + +[Add Task](addTask.md) | +[Handler](handler.md) | +[Init](init.md) | +[Print Addon Name](printAddonName.md) | +[Process Queue](processQueue.md) | +[Scheduler](scheduler.md) | +[Test](test.md) \ No newline at end of file diff --git a/docs/core/scheduler.md b/docs/core/scheduler.md new file mode 100644 index 0000000..66ed909 --- /dev/null +++ b/docs/core/scheduler.md @@ -0,0 +1,58 @@ +--- +title: ArmaDragonflyClient - Scheduler +icon: mdi:file-text-outline +excerpt: Scheduled Environment for extension. +--- + +# dragonfly_db_fnc_scheduler + +## Description +Manages the callback system for the ArmaDragonflyClient extension. This function receives task IDs from the extension's asynchronous callbacks, parses them, and registers them in a hashmap for later processing. It acts as the bridge between the extension's asynchronous operations and the game's execution environment. + +## Syntax +```sqf +[_taskID] call dragonfly_db_fnc_scheduler +``` + +## Parameters +| Parameter | Type | Description | Default | +|-----------|--------|-------------------------------------------------|---------| +| `_taskID` | String | Task identifier returned from extension callback | "" | + +## Return Value +None. The function registers the task ID in a hashmap for later processing. + +## Examples +### Process a callback from the extension: +```sqf +["1689524160123_get"] call dragonfly_db_fnc_scheduler; +``` + +### Forward a callback to the server: +```sqf +["1689524160123_hgetall"] remoteExecCall ["dragonfly_db_fnc_scheduler", 2, false]; +``` + +## Notes +- Parses the task ID to extract the timestamp and operation type +- Registers the task in a type-specific hashmap using the mission namespace +- Each operation type (get, hgetall, etc.) has its own hashmap for tracking +- The format of task IDs is typically: `[timestamp]_[operation]` +- This function is automatically called by the extension callback mechanism +- Creates hashmaps on demand if they don't already exist +- Critical for handling asynchronous database operations + +## Related Functions +- `dragonfly_db_fnc_fetch`: Assembles data chunks for large datasets +- `dragonfly_db_fnc_handler`: Processes the data retrieved from database operations +- `dragonfly_db_fnc_processQueue`: Executes queued database operations + +## Links + +[Add Task](addTask.md) | +[Handler](handler.md) | +[Init](init.md) | +[Print Addon Name](printAddonName.md) | +[Process Queue](processQueue.md) | +[Scheduler](scheduler.md) | +[Test](test.md) \ No newline at end of file diff --git a/docs/core/test.md b/docs/core/test.md new file mode 100644 index 0000000..c12b031 --- /dev/null +++ b/docs/core/test.md @@ -0,0 +1,62 @@ +--- +title: ArmaDragonflyClient - Test +icon: mdi:file-text-outline +excerpt: Test Function. +--- + +# dragonfly_db_fnc_test + +## Description +A simple test function for verifying database operations. This function displays the received data in a hint message and logs it to the RPT file. It's primarily used for testing database retrieval operations and callback functionality. + +## Syntax +```sqf +[_value] spawn dragonfly_db_fnc_test +``` + +## Parameters +| Parameter | Type | Description | Default | +|-----------|----------------------------------|----------------------------------|---------| +| `_value` | Array, String, Number, or Boolean| The value to display and log | [] | + +## Return Value +The same value that was passed to the function. Also sets the global variable `dragonfly_db_test` to this value. + +## Examples +### Test with a simple string: +```sqf +["Hello World!"] spawn dragonfly_db_fnc_test; +``` + +### Test database retrieval by specifying this as callback function: +```sqf +["playerStats", "dragonfly_db_fnc_test"] call dragonfly_db_fnc_get; +``` + +### Test from client to server: +```sqf +["Database is working!"] remoteExec ["dragonfly_db_fnc_test", 2, false]; +``` + +## Notes +- Displays the received value using `hint` +- Logs the same value to the RPT file +- Stores the value in the global variable `dragonfly_db_test` for later inspection +- Commonly used as a callback function for database operations +- Useful for debugging and verifying data flow +- Can be called directly or specified as a callback in other functions + +## Related Functions +- `dragonfly_db_fnc_get`: Retrieves values from the database +- `dragonfly_db_fnc_handler`: Routes data to callback functions +- `dragonfly_db_fnc_scheduler`: Manages the callback system + +## Links + +[Add Task](addTask.md) | +[Handler](handler.md) | +[Init](init.md) | +[Print Addon Name](printAddonName.md) | +[Process Queue](processQueue.md) | +[Scheduler](scheduler.md) | +[Test](test.md) \ No newline at end of file diff --git a/docs/favicon.ico b/docs/favicon.ico deleted file mode 100644 index 75a4f21..0000000 Binary files a/docs/favicon.ico and /dev/null differ diff --git a/docs/generic/delete.md b/docs/generic/delete.md deleted file mode 100644 index a19af64..0000000 --- a/docs/generic/delete.md +++ /dev/null @@ -1,22 +0,0 @@ -# Delete Key - -## Description - -Remove the specified `key` from DragonflyDB. - -## Usage - -```sqf -Arguments: - 0: STRING - Name of stored key from DB. - -Examples: - ["test"] call dragonfly_db_fnc_delete (Server or Singleplayer Only) - ["test"] remoteExecCall ["dragonfly_db_fnc_delete", 2, false] (Multiplayer Only) -``` - -## Links - -[Delete Key](generic/delete.md) | -[Get Key](generic/get.md) | -[Set Key](generic/set.md) diff --git a/docs/generic/get.md b/docs/generic/get.md deleted file mode 100644 index 1fe5087..0000000 --- a/docs/generic/get.md +++ /dev/null @@ -1,25 +0,0 @@ -# Get Key - -## Description - -Get the value of stored `key` from DragonflyDB. - -## Usage - -```sqf -Arguments: - 0: STRING - Name of stored Key - 1: STRING - Name of function to return data (default: "") - 2: BOOLEAN - Unscheduled environment (default: false) - 3: STRING - NetID of target to return data from function (default: nil) - -Examples: - ["test", "dragonfly_db_fnc_test"] call dragonfly_db_fnc_get (Server or Singleplayer Only) - ["test", "dragonfly_db_fnc_test", false, netId player] remoteExecCall ["dragonfly_db_fnc_get", 2, false] (Multiplayer Only) -``` - -## Links - -[Delete Key](generic/delete.md) | -[Get Key](generic/get.md) | -[Set Key](generic/set.md) diff --git a/docs/generic/set.md b/docs/generic/set.md deleted file mode 100644 index c99cc5b..0000000 --- a/docs/generic/set.md +++ /dev/null @@ -1,23 +0,0 @@ -# Set Key - -## Description - -Set the value of stored `key` from DragonflyDB. - -## Usage - -```sqf -Arguments: - 0: STRING - Name of stored Key - 1: [ARRAY|STRING|NUMBER|BOOL] - Value to store in key (default: []) - -Examples: - ["test", ["Hello World!"]] call dragonfly_db_fnc_set (Server or Singleplayer Only) - ["test", ["Hello World!"]] remoteExecCall ["dragonfly_db_fnc_set", 2, false] (Multiplayer Only) -``` - -## Links - -[Delete Key](generic/delete.md) | -[Get Key](generic/get.md) | -[Set Key](generic/set.md) diff --git a/docs/getting-started/index.md b/docs/getting-started/index.md deleted file mode 100644 index 237508b..0000000 --- a/docs/getting-started/index.md +++ /dev/null @@ -1,105 +0,0 @@ -# Getting Started - -Read through [Getting Started](https://www.dragonflydb.io/docs/getting-started) Guide from DragonflyDB to get DragonflyDB up and running on your machine or use the provided binaries within the `dragonfly` folder. - -## DragonflyDB -### Prerequisites -- You must be running a Linux-based OS (if using Mac, run using Docker, Windows WSL will work as well). -- Network access -- Minimum 4GB of RAM to get the benifits of Dragonfly -- Minimum 1CPU Core -- Linux Kernel 4.19 or higher - -## ArmaDragonflyClient -### OS Compatibility - -ArmaDragonflyClient is currently only compatible with Windows. Linux is planned for a future release. - -### Usage - -1. Download the latest release from the [Releases](https://github.com/jschmidt92/ArmaDragonflyClient/releases) page. -2. Extract the zip file to your Arma 3 directory. -3. Create the `init.sqf` file in your mission folder and add the following code: - -```sqf -addMissionEventHandler ["ExtensionCallback", { - params ["_name", "_function", "_data"]; - diag_log _this; - if (_name isEqualTo "ArmaDragonflyClient") then { - parseSimpleArray _data call (missionNamespace getVariable [_function, { - hint "Function does not exist!" - }]); - }; -}]; -``` - -4. Create the `initServer.sqf` file in your mission folder and add the following code: - -```sqf -if (isServer || isDedicated) then { - true spawn dragonfly_db_fnc_init; -}; -``` - -5. Implement data persistence using ArmaDragonflyClient: - - - To enable saving and loading data from ArmaDragonflyClient, you need to create the necessary functions. - - Refer to the [Add Task](https://jschmidt92.github.io/ArmaDragonflyClient/#/main/addTask) wiki page for detailed information on how to create tasks in ArmaDragonflyClient. - - Utilize the `dragonfly_db_fnc_addTask` function to add tasks to the ArmaDragonflyClient queue for saving and loading data. - - Here's an example of how you can create a task to save data: - > **_IMPORTANT:_** All data must be encapsulated by brackets - - ```sqf - ["hsetid", getPlayerUID player, "loadout", -1, [getUnitLoadout player]] call dragonfly_db_fnc_addTask; - ``` - - This example adds a task to set the value of the field "loadout" in the hash player UID to the player's loadout. - - - To load data, you can create a task using the appropriate task type, such as "hgetall" or "hget": - ```sqf - ["hgetid", getPlayerUID player, "loadout", -1, [], "myCallbackFunction", false, netId player] call dragonfly_db_fnc_addTask; - ``` - - This example adds a task to retrieve all values from the hash player UID and pass the retrieved data to the "myCallbackFunction" for further processing. - - - Ensure that you provide the correct task type, key names, field names, and callback functions based on your specific data requirements. Please refer to the Task Types section below for more information on available task types and their corresponding data types. - - Properly handle the retrieved data in the callback functions to utilize it effectively in your project. - - I.e. implement public variables and `waitUntil` checks before proceeding onto the next task(s). - ```sqf - // First Script or Function to execute `dragonfly_db_fnc_addTask` - value_ExampleDone = false; - publicVariable "value_ExampleDone"; - ... - - // Callback function to process the retrieved data - ... - value_ExampleDone = true; - publicVariable "value_ExampleDone"; - - // Next Script or Function to execute `dragonfly_db_fnc_addTask` - waitUntil {value_ExampleDone}; - ... - ``` - -By following these steps and leveraging the `dragonfly_db_fnc_addTask` function, you can implement robust data persistence functionality using ArmaDragonflyClient in your Arma 3 project. - -#### Task Types - -| Task Type | Data Type | -| ---------- | -------------------------------------------------------------------------------------------------------- | -| get | [Get Data Type](https://jschmidt92.github.io/ArmaDragonflyClient/#/generic/get) | -| set | [Set Data Type](https://jschmidt92.github.io/ArmaDragonflyClient/#/generic/set) | -| del | [Delete Data Type](https://jschmidt92.github.io/ArmaDragonflyClient/#/generic/delete) | -| hget | [Hash Get Data Type](https://jschmidt92.github.io/ArmaDragonflyClient/#/hashes/hashGet) | -| hgetid | [Hash Get by ID Data Type](https://jschmidt92.github.io/ArmaDragonflyClient/#/hashes/hashGetId) | -| hgetall | [Hash Get All Data Type](https://jschmidt92.github.io/ArmaDragonflyClient/#/hashes/hashGetAll) | -| hgetallid | [Hash Get All by ID Data Type](https://jschmidt92.github.io/ArmaDragonflyClient/#/hashes/hashGetAllId) | -| hset | [Hash Set Data Type](https://jschmidt92.github.io/ArmaDragonflyClient/#/hashes/hashSet) | -| hsetbulk | [Hash Set Bulk Data Type](https://jschmidt92.github.io/ArmaDragonflyClient/#/hashes/hashSetBulk) | -| hsetid | [Hash Set by ID Data Type](https://jschmidt92.github.io/ArmaDragonflyClient/#/hashes/hashSetId) | -| hsetidbulk | [Hash Set Bulk by ID Data Type](https://jschmidt92.github.io/ArmaDragonflyClient/#/hashes/hashSetBulkId) | -| listadd | [List Add Data Type](https://jschmidt92.github.io/ArmaDragonflyClient/#/lists/listAdd) | -| listidx | [List Index Data Type](https://jschmidt92.github.io/ArmaDragonflyClient/#/lists/listGet) | -| listrng | [List Range Data Type](https://jschmidt92.github.io/ArmaDragonflyClient/#/lists/listLoad) | -| listrem | [List Remove Data Type](https://jschmidt92.github.io/ArmaDragonflyClient/#/lists/listRemove) | -| listset | [List Set Data Type](https://jschmidt92.github.io/ArmaDragonflyClient/#/lists/listSet) | diff --git a/docs/hash/README.md b/docs/hash/README.md new file mode 100644 index 0000000..bfa1177 --- /dev/null +++ b/docs/hash/README.md @@ -0,0 +1,41 @@ +# Hash Operations + +This section contains documentation for the hash operations of ArmaDragonflyClient that allow for working with hash tables (key-value pairs within a namespace). + +## Available Functions + +- [hashGet](hashGet.md) - Get a field from a hash +- [hashGetAll](hashGetAll.md) - Get all fields from a hash +- [hashGetAllId](hashGetAllId.md) - Get all fields from a hash for a specific ID +- [hashGetId](hashGetId.md) - Get a field from a hash for a specific ID +- [hashSet](hashSet.md) - Set a field in a hash +- [hashSetBulk](hashSetBulk.md) - Set multiple fields in a hash in one operation +- [hashSetId](hashSetId.md) - Set a field in a hash for a specific ID +- [hashSetIdBulk](hashSetIdBulk.md) - Set multiple fields in a hash for a specific ID in one operation + +## Example Usage + +```sqf +// Context mode examples +["myField", [myValue]] call dragonfly_db_fnc_hashSet; +["myField", "myFunction"] call dragonfly_db_fnc_hashGet; +["myFunction"] call dragonfly_db_fnc_hashGetAll; + +// Set multiple hash fields in one operation +[[ + "loadout", [getUnitLoadout player], + "position", [getPosASL player], + "direction", [getDir player] +]] call dragonfly_db_fnc_hashSetBulk; + +// ID-specific examples +["myHash", "myField", [myValue]] call dragonfly_db_fnc_hashSetId; +["myHash", "myField", "myFunction"] call dragonfly_db_fnc_hashGetId; +["myHash"] call dragonfly_db_fnc_hashGetAllId; +``` + +## Related Categories + +- [Core Functions](../core/README.md) +- [Basic Data Operations](../basic/README.md) +- [List Operations](../list/README.md) \ No newline at end of file diff --git a/docs/hash/hashGet.md b/docs/hash/hashGet.md new file mode 100644 index 0000000..aa5dab0 --- /dev/null +++ b/docs/hash/hashGet.md @@ -0,0 +1,71 @@ +--- +title: ArmaDragonflyClient - Hash Get +icon: mdi:file-text-outline +excerpt: Get a field value from the current client's hash table in DragonflyClient. +--- + +# dragonfly_db_fnc_hashGet + +## Description +Retrieves the value associated with a specific field in the hash table of the current client/player. This function automatically determines the appropriate hash ID based on the caller's identity, making it more convenient than `hashGetId` which requires manually specifying an ID. It accesses hash data asynchronously and returns the result through a callback function. + +## Syntax +```sqf +[_keyField, _function, _call, _netId] call dragonfly_db_fnc_hashGet +``` + +## Parameters +| Parameter | Type | Description | Default | +|-------------|---------|------------------------------------------------------------|---------| +| `_keyField` | String | Name of the field in the hash to retrieve | "" | +| `_function` | String | Name of the function to receive the retrieved data | "" | +| `_call` | Boolean | Whether to call the function directly (true) or spawn (false) | false | +| `_netId` | String | (Optional) NetID of the player to receive the data | "" | + +## Return Value +None. The retrieved data is passed to the specified callback function asynchronously. + +## Examples +### Retrieve a player's loadout: +```sqf +["loadout", "dragonfly_db_fnc_test"] call dragonfly_db_fnc_hashGet; +``` + +### Retrieve data with synchronous callback: +```sqf +["playerScore", "dragonfly_db_fnc_processScore", true] call dragonfly_db_fnc_hashGet; +``` + +### Retrieve data and send it to a specific client: +```sqf +["loadout", "dragonfly_db_fnc_test", false, netId player] remoteExecCall ["dragonfly_db_fnc_hashGet", 2, false]; +``` + +## Notes +- Retrieves a value from the current client's hash table +- The data is retrieved asynchronously through the extension's callback system +- Both the field name and callback function name must be provided +- Input validation ensures both required parameters are non-empty +- When a netId is provided, the data is sent to that specific client +- The `_call` parameter determines whether the function is called directly (synchronous) or spawned (asynchronous) +- This function automatically determines which hash table to use based on the caller's identity +- Use `hashGetId` when you need to specify a particular hash table by ID +- All operations are logged for debugging purposes + +## Related Functions +- `dragonfly_db_fnc_hashGetId`: Retrieves a field value from a specific hash table (when you need to specify the ID) +- `dragonfly_db_fnc_hashGetAll`: Retrieves all fields from the current client's hash table +- `dragonfly_db_fnc_hashGetAllId`: Retrieves all fields from a specific hash table +- `dragonfly_db_fnc_hashSet`: Sets a field value in the current client's hash table +- `dragonfly_db_fnc_scheduler`: Processes the callback from the database extension + +## Links + +[Hash Get](hashGet.md) | +[Hash Get All](hashGetAll.md) | +[Hash Get All ID](hashGetAllId.md) | +[Hash Get ID](hashGetId.md) | +[Hash Set](hashSet.md) | +[Hash Set Bulk](hashSetBulk.md) | +[Hash Set ID](hashSetId.md) | +[Hash Set ID Bulk](hashSetIdBulk.md) \ No newline at end of file diff --git a/docs/hash/hashGetAll.md b/docs/hash/hashGetAll.md new file mode 100644 index 0000000..ed1805b --- /dev/null +++ b/docs/hash/hashGetAll.md @@ -0,0 +1,70 @@ +--- +title: ArmaDragonflyClient - Hash Get All +icon: mdi:file-text-outline +excerpt: Get all fields from the current client's hash table in DragonflyClient. +--- + +# dragonfly_db_fnc_hashGetAll + +## Description +Retrieves all fields and values from the hash table associated with the current client/player. This function automatically determines the appropriate hash ID based on the caller's identity, making it more convenient than `hashGetAllId` which requires manually specifying an ID. It returns the entire hash table data through a callback function, allowing access to all stored key-value pairs at once. + +## Syntax +```sqf +[_function, _call, _netId] call dragonfly_db_fnc_hashGetAll +``` + +## Parameters +| Parameter | Type | Description | Default | +|-------------|---------|------------------------------------------------------------|---------| +| `_function` | String | Name of the function to receive the retrieved data | "" | +| `_call` | Boolean | Whether to call the function directly (true) or spawn (false) | false | +| `_netId` | String | (Optional) NetID of the player to receive the data | "" | + +## Return Value +None. The retrieved data is passed to the specified callback function asynchronously. + +## Examples +### Retrieve all client hash data: +```sqf +["dragonfly_db_fnc_test"] call dragonfly_db_fnc_hashGetAll; +``` + +### Retrieve data with synchronous callback: +```sqf +["dragonfly_db_fnc_processAllData", true] call dragonfly_db_fnc_hashGetAll; +``` + +### Retrieve data and send it to a specific client: +```sqf +["dragonfly_db_fnc_test", false, netId player] remoteExecCall ["dragonfly_db_fnc_hashGetAll", 2, false]; +``` + +## Notes +- Returns the complete hash table for the current client with all fields and values as a nested array +- The data is retrieved asynchronously through the extension's callback system +- The callback function name must be provided and is validated +- When a netId is provided, the data is sent to that specific client +- The `_call` parameter determines whether the function is called directly (synchronous) or spawned (asynchronous) +- This function automatically determines which hash table to use based on the caller's identity +- Use `hashGetAllId` when you need to specify a particular hash table by ID +- For large hash tables, retrieving all data may impact performance +- All operations are logged for debugging purposes + +## Related Functions +- `dragonfly_db_fnc_hashGet`: Retrieves a specific field value from the current client's hash table +- `dragonfly_db_fnc_hashGetId`: Retrieves a specific field value from a specific hash table (when you need to specify the ID) +- `dragonfly_db_fnc_hashGetAllId`: Retrieves all fields from a specific hash table (when you need to specify the ID) +- `dragonfly_db_fnc_hashSet`: Sets a field value in the current client's hash table +- `dragonfly_db_fnc_scheduler`: Processes the callback from the database extension + +## Links + +[Hash Get](hashGet.md) | +[Hash Get All](hashGetAll.md) | +[Hash Get All ID](hashGetAllId.md) | +[Hash Get ID](hashGetId.md) | +[Hash Set](hashSet.md) | +[Hash Set Bulk](hashSetBulk.md) | +[Hash Set ID](hashSetId.md) | +[Hash Set ID Bulk](hashSetIdBulk.md) \ No newline at end of file diff --git a/docs/hash/hashGetAllId.md b/docs/hash/hashGetAllId.md new file mode 100644 index 0000000..83c1cdd --- /dev/null +++ b/docs/hash/hashGetAllId.md @@ -0,0 +1,71 @@ +--- +title: ArmaDragonflyClient - Hash Get All ID +icon: mdi:file-text-outline +excerpt: Get all fields and values from the hash stored at key from DragonflyClient. +--- + +# dragonfly_db_fnc_hashGetAllId + +## Description +Retrieves all fields and values from a specific hash table identified by its key. This function returns the complete hash table data for a specific ID through a callback function, allowing access to all stored key-value pairs associated with that ID. It's particularly useful for retrieving player-specific or entity-specific hash data. + +## Syntax +```sqf +[_key, _function, _call, _netId] call dragonfly_db_fnc_hashGetAllId +``` + +## Parameters +| Parameter | Type | Description | Default | +|-------------|---------|------------------------------------------------------------|---------| +| `_key` | String | Identifier of the hash table to retrieve | "" | +| `_function` | String | Name of the function to receive the retrieved data | "" | +| `_call` | Boolean | Whether to call the function directly (true) or spawn (false) | false | +| `_netId` | String | (Optional) NetID of the player to receive the data | "" | + +## Return Value +None. The retrieved data is passed to the specified callback function asynchronously. + +## Examples +### Retrieve a player's complete hash data: +```sqf +[getPlayerUID player, "dragonfly_db_fnc_test"] call dragonfly_db_fnc_hashGetAllId; +``` + +### Retrieve vehicle data with synchronous callback: +```sqf +["vehicle_123", "dragonfly_db_fnc_processVehicleData", true] call dragonfly_db_fnc_hashGetAllId; +``` + +### Retrieve data and send it to a specific client: +```sqf +[getPlayerUID player, "dragonfly_db_fnc_test", false, netId player] remoteExecCall ["dragonfly_db_fnc_hashGetAllId", 2, false]; +``` + +## Notes +- Returns the complete hash table with all fields and values as a nested array +- Both the key and callback function parameters are required and validated +- The data is retrieved asynchronously through the extension's callback system +- When a netId is provided, the data is sent to that specific client +- The `_call` parameter determines whether the function is called directly (synchronous) or spawned (asynchronous) +- This function retrieves from a specific hash table identified by `_key` - use `hashGetAll` for the global hash table +- Player UIDs are commonly used as keys to store player-specific data +- For large hash tables, retrieving all data may impact performance +- All operations are logged for debugging purposes + +## Related Functions +- `dragonfly_db_fnc_hashGetAll`: Retrieves all fields from the global hash table +- `dragonfly_db_fnc_hashGetId`: Retrieves a specific field value from a specific hash table +- `dragonfly_db_fnc_hashGet`: Retrieves a specific field value from the global hash table +- `dragonfly_db_fnc_hashSetId`: Sets a field value in a specific hash table +- `dragonfly_db_fnc_scheduler`: Processes the callback from the database extension + +## Links + +[Hash Get](hashGet.md) | +[Hash Get All](hashGetAll.md) | +[Hash Get All ID](hashGetAllId.md) | +[Hash Get ID](hashGetId.md) | +[Hash Set](hashSet.md) | +[Hash Set Bulk](hashSetBulk.md) | +[Hash Set ID](hashSetId.md) | +[Hash Set ID Bulk](hashSetIdBulk.md) \ No newline at end of file diff --git a/docs/hash/hashGetId.md b/docs/hash/hashGetId.md new file mode 100644 index 0000000..a38432a --- /dev/null +++ b/docs/hash/hashGetId.md @@ -0,0 +1,72 @@ +--- +title: ArmaDragonflyClient - Hash Get ID +icon: mdi:file-text-outline +excerpt: Get the value associated with field in hash stored at key from DragonflyClient. +--- + +# dragonfly_db_fnc_hashGetId + +## Description +Retrieves the value of a specific field from a hash table identified by its key. This function allows targeted access to individual fields within a specific hash table, making it ideal for accessing particular attributes of player or entity data. The retrieved data is returned through a callback function. + +## Syntax +```sqf +[_key, _keyField, _function, _call, _netId] call dragonfly_db_fnc_hashGetId +``` + +## Parameters +| Parameter | Type | Description | Default | +|-------------|---------|------------------------------------------------------------|---------| +| `_key` | String | Identifier of the hash table | "" | +| `_keyField` | String | Name of the field in the hash to retrieve | "" | +| `_function` | String | Name of the function to receive the retrieved data | "" | +| `_call` | Boolean | Whether to call the function directly (true) or spawn (false) | false | +| `_netId` | String | (Optional) NetID of the player to receive the data | "" | + +## Return Value +None. The retrieved data is passed to the specified callback function asynchronously. + +## Examples +### Retrieve a player's loadout field: +```sqf +[getPlayerUID player, "loadout", "dragonfly_db_fnc_test"] call dragonfly_db_fnc_hashGetId; +``` + +### Retrieve a specific vehicle property with synchronous callback: +```sqf +["vehicle_123", "fuel", "dragonfly_db_fnc_processFuelData", true] call dragonfly_db_fnc_hashGetId; +``` + +### Retrieve data and send it to a specific client: +```sqf +[getPlayerUID player, "stats", "dragonfly_db_fnc_test", false, netId player] remoteExecCall ["dragonfly_db_fnc_hashGetId", 2, false]; +``` + +## Notes +- Retrieves a single field value from a specific hash table +- All three primary parameters (key, keyField, and function) are required and validated +- The data is retrieved asynchronously through the extension's callback system +- When a netId is provided, the data is sent to that specific client +- The `_call` parameter determines whether the function is called directly (synchronous) or spawned (asynchronous) +- This function targets both a specific hash table (`_key`) and a specific field (`_keyField`) +- More efficient than retrieving all hash fields when only one is needed +- Player UIDs are commonly used as keys to store player-specific data +- All operations are logged for debugging purposes + +## Related Functions +- `dragonfly_db_fnc_hashGet`: Retrieves a field value from the global hash table +- `dragonfly_db_fnc_hashGetAllId`: Retrieves all fields from a specific hash table +- `dragonfly_db_fnc_hashGetAll`: Retrieves all fields from the global hash table +- `dragonfly_db_fnc_hashSetId`: Sets a field value in a specific hash table +- `dragonfly_db_fnc_scheduler`: Processes the callback from the database extension + +## Links + +[Hash Get](hashGet.md) | +[Hash Get All](hashGetAll.md) | +[Hash Get All ID](hashGetAllId.md) | +[Hash Get ID](hashGetId.md) | +[Hash Set](hashSet.md) | +[Hash Set Bulk](hashSetBulk.md) | +[Hash Set ID](hashSetId.md) | +[Hash Set ID Bulk](hashSetIdBulk.md) \ No newline at end of file diff --git a/docs/hash/hashSet.md b/docs/hash/hashSet.md new file mode 100644 index 0000000..21f8a4f --- /dev/null +++ b/docs/hash/hashSet.md @@ -0,0 +1,68 @@ +--- +title: ArmaDragonflyClient - Hash Set +icon: mdi:file-text-outline +excerpt: Set a field value in the current client's hash table in DragonflyClient. +--- + +# dragonfly_db_fnc_hashSet + +## Description +Sets the value of a specified field in the hash table associated with the current client/player. This function automatically determines the appropriate hash ID based on the caller's identity, making it more convenient than `hashSetId` which requires manually specifying an ID. It allows storing various data types (arrays, strings, numbers, or booleans) in a field of the client-specific hash structure. + +## Syntax +```sqf +[_keyField, _data] call dragonfly_db_fnc_hashSet +``` + +## Parameters +| Parameter | Type | Description | Default | +|-------------|----------------------------------|-------------------------------------------|---------| +| `_keyField` | String | Name of the field in the hash to set | "" | +| `_data` | Array, String, Number, or Boolean| The value to store in the hash field | [] | + +## Return Value +None. The operation runs synchronously to store the data. + +## Examples +### Store a player's loadout: +```sqf +["loadout", [getUnitLoadout player]] call dragonfly_db_fnc_hashSet; +``` + +### Store player preferences: +```sqf +["settings", [true, 30, "normal"]] call dragonfly_db_fnc_hashSet; +``` + +### Store data from a client: +```sqf +["clientInfo", [name player, getPlayerUID player]] remoteExecCall ["dragonfly_db_fnc_hashSet", 2, false]; +``` + +## Notes +- Stores a single field-value pair in the current client's hash table +- Both the field name and data parameters are required and validated +- If the field already exists, its value will be overwritten +- Supports various data types: arrays, strings, numbers, and booleans +- This function automatically determines which hash table to use based on the caller's identity +- Use `hashSetId` when you need to specify a particular hash table by ID +- Complex data structures should be serialized into arrays +- The operation is executed immediately and synchronously +- All operations are logged for debugging purposes + +## Related Functions +- `dragonfly_db_fnc_hashSetId`: Sets a field value in a specific hash table (when you need to specify the ID) +- `dragonfly_db_fnc_hashGet`: Retrieves a field value from the current client's hash table +- `dragonfly_db_fnc_hashGetAll`: Retrieves all fields from the current client's hash table +- `dragonfly_db_fnc_hashSetBulk`: Sets multiple fields in the current client's hash table + +## Links + +[Hash Get](hashGet.md) | +[Hash Get All](hashGetAll.md) | +[Hash Get All ID](hashGetAllId.md) | +[Hash Get ID](hashGetId.md) | +[Hash Set](hashSet.md) | +[Hash Set Bulk](hashSetBulk.md) | +[Hash Set ID](hashSetId.md) | +[Hash Set ID Bulk](hashSetIdBulk.md) \ No newline at end of file diff --git a/docs/hash/hashSetBulk.md b/docs/hash/hashSetBulk.md new file mode 100644 index 0000000..c7a71db --- /dev/null +++ b/docs/hash/hashSetBulk.md @@ -0,0 +1,67 @@ +--- +title: ArmaDragonflyClient - Hash Set Bulk +icon: mdi:file-text-outline +excerpt: Set multiple fields in the current client's hash table in DragonflyClient. +--- + +# dragonfly_db_fnc_hashSetBulk + +## Description +Sets multiple field-value pairs in the hash table associated with the current client/player in a single operation. This function automatically determines the appropriate hash ID based on the caller's identity, making it more convenient than `hashSetIdBulk` which requires manually specifying an ID. It allows efficiently storing multiple related fields at once, reducing the number of separate database calls required. + +## Syntax +```sqf +[_data] call dragonfly_db_fnc_hashSetBulk +``` + +## Parameters +| Parameter | Type | Description | Default | +|-----------|-------|---------------------------------------------------------|---------| +| `_data` | Array | Array of alternating field names and values to store | [] | + +## Return Value +None. The operation runs synchronously to store all the data. + +## Examples +### Store player loadout and position: +```sqf +[["loadout", [getUnitLoadout player], "position", [getPosASLVisual player]]] call dragonfly_db_fnc_hashSetBulk; +``` + +### Store multiple player settings: +```sqf +[["difficulty", ["regular"], "respawn", [true], "tickets", [500]]] call dragonfly_db_fnc_hashSetBulk; +``` + +### Store player data from a client: +```sqf +[["name", [name player], "uid", [getPlayerUID player], "score", [score player]]] remoteExecCall ["dragonfly_db_fnc_hashSetBulk", 2, false]; +``` + +## Notes +- The data array must be structured as alternating field names and values: `[field1, value1, field2, value2, ...]` +- Each field name must be a string +- Values can be arrays, strings, numbers, or booleans +- All field-value pairs are stored in a single database operation +- If any of the fields already exist, their values will be overwritten +- This function automatically determines which hash table to use based on the caller's identity +- Use `hashSetIdBulk` when you need to specify a particular hash table by ID +- More efficient than multiple individual `hashSet` calls when setting several fields +- The operation is executed immediately and synchronously +- All operations are logged for debugging purposes + +## Related Functions +- `dragonfly_db_fnc_hashSet`: Sets a single field value in the current client's hash table +- `dragonfly_db_fnc_hashSetIdBulk`: Sets multiple field-value pairs in a specific hash table (when you need to specify the ID) +- `dragonfly_db_fnc_hashGetAll`: Retrieves all fields from the current client's hash table +- `dragonfly_db_fnc_hashGet`: Retrieves a specific field value from the current client's hash table +## Links + +[Hash Get](hashGet.md) | +[Hash Get All](hashGetAll.md) | +[Hash Get All ID](hashGetAllId.md) | +[Hash Get ID](hashGetId.md) | +[Hash Set](hashSet.md) | +[Hash Set Bulk](hashSetBulk.md) | +[Hash Set ID](hashSetId.md) | +[Hash Set ID Bulk](hashSetIdBulk.md) \ No newline at end of file diff --git a/docs/hash/hashSetId.md b/docs/hash/hashSetId.md new file mode 100644 index 0000000..6f6db8b --- /dev/null +++ b/docs/hash/hashSetId.md @@ -0,0 +1,69 @@ +--- +title: ArmaDragonflyClient - Hash Set ID +icon: mdi:file-text-outline +excerpt: Set the specified field to the respective value in the hash stored at key from DragonflyClient. +--- + +# dragonfly_db_fnc_hashSetId + +## Description +Sets the value of a specified field in a specific hash table identified by its key. This function allows storing various data types (arrays, strings, numbers, or booleans) in a targeted hash table, making it ideal for player-specific or entity-specific data storage. It provides a way to organize related data under a common identifier. + +## Syntax +```sqf +[_key, _keyField, _data] call dragonfly_db_fnc_hashSetId +``` + +## Parameters +| Parameter | Type | Description | Default | +|-------------|----------------------------------|--------------------------------------------|---------| +| `_key` | String | Identifier of the hash table | "" | +| `_keyField` | String | Name of the field in the hash to set | "" | +| `_data` | Array, String, Number, or Boolean| The value to store in the hash field | [] | + +## Return Value +None. The operation runs synchronously to store the data. + +## Examples +### Store a player's loadout under their UID: +```sqf +[getPlayerUID player, "loadout", [getUnitLoadout player]] call dragonfly_db_fnc_hashSetId; +``` + +### Store vehicle data: +```sqf +["vehicle_123", "status", [true, 100, 75, "active"]] call dragonfly_db_fnc_hashSetId; +``` + +### Store player data from a client: +```sqf +[getPlayerUID player, "stats", [rank player, score player, name player]] remoteExecCall ["dragonfly_db_fnc_hashSetId", 2, false]; +``` + +## Notes +- Stores a single field-value pair in a specific hash table identified by `_key` +- All three parameters (key, keyField, and data) are required and validated +- If the hash table doesn't exist, it will be created automatically +- If the field already exists in the hash table, its value will be overwritten +- Supports various data types: arrays, strings, numbers, and booleans +- Player UIDs are commonly used as keys to store player-specific data +- Complex data structures should be serialized into arrays +- The operation is executed immediately and synchronously +- All operations are logged for debugging purposes + +## Related Functions +- `dragonfly_db_fnc_hashSet`: Sets a field value in the global hash table +- `dragonfly_db_fnc_hashGetId`: Retrieves a field value from a specific hash table +- `dragonfly_db_fnc_hashGetAllId`: Retrieves all fields from a specific hash table +- `dragonfly_db_fnc_hashSetIdBulk`: Sets multiple field-value pairs in multiple hash tables + +## Links + +[Hash Get](hashGet.md) | +[Hash Get All](hashGetAll.md) | +[Hash Get All ID](hashGetAllId.md) | +[Hash Get ID](hashGetId.md) | +[Hash Set](hashSet.md) | +[Hash Set Bulk](hashSetBulk.md) | +[Hash Set ID](hashSetId.md) | +[Hash Set ID Bulk](hashSetIdBulk.md) \ No newline at end of file diff --git a/docs/hash/hashSetIdBulk.md b/docs/hash/hashSetIdBulk.md new file mode 100644 index 0000000..c96e283 --- /dev/null +++ b/docs/hash/hashSetIdBulk.md @@ -0,0 +1,69 @@ +--- +title: ArmaDragonflyClient - Hash Set ID Bulk +icon: mdi:file-text-outline +excerpt: Set the specified fields to their respective values in the hash stored at key from DragonflyClient. +--- + +# dragonfly_db_fnc_hashSetIdBulk + +## Description +Sets multiple field-value pairs in a specific hash table identified by its key in a single operation. This function allows efficiently storing multiple related fields at once for a specific identifier, reducing the number of separate database calls required. It's ideal for saving a collection of player-specific or entity-specific data. + +## Syntax +```sqf +[_data] call dragonfly_db_fnc_hashSetIdBulk +``` + +## Parameters +| Parameter | Type | Description | Default | +|-----------|-------|--------------------------------------------------------------------|---------| +| `_data` | Array | Array with key followed by alternating field names and values | [] | + +## Return Value +None. The operation runs synchronously to store all the data. + +## Examples +### Store player loadout and position: +```sqf +[[getPlayerUID player, "loadout", [getUnitLoadout player], "position", [getPosASLVisual player]]] call dragonfly_db_fnc_hashSetIdBulk; +``` + +### Store multiple vehicle properties: +```sqf +[["vehicle_123", "fuel", [0.75], "damage", [0.2], "crew", [["player1", "player2"]]]] call dragonfly_db_fnc_hashSetIdBulk; +``` + +### Store player data from a client: +```sqf +[[getPlayerUID player, "stats", [score player], "inventory", [getAllGear player]]] remoteExecCall ["dragonfly_db_fnc_hashSetIdBulk", 2, false]; +``` + +## Notes +- The data array must be structured with the key first, followed by alternating field names and values: `[key, field1, value1, field2, value2, ...]` +- The key must be a string that identifies the specific hash table +- Each field name must be a string +- Values can be arrays, strings, numbers, or booleans +- All field-value pairs are stored in a single database operation +- If the hash table doesn't exist, it will be created automatically +- If any of the fields already exist in the hash table, their values will be overwritten +- More efficient than multiple individual `hashSetId` calls when setting several fields +- Player UIDs are commonly used as keys to store player-specific data +- The operation is executed immediately and synchronously +- All operations are logged for debugging purposes + +## Related Functions +- `dragonfly_db_fnc_hashSetId`: Sets a single field value in a specific hash table +- `dragonfly_db_fnc_hashSetBulk`: Sets multiple field-value pairs in the global hash table +- `dragonfly_db_fnc_hashGetAllId`: Retrieves all fields from a specific hash table +- `dragonfly_db_fnc_hashGetId`: Retrieves a specific field value from a specific hash table + +## Links + +[Hash Get](hashGet.md) | +[Hash Get All](hashGetAll.md) | +[Hash Get All ID](hashGetAllId.md) | +[Hash Get ID](hashGetId.md) | +[Hash Set](hashSet.md) | +[Hash Set Bulk](hashSetBulk.md) | +[Hash Set ID](hashSetId.md) | +[Hash Set ID Bulk](hashSetIdBulk.md) \ No newline at end of file diff --git a/docs/hashes/hashGet.md b/docs/hashes/hashGet.md deleted file mode 100644 index 25fbcd7..0000000 --- a/docs/hashes/hashGet.md +++ /dev/null @@ -1,30 +0,0 @@ -# Hash Get - -## Description - -Get the value associated with `field` in hash stored at `key` from DragonflyDB. - -## Usage - -```sqf -Arguments: - 0: STRING - Name of stored field in hash (default: "") - 1: STRING - Name of function to return data (default: "") - 2: BOOLEAN - Unscheduled environment (default: false) - 3: STRING - NetID of target to return data from function (default: nil) - -Examples: - ["loadout", "dragonfly_db_fnc_test"] call dragonfly_db_fnc_hashGet (Server or Singleplayer Only) - ["loadout", "dragonfly_db_fnc_test", false, netId player] remoteExecCall ["dragonfly_db_fnc_hashGet", 2, false] (Multiplayer Only) -``` - -## Links - -[Hash Get](hashes/hashGet.md) | -[Hash Get ID](hashes/hashGetId.md) | -[Hash Get All](hashes/hashGetAll.md) | -[Hash Get All ID](hashes/hashGetAllId.md) | -[Hash Set](hashes/hashSet.md) | -[Hash Set ID](hashes/hashSetId.md) | -[Hash Set Bulk](hashes/hashSetBulk.md) | -[Hash Set Bulk ID](hashes/hashSetBulkId.md) diff --git a/docs/hashes/hashGetAll.md b/docs/hashes/hashGetAll.md deleted file mode 100644 index aca572e..0000000 --- a/docs/hashes/hashGetAll.md +++ /dev/null @@ -1,29 +0,0 @@ -# Hash Get All - -## Description - -Get all fields and values from the hash stored at `key` from DragonflyDB. - -## Usage - -```sqf -Arguments: - 0: STRING - Name of function to return data (default: "") - 1: BOOLEAN - Unscheduled environment (default: false) - 2: STRING - NetID of target to return data from function (default: nil) - -Examples: - ["dragonfly_db_fnc_test"] call dragonfly_db_fnc_hashGetAll (Server or Singleplayer Only) - ["dragonfly_db_fnc_test", false, netId player] remoteExecCall ["dragonfly_db_fnc_hashGetAll", 2, false] (Multiplayer Only) -``` - -## Links - -[Hash Get](hashes/hashGet.md) | -[Hash Get ID](hashes/hashGetId.md) | -[Hash Get All](hashes/hashGetAll.md) | -[Hash Get All ID](hashes/hashGetAllId.md) | -[Hash Set](hashes/hashSet.md) | -[Hash Set ID](hashes/hashSetId.md) | -[Hash Set Bulk](hashes/hashSetBulk.md) | -[Hash Set Bulk ID](hashes/hashSetBulkId.md) diff --git a/docs/hashes/hashGetAllId.md b/docs/hashes/hashGetAllId.md deleted file mode 100644 index 3aaa554..0000000 --- a/docs/hashes/hashGetAllId.md +++ /dev/null @@ -1,30 +0,0 @@ -# Hash Get All ID - -## Description - -Get all fields and values from the hash stored at `key` from DragonflyDB. - -## Usage - -```sqf -Arguments: - 0: STRING - Name of stored key with hash (default: "") - 1: STRING - Name of function to return data (default: "") - 2: BOOLEAN - Unscheduled environment (default: false) - 3: STRING - NetID of target to return data from function (default: nil) - -Examples: - [getPlayerUID player, "dragonfly_db_fnc_test"] call dragonfly_db_fnc_hashGetAllId (Server or Singleplayer Only) - [getPlayerUID player, "dragonfly_db_fnc_test", false, netId player] remoteExecCall ["dragonfly_db_fnc_hashGetAllId", 2, false] (Multiplayer Only) -``` - -## Links - -[Hash Get](hashes/hashGet.md) | -[Hash Get ID](hashes/hashGetId.md) | -[Hash Get All](hashes/hashGetAll.md) | -[Hash Get All ID](hashes/hashGetAllId.md) | -[Hash Set](hashes/hashSet.md) | -[Hash Set ID](hashes/hashSetId.md) | -[Hash Set Bulk](hashes/hashSetBulk.md) | -[Hash Set Bulk ID](hashes/hashSetBulkId.md) diff --git a/docs/hashes/hashGetId.md b/docs/hashes/hashGetId.md deleted file mode 100644 index 91c68e8..0000000 --- a/docs/hashes/hashGetId.md +++ /dev/null @@ -1,31 +0,0 @@ -# Hash Get ID - -## Description - -Get the value associated with `field` in hash stored at `key` from DragonflyDB. - -## Usage - -```sqf -Arguments: - 0: STRING - Name of stored key with hash (default: "") - 1: STRING - Name of stored field in hash (default: "") - 2: STRING - Name of function to return data (default: "") - 3: BOOLEAN - Unscheduled environment (default: false) - 4: STRING - NetID of target to return data from function (default: nil) - -Examples: - [getPlayerUID player, "loadout", "dragonfly_db_fnc_test"] call dragonfly_db_fnc_hashGetId (Server or Singleplayer Only) - [getPlayerUID player, "loadout", "dragonfly_db_fnc_test", false, netId player] remoteExecCall ["dragonfly_db_fnc_hashGetId", 2, false] (Multiplayer Only) -``` - -## Links - -[Hash Get](hashes/hashGet.md) | -[Hash Get ID](hashes/hashGetId.md) | -[Hash Get All](hashes/hashGetAll.md) | -[Hash Get All ID](hashes/hashGetAllId.md) | -[Hash Set](hashes/hashSet.md) | -[Hash Set ID](hashes/hashSetId.md) | -[Hash Set Bulk](hashes/hashSetBulk.md) | -[Hash Set Bulk ID](hashes/hashSetBulkId.md) diff --git a/docs/hashes/hashSet.md b/docs/hashes/hashSet.md deleted file mode 100644 index 1f537d0..0000000 --- a/docs/hashes/hashSet.md +++ /dev/null @@ -1,28 +0,0 @@ -# Hash Set - -## Description - -Set the specified field to the respective value in the hash stored at `key` from DragonflyDB. - -## Usage - -```sqf -Arguments: - 0: STRING - Name of stored field in hash (default: "") - 1: [ARRAY|STRING|NUMBER|BOOL] - Value to store in hash field (default: []) - -Examples: - ["loadout", [getUnitLoadout player]] call dragonfly_db_fnc_hashSet (Server or Singleplayer Only) - ["loadout", [getUnitLoadout player]] remoteExecCall ["dragonfly_db_fnc_hashSet", 2, false] (Multiplayer Only) -``` - -## Links - -[Hash Get](hashes/hashGet.md) | -[Hash Get ID](hashes/hashGetId.md) | -[Hash Get All](hashes/hashGetAll.md) | -[Hash Get All ID](hashes/hashGetAllId.md) | -[Hash Set](hashes/hashSet.md) | -[Hash Set ID](hashes/hashSetId.md) | -[Hash Set Bulk](hashes/hashSetBulk.md) | -[Hash Set Bulk ID](hashes/hashSetBulkId.md) diff --git a/docs/hashes/hashSetBulk.md b/docs/hashes/hashSetBulk.md deleted file mode 100644 index 9c8ef9a..0000000 --- a/docs/hashes/hashSetBulk.md +++ /dev/null @@ -1,27 +0,0 @@ -# Hash Set Bulk - -## Description - -Set the specified fields to their respective values in the hash stored at `key` from DragonflyDB. - -## Usage - -```sqf -Arguments: - 0: [ARRAY|STRING|NUMBER|BOOL] - Fields and Values to store in hash (default: []) - -Examples: - ["loadout", [getUnitLoadout player], "position", [getPosASLVisual player]] call dragonfly_db_fnc_hashSetBulk (Server or Singleplayer Only) - ["loadout", [getUnitLoadout player], "position", [getPosASLVisual player]] remoteExecCall ["dragonfly_db_fnc_hashSetBulk", 2, false] (Multiplayer Only) -``` - -## Links - -[Hash Get](hashes/hashGet.md) | -[Hash Get ID](hashes/hashGetId.md) | -[Hash Get All](hashes/hashGetAll.md) | -[Hash Get All ID](hashes/hashGetAllId.md) | -[Hash Set](hashes/hashSet.md) | -[Hash Set ID](hashes/hashSetId.md) | -[Hash Set Bulk](hashes/hashSetBulk.md) | -[Hash Set Bulk ID](hashes/hashSetBulkId.md) diff --git a/docs/hashes/hashSetBulkId.md b/docs/hashes/hashSetBulkId.md deleted file mode 100644 index 54cd258..0000000 --- a/docs/hashes/hashSetBulkId.md +++ /dev/null @@ -1,27 +0,0 @@ -# Hash Set Bulk ID - -## Description - -Set the specified fields to their respective values in the hash stored at `key` from DragonflyDB. - -## Usage - -```sqf -Arguments: - 0: [ARRAY|STRING|NUMBER|BOOL] - Fields and Values to store in hash (default: []) - -Examples: - [getPlayerUID player, "loadout", [getUnitLoadout player], "position", [getPosASLVisual player]] call dragonfly_db_fnc_hashSetBulk (Server or Singleplayer Only) - [getPlayerUID player, "loadout", [getUnitLoadout player], "position", [getPosASLVisual player]] remoteExecCall ["dragonfly_db_fnc_hashSetBulk", 2, false] (Multiplayer Only) -``` - -## Links - -[Hash Get](hashes/hashGet.md) | -[Hash Get ID](hashes/hashGetId.md) | -[Hash Get All](hashes/hashGetAll.md) | -[Hash Get All ID](hashes/hashGetAllId.md) | -[Hash Set](hashes/hashSet.md) | -[Hash Set ID](hashes/hashSetId.md) | -[Hash Set Bulk](hashes/hashSetBulk.md) | -[Hash Set Bulk ID](hashes/hashSetBulkId.md) diff --git a/docs/hashes/hashSetId.md b/docs/hashes/hashSetId.md deleted file mode 100644 index 9cd63c4..0000000 --- a/docs/hashes/hashSetId.md +++ /dev/null @@ -1,29 +0,0 @@ -# Hash Set ID - -## Description - -Set the specified field to the respective value in the hash stored at `key` from DragonflyDB. - -## Usage - -```sqf -Arguments: - 0: STRING - Name of stored key with hash (default: "") - 1: STRING - Name of stored field in hash (default: "") - 2: [ARRAY|STRING|NUMBER|BOOL] - Value to store in hash field (default: []) - -Examples: - [getPlayerUID player, "loadout", [getUnitLoadout player]] call dragonfly_db_fnc_hashSetId (Server or Singleplayer Only) - [getPlayerUID player, "loadout", [getUnitLoadout player]] remoteExecCall ["dragonfly_db_fnc_hashSetId", 2, false] (Multiplayer Only) -``` - -## Links - -[Hash Get](hashes/hashGet.md) | -[Hash Get ID](hashes/hashGetId.md) | -[Hash Get All](hashes/hashGetAll.md) | -[Hash Get All ID](hashes/hashGetAllId.md) | -[Hash Set](hashes/hashSet.md) | -[Hash Set ID](hashes/hashSetId.md) | -[Hash Set Bulk](hashes/hashSetBulk.md) | -[Hash Set Bulk ID](hashes/hashSetBulkId.md) diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index 7e493c9..0000000 --- a/docs/index.html +++ /dev/null @@ -1,218 +0,0 @@ - - - - - Knowledgebase - - - - - - - - -
- - - - - - - - - diff --git a/docs/list/README.md b/docs/list/README.md new file mode 100644 index 0000000..9f72dae --- /dev/null +++ b/docs/list/README.md @@ -0,0 +1,36 @@ +# List Operations + +This section contains documentation for the list operations of ArmaDragonflyClient that allow for working with ordered collections of items. + +## Available Functions + +- [listAdd](listAdd.md) - Add an item to a list +- [listGet](listGet.md) - Get items from a list +- [listLoad](listLoad.md) - Load a list from the database +- [listRemove](listRemove.md) - Remove an item from a list +- [listSet](listSet.md) - Set an item in a list + +## Example Usage + +```sqf +// Add an item to a list +["myList", ["myItem"]] call dragonfly_db_fnc_listAdd; + +// Set an item at a specific index +["myList", 0, [myNewValue]] call dragonfly_db_fnc_listSet; + +// Get an item at a specific index +["myList", 0, "myFunction"] call dragonfly_db_fnc_listGet; + +// Load all items from a list +["myList", "myFunction"] call dragonfly_db_fnc_listLoad; + +// Remove an item at a specific index +["myList", 0] call dragonfly_db_fnc_listRemove; +``` + +## Related Categories + +- [Core Functions](../core/README.md) +- [Basic Data Operations](../basic/README.md) +- [Hash Operations](../hash/README.md) \ No newline at end of file diff --git a/docs/list/listAdd.md b/docs/list/listAdd.md new file mode 100644 index 0000000..e0062a8 --- /dev/null +++ b/docs/list/listAdd.md @@ -0,0 +1,65 @@ +--- +title: ArmaDragonflyClient - List Add +icon: mdi:file-text-outline +excerpt: Add element to list stored at key from DragonflyClient. +--- + +# dragonfly_db_fnc_listAdd + +## Description +Adds an element to a list stored in the database under the specified key. This function appends values to an existing list or creates a new list if it doesn't exist. It's particularly useful for logging, event tracking, or maintaining collections of data that grow over time. + +## Syntax +```sqf +[_key, _data] call dragonfly_db_fnc_listAdd +``` + +## Parameters +| Parameter | Type | Description | Default | +|-----------|----------------------------------|------------------------------------------|---------| +| `_key` | String | Name of the list to add the element to | "" | +| `_data` | Array, String, Number, or Boolean| The value to insert into the list | [] | + +## Return Value +None. The operation runs synchronously to add the element to the list. + +## Examples +### Add an event log entry: +```sqf +["events", ["Server state saved to DB " + systemTimeUTC]] call dragonfly_db_fnc_listAdd; +``` + +### Add a player message: +```sqf +["messages", [name player + ": " + _messageText]] call dragonfly_db_fnc_listAdd; +``` + +### Add data from a client: +```sqf +["playerActions", [getPlayerUID player, name player, "logged in"]] remoteExecCall ["dragonfly_db_fnc_listAdd", 2, false]; +``` + +## Notes +- Elements are added to the end of the list in the order they are inserted +- If the list doesn't exist, it will be created automatically +- Both the key and data parameters are required and validated +- Lists can store various data types (arrays, strings, numbers, or booleans) +- Useful for maintaining a history of events, logs, or sequential data +- The operation is executed immediately and synchronously +- New elements are always added to the end of the list +- All operations are logged for debugging purposes + +## Related Functions +- `dragonfly_db_fnc_listGet`: Retrieves a specific element from a list +- `dragonfly_db_fnc_listLoad`: Retrieves a range of elements from a list +- `dragonfly_db_fnc_listSet`: Replaces a specific element in a list +- `dragonfly_db_fnc_listRemove`: Removes a specific element from a list +- `dragonfly_db_fnc_scheduler`: Processes the callback from the database extension + +## Links + +[List Add](listAdd.md) | +[List Get](listGet.md) | +[List Load](listLoad.md) | +[List Remove](listRemove.md) | +[List Set](listSet.md) \ No newline at end of file diff --git a/docs/list/listGet.md b/docs/list/listGet.md new file mode 100644 index 0000000..e294630 --- /dev/null +++ b/docs/list/listGet.md @@ -0,0 +1,69 @@ +--- +title: ArmaDragonflyClient - List Get +icon: mdi:file-text-outline +excerpt: Get element of list stored at key from DragonflyClient. +--- + +# dragonfly_db_fnc_listGet + +## Description +Retrieves a specific element from a list stored in the database by its index. This function accesses a single item from a list using its position number and returns the data through a callback function. It's useful for accessing individual pieces of data from a sequence without retrieving the entire list. + +## Syntax +```sqf +[_key, _index, _function, _call, _netId] call dragonfly_db_fnc_listGet +``` + +## Parameters +| Parameter | Type | Description | Default | +|-------------|---------|------------------------------------------------------------|---------| +| `_key` | String | Name of the list | "" | +| `_index` | Number | Index position of the element to retrieve (0-based) | -1 | +| `_function` | String | Name of the function to receive the retrieved data | "" | +| `_call` | Boolean | Whether to call the function directly (true) or spawn (false) | false | +| `_netId` | String | (Optional) NetID of the player to receive the data | "" | + +## Return Value +None. The retrieved data is passed to the specified callback function asynchronously. + +## Examples +### Retrieve a specific event log entry: +```sqf +["events", 0, "dragonfly_db_fnc_test"] call dragonfly_db_fnc_listGet; +``` + +### Retrieve data with synchronous callback: +```sqf +["messages", 5, "dragonfly_db_fnc_processMessage", true] call dragonfly_db_fnc_listGet; +``` + +### Retrieve data and send it to a specific client: +```sqf +["notifications", 0, "dragonfly_db_fnc_displayNotification", false, netId player] remoteExecCall ["dragonfly_db_fnc_listGet", 2, false]; +``` + +## Notes +- Retrieves a single element from a list by its index position +- The key, index, and function parameters are required and validated +- Index is zero-based (the first element is at index 0) +- If the index is out of bounds or the list doesn't exist, no data will be returned +- The data is retrieved asynchronously through the extension's callback system +- When a netId is provided, the data is sent to that specific client +- The `_call` parameter determines whether the function is called directly (synchronous) or spawned (asynchronous) +- For retrieving multiple elements, use `listLoad` instead +- All operations are logged for debugging purposes + +## Related Functions +- `dragonfly_db_fnc_listAdd`: Adds an element to a list +- `dragonfly_db_fnc_listLoad`: Retrieves a range of elements from a list +- `dragonfly_db_fnc_listSet`: Replaces a specific element in a list +- `dragonfly_db_fnc_listRemove`: Removes a specific element from a list +- `dragonfly_db_fnc_scheduler`: Processes the callback from the database extension + +## Links + +[List Add](listAdd.md) | +[List Get](listGet.md) | +[List Load](listLoad.md) | +[List Remove](listRemove.md) | +[List Set](listSet.md) \ No newline at end of file diff --git a/docs/list/listLoad.md b/docs/list/listLoad.md new file mode 100644 index 0000000..d9eb3ef --- /dev/null +++ b/docs/list/listLoad.md @@ -0,0 +1,72 @@ +--- +title: ArmaDragonflyClient - List Load +icon: mdi:file-text-outline +excerpt: Get all elements of a list stored at a key from DragonflyClient. +--- + +# dragonfly_db_fnc_listLoad + +## Description + +Retrieves all elements of a list stored at a specified key from the DragonflyClient database. This function is useful when you need to access the complete list data rather than individual elements, allowing operations on the entire dataset. The retrieved data is passed to a callback function for processing. + +## Syntax + +```sqf +[_key, _function, _call, _netId] call dragonfly_db_fnc_listLoad +``` + +## Parameters + +| Parameter | Type | Description | Default | +|-----------|------|-------------|---------| +| _key | String | The key identifying the list to be retrieved | "" | +| _function | String | The name of the function that will receive the retrieved data | "" | +| _call | Boolean | Whether to call the function in an unscheduled environment | false | +| _netId | String | The NetID of the target to return data from the function (multiplayer only) | "" | + +## Return Value + +No value is returned directly. The retrieved list data is passed to the specified callback function asynchronously. + +## Examples + +**Retrieve all event logs:** +```sqf +["events", "myProject_fnc_processEventLogs"] call dragonfly_db_fnc_listLoad; +``` + +**Retrieve a player list with synchronous callback:** +```sqf +["playerList", "myProject_fnc_processPlayerList", true] call dragonfly_db_fnc_listLoad; +``` + +**Send mission data to a specific client:** +```sqf +["missionData", "myProject_fnc_processMissionData", false, netId player] remoteExecCall ["dragonfly_db_fnc_listLoad", 2, false]; +``` + +## Notes + +- This function retrieves the entire list stored at the specified key, making it useful when you need to process multiple elements together. +- Both the `_key` and `_function` parameters are required. The function will exit without action if either is empty. +- The retrieved data is processed asynchronously through the scheduler system and passed to the specified callback function. +- For multiplayer scenarios, you can specify a target client using the `_netId` parameter to send the retrieved data to that specific client. +- The `_call` parameter determines whether the callback function is executed in an unscheduled environment (true) or scheduled environment (false). +- This function uses the underlying "listrng" extension with a range from 0 to -1, which retrieves all elements in the list. +- All list operations are logged for debugging purposes. + +## Related Functions +- `dragonfly_db_fnc_listAdd`: Adds an element to a list +- `dragonfly_db_fnc_listGet`: Retrieves a specific element from a list +- `dragonfly_db_fnc_listSet`: Replaces a specific element in a list +- `dragonfly_db_fnc_listRemove`: Removes a specific element from a list +- `dragonfly_db_fnc_scheduler`: Processes the callback from the database extension + +## Links + +[List Add](listAdd.md) | +[List Get](listGet.md) | +[List Load](listLoad.md) | +[List Remove](listRemove.md) | +[List Set](listSet.md) \ No newline at end of file diff --git a/docs/list/listRemove.md b/docs/list/listRemove.md new file mode 100644 index 0000000..4b29cd2 --- /dev/null +++ b/docs/list/listRemove.md @@ -0,0 +1,70 @@ +--- +title: ArmaDragonflyClient - List Remove +icon: mdi:file-text-outline +excerpt: Remove an element from a list stored at a key in DragonflyClient. +--- + +# dragonfly_db_fnc_listRemove + +## Description + +Removes a specific element from a list stored at a specified key in the DragonflyClient database. This function allows for precise control over list content by targeting individual elements by their index, without affecting other elements in the list. This is particularly useful for removing outdated or no longer needed entries. + +## Syntax + +```sqf +[_key, _index] call dragonfly_db_fnc_listRemove +``` + +## Parameters + +| Parameter | Type | Description | Default | +|-----------|------|-------------|---------| +| _key | String | The key identifying the list from which to remove an element | "" | +| _index | Number | The zero-based index of the element to remove from the list | -1 | + +## Return Value + +None. The operation runs synchronously to remove the element immediately. + +## Examples + +**Remove the first element from an event log:** +```sqf +["eventLog", 0] call dragonfly_db_fnc_listRemove; +``` + +**Remove a specific player record:** +```sqf +["playerRecords", 5] call dragonfly_db_fnc_listRemove; +``` + +**Remove an element from a multiplayer environment:** +```sqf +["sharedData", 2] remoteExecCall ["dragonfly_db_fnc_listRemove", 2, false]; +``` + +## Notes + +- This function removes only the element at the specified index. All other elements remain unchanged, though their indices may shift. +- The index is zero-based, meaning the first element is at index 0, the second at index 1, and so on. +- If an invalid index is provided (negative or exceeding the list length), the operation will not remove any elements. +- The `_key` parameter must be a non-empty string, otherwise the function will exit without performing any action. +- After removing an element, all subsequent elements shift down by one index to maintain a contiguous list. +- The removal operation is permanent and cannot be undone except by re-adding the element. +- All list operations are logged for debugging purposes. + +## Related Functions +- `dragonfly_db_fnc_listAdd`: Adds an element to a list +- `dragonfly_db_fnc_listGet`: Retrieves a specific element from a list +- `dragonfly_db_fnc_listLoad`: Retrieves a range of elements from a list +- `dragonfly_db_fnc_listSet`: Replaces a specific element in a list +- `dragonfly_db_fnc_scheduler`: Processes the callback from the database extension + +## Links + +[List Add](listAdd.md) | +[List Get](listGet.md) | +[List Load](listLoad.md) | +[List Remove](listRemove.md) | +[List Set](listSet.md) \ No newline at end of file diff --git a/docs/list/listSet.md b/docs/list/listSet.md new file mode 100644 index 0000000..8a6d6b1 --- /dev/null +++ b/docs/list/listSet.md @@ -0,0 +1,71 @@ +--- +title: ArmaDragonflyClient - List Set +icon: mdi:file-text-outline +excerpt: Set an element in a list stored at a key in DragonflyClient. +--- + +# dragonfly_db_fnc_listSet + +## Description + +Updates or sets the value of a specific element at a given index in a list stored at a specified key in the DragonflyClient database. This function allows for precise modification of list contents by targeting individual elements without affecting other elements in the list. It is particularly useful for updating record information, modifying configuration data, or correcting entries. + +## Syntax + +```sqf +[_key, _index, _data] call dragonfly_db_fnc_listSet +``` + +## Parameters + +| Parameter | Type | Description | Default | +|-----------|------|-------------|---------| +| _key | String | The key identifying the list in which to set an element | "" | +| _index | Number | The zero-based index of the element to set in the list | -1 | +| _data | Array/String/Number/Boolean | The value to set at the specified index | [] | + +## Return Value + +None. The operation runs synchronously to update the element immediately. + +## Examples + +**Update an event log entry:** +```sqf +["eventLog", 0, ["Updated event information"]] call dragonfly_db_fnc_listSet; +``` + +**Modify player statistics:** +```sqf +["playerStats", 3, [name player, score player, alive player]] call dragonfly_db_fnc_listSet; +``` + +**Update configuration in multiplayer:** +```sqf +["missionConfig", 1, ["difficulty", "veteran"]] remoteExecCall ["dragonfly_db_fnc_listSet", 2, false]; +``` + +## Notes + +- This function updates only the element at the specified index. All other elements remain unchanged. +- The index is zero-based, meaning the first element is at index 0, the second at index 1, and so on. +- If the specified index does not exist in the list, the operation may fail or have no effect. +- Both the `_key` parameter and `_data` parameter must be valid (non-empty string for key, non-nil for data), otherwise the function will exit without performing any action. +- The function supports various data types, including arrays, strings, numbers, and booleans. +- The update operation is permanent and will overwrite any previous value at the specified index. +- All list operations are logged for debugging purposes. + +## Related Functions +- `dragonfly_db_fnc_listAdd`: Adds an element to a list +- `dragonfly_db_fnc_listGet`: Retrieves a specific element from a list +- `dragonfly_db_fnc_listLoad`: Retrieves a range of elements from a list +- `dragonfly_db_fnc_listRemove`: Removes a specific element from a list +- `dragonfly_db_fnc_scheduler`: Processes the callback from the database extension + +## Links + +[List Add](listAdd.md) | +[List Get](listGet.md) | +[List Load](listLoad.md) | +[List Remove](listRemove.md) | +[List Set](listSet.md) \ No newline at end of file diff --git a/docs/lists/listAdd.md b/docs/lists/listAdd.md deleted file mode 100644 index 388d0f1..0000000 --- a/docs/lists/listAdd.md +++ /dev/null @@ -1,25 +0,0 @@ -# List Add - -## Description - -Add element to list stored at `key` from DragonflyDB. - -## Usage - -```sqf -Arguments: - 0: STRING - Name of stored key (default: "") - 1: [ARRAY|STRING|NUMBER|BOOL] - Value to insert into key (default: []) - -Examples: - ["events", ["Server state saved to DB 071620241600"]] call dragonfly_db_fnc_listAdd (Server or Singleplayer Only) - ["events", ["Server state saved to DB 071620241600"]] remoteExecCall ["dragonfly_db_fnc_listAdd", 2, false] (Multiplayer Only) -``` - -## Links - -[List Add](lists/listAdd.md) | -[List Get](lists/listGet.md) | -[List Load](lists/listLoad.md) | -[List Remove](lists/listRemove.md) | -[List Set](lists/listSet.md) diff --git a/docs/lists/listGet.md b/docs/lists/listGet.md deleted file mode 100644 index 8003f72..0000000 --- a/docs/lists/listGet.md +++ /dev/null @@ -1,28 +0,0 @@ -# List Get - -## Description - -Get element of list stored at `key` from DragonflyDB. - -## Usage - -```sqf -Arguments: - 0: STRING - Name of stored key (default: "") - 1: SCALAR - Index of stored value in list (default: -1) - 2: STRING - Name of function to return data (default: "") - 3: BOOLEAN - Unscheduled environment (default: false) - 4: STRING - NetID of target to return data from function (default: nil) - -Examples: - ["events", 0, "dragonfly_db_fnc_test"] call dragonfly_db_fnc_listGet (Server or Singleplayer Only) - ["events", 0, "dragonfly_db_fnc_test", false, netId player] remoteExecCall ["dragonfly_db_fnc_listGet", 2, false] (Multiplayer Only) -``` - -## Links - -[List Add](lists/listAdd.md) | -[List Get](lists/listGet.md) | -[List Load](lists/listLoad.md) | -[List Remove](lists/listRemove.md) | -[List Set](lists/listSet.md) diff --git a/docs/lists/listLoad.md b/docs/lists/listLoad.md deleted file mode 100644 index 12539d7..0000000 --- a/docs/lists/listLoad.md +++ /dev/null @@ -1,27 +0,0 @@ -# List Load - -## Description - -Get all elements of list stored at `key` from DragonflyDB. - -## Usage - -```sqf -Arguments: - 0: STRING - Name of stored key (default: "") - 1: STRING - Name of function to return data (default: "") - 2: BOOLEAN - Unscheduled environment (default: false) - 3: STRING - NetID of target to return data from function (default: nil) - -Examples: - ["events", "dragonfly_db_fnc_test"] call dragonfly_db_fnc_listLoad (Server or Singleplayer Only) - ["events", "dragonfly_db_fnc_test", false, netId player] remoteExecCall ["dragonfly_db_fnc_listLoad", 2, false] (Multiplayer Only) -``` - -## Links - -[List Add](lists/listAdd.md) | -[List Get](lists/listGet.md) | -[List Load](lists/listLoad.md) | -[List Remove](lists/listRemove.md) | -[List Set](lists/listSet.md) diff --git a/docs/lists/listRemove.md b/docs/lists/listRemove.md deleted file mode 100644 index ae57e33..0000000 --- a/docs/lists/listRemove.md +++ /dev/null @@ -1,25 +0,0 @@ -# List Remove - -## Description - -Remove element of list stored at `key` from DragonflyDB. - -## Usage - -```sqf -Arguments: - 0: STRING - Name of stored key (default: "") - 1: SCALAR - Index of stored value in list (default: -1) - -Examples: - ["events", 0] call dragonfly_db_fnc_listRemove (Server or Singleplayer Only) - ["events", 0] remoteExecCall ["dragonfly_db_fnc_listRemove", 2, false] (Multiplayer Only) -``` - -## Links - -[List Add](lists/listAdd.md) | -[List Get](lists/listGet.md) | -[List Load](lists/listLoad.md) | -[List Remove](lists/listRemove.md) | -[List Set](lists/listSet.md) diff --git a/docs/lists/listSet.md b/docs/lists/listSet.md deleted file mode 100644 index a56909a..0000000 --- a/docs/lists/listSet.md +++ /dev/null @@ -1,26 +0,0 @@ -# List Set - -## Description - -Set element of list stored at `key` from DragonflyDB. - -## Usage - -```sqf -Arguments: - 0: STRING - Name of stored key (default: "") - 1: SCALAR - Index of stored value in list (default: -1) - 2: [ARRAY|STRING|NUMBER|BOOL] - Value to set for index (default: []) - -Examples: - ["events", 0, ["Hello World!"]] call dragonfly_db_fnc_listSet (Server or Singleplayer Only) - ["events", 0, ["Hello World!"]] remoteExecCall ["dragonfly_db_fnc_listSet", 2, false] (Multiplayer Only) -``` - -## Links - -[List Add](lists/listAdd.md) | -[List Get](lists/listGet.md) | -[List Load](lists/listLoad.md) | -[List Remove](lists/listRemove.md) | -[List Set](lists/listSet.md) diff --git a/docs/main/addTask.md b/docs/main/addTask.md deleted file mode 100644 index 0772872..0000000 --- a/docs/main/addTask.md +++ /dev/null @@ -1,32 +0,0 @@ -# Add Task - -## Description - -Add task to queue. - -## Usage - -```sqf -Arguments: - 0: STRING - Type of task - 1: STRING - Name of stored key (default: "") - 2: STRING - Name of stored hash key field (default: "") - 3: SCALAR - Index of stored value in list (default: -1) - 4: [ARRAY|STRING|NUMBER|BOOL] - Value to store in key (default: []) - 5: STRING - Name of function to return data (default: "") - 6: BOOLEAN - Unscheduled environment (default: false) - 7: STRING - NetID of target to return data from function (default: "") - -Examples: - ["hgetall", "", "", -1, [], "dragonfly_db_fnc_test"] call dragonfly_db_fnc_addTask (Server or Singleplayer Only) - ["hgetallid", getPlayerUID player, "", -1, [], "dragonfly_db_fnc_test", false, netId player] remoteExecCall ["dragonfly_db_fnc_addTask", 2, false] (Multiplayer Only) -``` - -## Links - -[Add Task](main/addTask.md) | -[Handler](main/handler.md) | -[Init](main/init.md) | -[Process Queue](main/processQueue.md) | -[Scheduler](main/scheduler.md) | -[Setup](main/setup.md) diff --git a/docs/main/handler.md b/docs/main/handler.md deleted file mode 100644 index b68ab17..0000000 --- a/docs/main/handler.md +++ /dev/null @@ -1,28 +0,0 @@ -# Handler - -## Description - -Handle data from DB. - -## Usage - -```sqf -Arguments: - 0: STRING - Name of function to return data (default: "") - 1: BOOLEAN - Unscheduled environment (default: false) - 2: [ARRAY|STRING|NUMBER|BOOL] - Value to store in key (default: []) - 3: STRING - NetID of target to return data from function (default: nil) - -Examples: - ["dragonfly_db_fnc_test", false, ["Hello World!"]] call dragonfly_db_fnc_handler (Server or Singleplayer Only) - ["dragonfly_db_fnc_test", false, ["Hello World!"], netId player] remoteExecCall ["dragonfly_db_fnc_handler", 2, false] (Multiplayer Only) -``` - -## Links - -[Add Task](main/addTask.md) | -[Handler](main/handler.md) | -[Init](main/init.md) | -[Process Queue](main/processQueue.md) | -[Scheduler](main/scheduler.md) | -[Setup](main/setup.md) diff --git a/docs/main/init.md b/docs/main/init.md deleted file mode 100644 index ed7a22a..0000000 --- a/docs/main/init.md +++ /dev/null @@ -1,24 +0,0 @@ -# Initialization - -## Description - -Initial Extension settings. - -## Usage - -```sqf -Arguments: - N/A - -Example: - N/A -``` - -## Links - -[Add Task](main/addTask.md) | -[Handler](main/handler.md) | -[Init](main/init.md) | -[Process Queue](main/processQueue.md) | -[Scheduler](main/scheduler.md) | -[Setup](main/setup.md) diff --git a/docs/main/processQueue.md b/docs/main/processQueue.md deleted file mode 100644 index ea20d12..0000000 --- a/docs/main/processQueue.md +++ /dev/null @@ -1,25 +0,0 @@ -# Process Queue - -## Description - -Processes a queue of tasks to be executed. - -## Usage - -```sqf -Arguments: - N/A - -Examples: - [] spawn dragonfly_db_fnc_processQueue (Server or Singleplayer Only) - [] remoteExec ["dragonfly_db_fnc_processQueue", 2, false] (Multiplayer Only) -``` - -## Links - -[Add Task](main/addTask.md) | -[Handler](main/handler.md) | -[Init](main/init.md) | -[Process Queue](main/processQueue.md) | -[Scheduler](main/scheduler.md) | -[Setup](main/setup.md) diff --git a/docs/main/scheduler.md b/docs/main/scheduler.md deleted file mode 100644 index 35f94ae..0000000 --- a/docs/main/scheduler.md +++ /dev/null @@ -1,25 +0,0 @@ -# Scheduler - -## Description - -Scheduled Environment for extension. - -## Usage - -```sqf -Arguments: - 0: STRING - Task ID from extension (default: "") - -Examples: - ["071620241600_get"] call dragonfly_db_fnc_scheduler (Server or Singleplayer Only) - ["071620241600_get"] remoteExecCall ["dragonfly_db_fnc_scheduler", 2, false] (Multiplayer Only) -``` - -## Links - -[Add Task](main/addTask.md) | -[Handler](main/handler.md) | -[Init](main/init.md) | -[Process Queue](main/processQueue.md) | -[Scheduler](main/scheduler.md) | -[Setup](main/setup.md) diff --git a/docs/main/setup.md b/docs/main/setup.md deleted file mode 100644 index 5785bb3..0000000 --- a/docs/main/setup.md +++ /dev/null @@ -1,27 +0,0 @@ -# Setup - -## Description - -Setup Extension to communicate with DB. - -## Usage - -```sqf -Arguments: - 0: STRING - Name host (default: "localhost") - 1: SCALAR - Port of host (default: 6379) - 2: STRING - Password of host (default: "xyz123") - -Examples: - ["localhost", 6379, "xyz123"] call dragonfly_db_fnc_setup (Server or Singleplayer Only) - ["localhost", 6379, "xyz123"] remoteExecCall ["dragonfly_db_fnc_setup", 2, false] (Multiplayer Only) -``` - -## Links - -[Add Task](main/addTask.md) | -[Handler](main/handler.md) | -[Init](main/init.md) | -[Process Queue](main/processQueue.md) | -[Scheduler](main/scheduler.md) | -[Setup](main/setup.md) diff --git a/docs/misc/saveDb.md b/docs/misc/saveDb.md deleted file mode 100644 index d129090..0000000 --- a/docs/misc/saveDb.md +++ /dev/null @@ -1,22 +0,0 @@ -# Save DB - -## Description - -Save DB to disc. - -## Usage - -```sqf -Arguments: - N/A - -Examples: - [] call dragonfly_db_fnc_saveDB (Server or Singleplayer Only) - [] remoteExecCall ["dragonfly_db_fnc_saveDB", 2, false] (Multiplayer Only) -``` - -## Links - -[Save DB](misc/saveDb.md) | -[Setup](misc/setup.md) | -[Test](misc/test.md) diff --git a/docs/misc/test.md b/docs/misc/test.md deleted file mode 100644 index 0197da4..0000000 --- a/docs/misc/test.md +++ /dev/null @@ -1,22 +0,0 @@ -# Test - -## Description - -Test Function. - -## Usage - -```sqf -Arguments: - 0: [ARRAY|STRING|NUMBER|BOOL] - Value to test (default: []) - -Examples: - ["Hello World!"] spawn dragonfly_db_fnc_test (Server or Singleplayer Only) - ["Hello World!"] remoteExec ["dragonfly_db_fnc_test", 2, false] (Multiplayer Only) -``` - -## Links - -[Save DB](misc/saveDb.md) | -[Setup](misc/setup.md) | -[Test](misc/test.md)