Added request am29544 (nvault_touch)

This commit is contained in:
David Anderson
2006-08-20 21:23:38 +00:00
parent ea262171db
commit deefc504e1
6 changed files with 72 additions and 13 deletions

View File

@ -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

View File

@ -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);

View File

@ -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);

View File

@ -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},
};

View File

@ -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;