Push KeyValues.Export() method

This commit is contained in:
Vladimir 2022-10-11 17:30:22 +03:00
parent 855ece1d3b
commit 6f188fd54e
2 changed files with 39 additions and 0 deletions

View File

@ -751,6 +751,36 @@ static cell_t smn_KvGetDataType(IPluginContext *pCtx, const cell_t *params)
return pStk->pCurRoot.front()->GetDataType(name);
}
staitc cell_t smn_KeyValuesExport(IPluginContext *pCtx, const cell_t *params)
{
Handle_t hndl = static_cast<Handle_t>(params[1]);
HandleError herr;
HandleSecurity sec;
KeyValueStack *pStk;
char *name;
sec.pOwner = NULL;
sec.pIdentity = g_pCoreIdent;
if ((herr=handlesys->ReadHandle(hndl, g_KeyValueType, &sec, (void **)&pStk))
!= HandleError_None)
{
return pCtx->ThrowNativeError("Invalid key value handle %x (error %d)", hndl, herr);
}
pCtx->LocalToString(params[2], &name);
KeyValues *pNewKV = new KeyValues(name[0] == '\0' ? NULL : name);
*pNewKV = *pStk->pCurRoot; // KeyValues::operator= to recursive copy.
KeyValueStack *pExportStk = new KeyValueStack;
pExportStk->pBase = pNewKV;
pExportStk->pCurRoot.push(pNewKV);
return handlesys->CreateHandle(g_KeyValueType, pExportStk, pCtx->GetIdentity(), g_pCoreIdent, NULL);
}
static cell_t smn_KeyValuesToFile(IPluginContext *pCtx, const cell_t *params)
{
Handle_t hndl = static_cast<Handle_t>(params[1]);
@ -1241,6 +1271,7 @@ REGISTER_NATIVES(keyvaluenatives)
{"KeyValues.Import", KeyValues_Import},
{"KeyValues.ImportFromFile", smn_FileToKeyValues},
{"KeyValues.ImportFromString", smn_StringToKeyValues},
{"KeyValues.Export", smn_KeyValuesExport},
{"KeyValues.ExportToFile", smn_KeyValuesToFile},
{"KeyValues.ExportToString", smn_KeyValuesToString},
{"KeyValues.ExportLength.get", smn_KeyValuesExportLength},

View File

@ -62,6 +62,14 @@ methodmap KeyValues < Handle
// @param firstValue If firstKey is non-empty, specifies the first key's value.
public native KeyValues(const char[] name, const char[] firstKey="", const char[] firstValue="");
// Exports a KeyValues tree to new descriptor. The tree is dumped from the current position.
// The Handle must be closed.
//
// @param name Name of the root section where the export is placed.
// If NULL_STIRNG, export without a root section.
// @return A Handle to a new KeyValues structure.
public native KeyValues Export(const char[] name = NULL_STRING);
// Exports a KeyValues tree to a file. The tree is dumped from the current position.
//
// @param file File to dump write to.