Added request am29544 (nvault_touch)
This commit is contained in:
parent
ea262171db
commit
deefc504e1
|
@ -15,6 +15,7 @@ public:
|
|||
virtual void Clear() =0;
|
||||
virtual void Remove(const char *key) =0;
|
||||
virtual size_t Items() =0;
|
||||
virtual void Touch(const char *key, time_t stamp) =0;
|
||||
};
|
||||
|
||||
class IVaultMngr
|
||||
|
|
|
@ -8,6 +8,12 @@
|
|||
#define _snprintf snprintf
|
||||
#endif
|
||||
|
||||
/**
|
||||
* :TODO: This beast calls strcpy()/new() way too much by creating new strings on the stack.
|
||||
* That's easily remedied and it should be fixed?
|
||||
* ---bail
|
||||
*/
|
||||
|
||||
template <>
|
||||
int HashFunction<String>(const String & k)
|
||||
{
|
||||
|
@ -284,6 +290,18 @@ size_t NVault::Prune(time_t start, time_t end)
|
|||
return m_Hash.Prune(start, end);
|
||||
}
|
||||
|
||||
void NVault::Touch(const char *key, time_t stamp)
|
||||
{
|
||||
String sKey(key);
|
||||
|
||||
if (!m_Hash.Exists(sKey))
|
||||
{
|
||||
SetValue(key, "", time(NULL));
|
||||
}
|
||||
|
||||
m_Hash.Touch(key, stamp);
|
||||
}
|
||||
|
||||
bool NVault::GetValue(const char *key, time_t &stamp, char buffer[], size_t len)
|
||||
{
|
||||
String sKey(key);
|
||||
|
|
|
@ -41,6 +41,7 @@ public:
|
|||
const char *GetValue(const char *key);
|
||||
void SetValue(const char *key, const char *val);
|
||||
void SetValue(const char *key, const char *val, time_t stamp);
|
||||
void Touch(const char *key, time_t stamp);
|
||||
size_t Prune(time_t start, time_t end);
|
||||
void Clear();
|
||||
void Remove(const char *key);
|
||||
|
|
|
@ -58,6 +58,28 @@ static cell nvault_open(AMX *amx, cell *params)
|
|||
return id;
|
||||
}
|
||||
|
||||
static cell nvault_touch(AMX *amx, cell *params)
|
||||
{
|
||||
unsigned int id = params[1];
|
||||
if (id >= g_Vaults.size() || !g_Vaults.at(id))
|
||||
{
|
||||
MF_LogError(amx, AMX_ERR_NATIVE, "Invalid vault id: %d\n", id);
|
||||
return 0;
|
||||
}
|
||||
NVault *pVault = g_Vaults.at(id);
|
||||
int len;
|
||||
char *key = MF_GetAmxString(amx, params[2], 0, &len);
|
||||
|
||||
if (params[3] == -1)
|
||||
{
|
||||
pVault->Touch(key, time(NULL));
|
||||
} else {
|
||||
pVault->Touch(key, static_cast<time_t>(params[3]));
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static cell nvault_get(AMX *amx, cell *params)
|
||||
{
|
||||
unsigned int id = params[1];
|
||||
|
@ -239,5 +261,6 @@ AMX_NATIVE_INFO nVault_natives[] = {
|
|||
{"nvault_close", nvault_close},
|
||||
{"nvault_prune", nvault_prune},
|
||||
{"nvault_remove", nvault_remove},
|
||||
{"nvault_touch", nvault_touch},
|
||||
{NULL, NULL},
|
||||
};
|
||||
|
|
|
@ -109,6 +109,11 @@ public:
|
|||
stamp = pNode->stamp;
|
||||
return pNode->val;
|
||||
}
|
||||
void Touch(const K & k, time_t stamp)
|
||||
{
|
||||
THashNode *pNode = _FindOrInsert(k);
|
||||
pNode->stamp = stamp;
|
||||
}
|
||||
V & Retrieve(const K & k)
|
||||
{
|
||||
time_t stamp;
|
||||
|
|
|
@ -19,32 +19,43 @@
|
|||
#pragma library nvault
|
||||
#endif
|
||||
|
||||
//Opens a vault by name (such as "myvault")
|
||||
//Returns a vault id, INVALID_HANDLE otherwise (-1)
|
||||
/* All timestamps are in UNIX epoch form. */
|
||||
|
||||
/* Opens a vault by name (such as "myvault")
|
||||
* Returns a vault id, INVALID_HANDLE otherwise (-1)
|
||||
*/
|
||||
native nvault_open(const name[]);
|
||||
|
||||
//Gets a vault value by returning an int
|
||||
// setting a byref float
|
||||
// or setting a string + maxlength
|
||||
/* Gets a vault value by returning an int
|
||||
* setting a byref float or setting a string + maxlength
|
||||
*/
|
||||
native nvault_get(vault, const key[], ...);
|
||||
|
||||
//Looks up a vault value for full information
|
||||
//Returns 0 if the entry is not found
|
||||
/* Looks up a vault value for full information
|
||||
* Returns 0 if the entry is not found
|
||||
*/
|
||||
native nvault_lookup(vault, const key[], value[], maxlen, ×tamp)
|
||||
|
||||
//Sets a vault value (with current timestamp)
|
||||
/* Sets a vault value (with current timestamp) */
|
||||
native nvault_set(vault, const key[], const value[]);
|
||||
|
||||
//Sets a permanent vault value (no timestamp)
|
||||
/* Sets a permanent vault value (no timestamp) */
|
||||
native nvault_pset(vault, const key[], const value[]);
|
||||
|
||||
//Prunes the vault for entries that are within the given timestamps.
|
||||
//This will not erase values set with pset
|
||||
/* Prunes the vault for entries that are within the given timestamps.
|
||||
* This will not erase values set with pset
|
||||
*/
|
||||
native nvault_prune(vault, start, end);
|
||||
|
||||
//Closes a vault
|
||||
/* Closes a vault */
|
||||
native nvault_close(vault);
|
||||
|
||||
//Removes a key from the vault
|
||||
/* Removes a key from the vault */
|
||||
native nvault_remove(vault, const key[]);
|
||||
|
||||
/* "Touches" a key to update its timestamp value.
|
||||
* If stamp is -1 (default), it will use the current time.
|
||||
* Like the unix command "touch," it will create an empty key
|
||||
* if the value does not exist.
|
||||
*/
|
||||
native nvault_touch(vault, const key[], timestamp=-1);
|
||||
|
|
Loading…
Reference in New Issue
Block a user