13.10.2014, 19:55
JFiles
Introduction:
Almost 1 year ago I developed a file system that was called Just_INI which was EXTREMELY low (anyway i just published it in the spanish section) and that also had some issues, now 1 weak ago y got the idea of making this plugin; and here I am. How does it work?
This plugin handles the files in a completely dynamic way by the use of vectors and maps in C++. The files just exist in the RAM memory of the computer until you convert them in a 'real' file using the cache_MakeRealFile function. This thing of using the files as they were "imaginary" allows you to access the data inside them VERY quickly. Natives:
Код:
native JINI:cache_CreateFile(); native cache_WriteString(JINI:archivo, key[], val[]); native cache_WriteInt(JINI:archivo, key[], val); native cache_WriteFloat(JINI:archivo, key[], Float:val); native cache_WriteBool(JINI:archivo, key[], bool:val); native cache_GetString(JINI:archivo, key[], string[], size=sizeof(string)); native cache_GetInt(JINI:archivo, key[]); native Float:cache_GetFloat(JINI:archivo, key[]); native bool:cache_GetBool(JINI:archivo, key[]); native cache_EraseFile(JINI:file); native cache_MakeRealFile(JINI:JFile, new_file_name[]); native cache_Clear(); native INI:cache_LoadFileIntoCache(file_name[]); native cache_RemoveKey(JINI:JFile, key[], typeofkey); native CreateFolder(folder[]); native RemoveFolder(folder[]); native cache_EditString(JINI:archivo, key[], str[]); native cache_EditInt(JINI:archivo, key[], value); native cache_EditFloat(JINI:archivo, key[], Float:value); native cache_EditBool(JINI:archivo, key[], bool:value);
Speed test's:
Test 1:Код:
[19:54:18] YSI: Write and get 1000 data of a file [19:54:18] YSI: Took 487 ms. [19:54:18] JFiles: Took 34 ms.
Код:
[19:54:43] YSI: YSI: Write and get 1000 data of a file [19:54:44] YSI: Took 713 ms. [19:54:44] JFiles: Took 36 ms.
Код:
[19:54:52] YSI: Write and get 1000 data of a file [19:54:53] YSI: Took 719 ms. [19:54:53] JFiles: Took 35 ms.
pawn Код:
#include <a_samp>
#include <YSI\y_ini>
native JINI:cache_CreateFile();
native cache_WriteString(JINI:archivo, key[], val[]);
native cache_WriteInt(JINI:archivo, key[], val);
native cache_WriteFloat(JINI:archivo, key[], Float:val);
native cache_WriteBool(JINI:archivo, key[], bool:val);
native cache_GetString(JINI:archivo, key[], string[], size=sizeof(string));
native cache_GetInt(JINI:archivo, key[]);
native Float:cache_GetFloat(JINI:archivo, key[]);
native bool:cache_GetBool(JINI:archivo, key[]);
native cache_EraseFile(JINI:file);
native cache_MakeRealFile(JINI:JFile, new_file_name[]);
native cache_Clear();
native INI:cache_LoadFileIntoCache(file_name[]);
native cache_RemoveKey(JINI:JFile, key[], typeofkey);
native CreateFolder(folder[]);
native RemoveFolder(folder[]);
native cache_EditString(JINI:archivo, key[], str[]);
native cache_EditInt(JINI:archivo, key[], value);
native cache_EditFloat(JINI:archivo, key[], Float:value);
native cache_EditBool(JINI:archivo, key[], bool:value);
enum
{
TYPE_STRING,
TYPE_INT,
TYPE_BOOL,
TYPE_FLOAT
};
public OnGameModeInit()
{
printf("YSI: Write 1000 data to a file");
new a = GetTickCount();
new INI:file = INI_Open("archivo.txt");
for(new i = 0; i < 1000; i++)
{
new str[64];
format(str, sizeof(str), "Number%d", i);
INI_WriteInt(file,str, i);
INI_WriteFloat(file, str, 100.0);
}
INI_Close(file);
printf("YSI: Took %d ms.", GetTickCount() - a);
a = GetTickCount();
new JINI:archivo = cache_CreateFile();
for(new i = 0; i < 1000; i++)
{
new str[64];
format(str, sizeof(str), "Number%d", i);
cache_WriteInt(archivo, str, i);
cache_WriteFloat(archivo, str, 100.0);
}
printf("JFiles: Took %d ms.", GetTickCount() - a);
return 1;
}
Download:
https://www.mediafire.com/?2phwdcderpx1vbiCredits:
oOFotherOo - Some useful ideas
JustBored - Develop of the plugin.
Documentation:
native cache_CreateFile();- Creates a new 'file' in the main vector.
Return: This functions returns a handle to the created file.
Use:
pawn Код:
new JINI:archivo = cache_CreateFile();
cache_WriteInt(archivo, "Numero", 1000);
printf("El nъmero que escribi es %d", cache_GetInt(archivo, "Numero"));
//Will print: El nъmero que escribн es 1000
- Writes a string to the specified file.
Return: It returns true if it wrote fine, otherwise it returns false if a key with the same name already exists.
native cache_WriteInt(JINI:archivo, key[], val);
- Writes a number to the specified file.
Return: It returns true if it wrote fine, otherwise it returns false if a key with the same name already exists.
native cache_WriteFloat(JINI:archivo, key[], Float:val);
- Writes a float number to the specified file.
Return: It returns true if it wrote fine, otherwise it returns false if a key with the same name already exists.
native cache_WriteBool(JINI:archivo, key[], bool:val);
- Writes a boolean value to the specified file.
Return: It returns true if it wrote fine, otherwise it returns false if a key with the same name already exists.
native cache_GetString(JINI:archivo, key[], string[], size=sizeof(string));
- It gets a string of a file that is hold by the correspondient key and passes by reference to the string parameter.
Return: If the file doesnt exists it returns false and no value is passed by reference
native cache_GetInt(JINI:archivo, key[]);
- Gets the value of a int-type key that's inside a file.
Return: Returns the number which was obtain, if the file or the key doesnt exist returns -1.
native Float:cache_GetFloat(JINI:archivo, key[]);
- Gets the value of a float-type key that's inside a file.
Return: Returns the number which was obtain, if the file or the key doesnt exist returns -1.
native bool:cache_GetBool(JINI:archivo, key[]);
- Gets the value of a boolean-type key that's inside a file.
Return: Returns the boolean number which was obtain, if the file or the key doesnt exist returns -1.
native cache_EraseFile(JINI:file);
- Erases the file of the memory and everything that was inside of it.
Return: If the specified file doesnt exist returns 0 otherwise returns 1.
native cache_MakeRealFile(JINI:JFile, new_file_name[]);
- Converts an imaginary file to a real one. The path is specified in the parameter <new_file_name>
Return: If the file does not exist or can not create the new file also returns 0 otherwise returns 1.
native cache_Clear();
- Clean the main vector erasing all data inside, this is mainly if you store too many files in memory and want to clean it not occupy a lot of RAM.
native INI:cache_LoadFileIntoCache(file_name[]);
- Store an actual file in memory so that you can manipulate the other functions of cache.
Return: A handle to the newly created file.
native cache_RemoveKey(JINI:JFile, key[], typeofkey);
- Deletes a "key" of the specified file, the key type must be specified in the typeofkey parameter
The enum that holds the key types.
pawn Код:
enum
{
TYPE_STRING,
TYPE_INT,
TYPE_BOOL,
TYPE_FLOAT
};
native CreateFolder(folder[]);
- Create a new folder in the root folder on the server
Return: Returns 1 in all cases.
native RemoveFolder(folder[]);
- Deletes a folder from the root folder on the server.
Return: Returns 1 in all cases.
native cache_EditString(JINI:archivo, key[], str[]);
- Changes the string value of a key at the specified file.
Return: If the key does not exists returns 0 otherwise returns 1.
native cache_EditInt(JINI:archivo, key[], value);
- Changes the value of a int-type key at the specified file.
Return: If the key does not exists returns 0 otherwise returns 1.
native cache_EditFloat(JINI:archivo, key[], Float:value);
- Changes the value of a float-type key at the specified file.
Return: If the key does not exists returns 0 otherwise returns 1.
native cache_EditBool(JINI:archivo, key[], bool:value);
- Changes the value of a boolean-type key at the specified file.
Return: If the key does not exists returns 0 otherwise returns 1.
I still consider myself a noob in C++ so if you found any bug i would be very grateful; i am not a native speaker so please forgive any grammar mistake.