Add KeyValues.Merge

This commit is contained in:
Fyren 2024-06-18 16:38:17 -04:00 committed by Headline
parent 9a03d1227f
commit 8ed8899155
2 changed files with 35 additions and 0 deletions

View File

@ -1113,6 +1113,34 @@ static cell_t smn_KvGetSectionSymbol(IPluginContext *pCtx, const cell_t *params)
return 1; return 1;
} }
static cell_t KeyValues_Merge(IPluginContext *pContext, const cell_t *params)
{
Handle_t hndl_this = static_cast<Handle_t>(params[1]);
Handle_t hndl_other = static_cast<Handle_t>(params[2]);
HandleError herr;
HandleSecurity sec;
KeyValueStack *pStk_this, *pStk_other;
sec.pOwner = NULL;
sec.pIdentity = g_pCoreIdent;
if ((herr=handlesys->ReadHandle(hndl_this, g_KeyValueType, &sec, (void **)&pStk_this))
!= HandleError_None)
{
return pContext->ThrowNativeError("Invalid key value handle %x (error %d)", hndl_this, herr);
}
if ((herr=handlesys->ReadHandle(hndl_other, g_KeyValueType, &sec, (void **)&pStk_other))
!= HandleError_None)
{
return pContext->ThrowNativeError("Invalid key value handle %x (error %d)", hndl_other, herr);
}
pStk_this->pCurRoot.front()->RecursiveMergeKeyValues(pStk_other->pCurRoot.front());
return 1;
}
static cell_t KeyValues_Import(IPluginContext *pContext, const cell_t *params) static cell_t KeyValues_Import(IPluginContext *pContext, const cell_t *params)
{ {
// This version takes (dest, src). The original is (src, dest). // This version takes (dest, src). The original is (src, dest).
@ -1256,6 +1284,7 @@ REGISTER_NATIVES(keyvaluenatives)
{"KeyValues.ExportToFile", smn_KeyValuesToFile}, {"KeyValues.ExportToFile", smn_KeyValuesToFile},
{"KeyValues.ExportToString", smn_KeyValuesToString}, {"KeyValues.ExportToString", smn_KeyValuesToString},
{"KeyValues.ExportLength.get", smn_KeyValuesExportLength}, {"KeyValues.ExportLength.get", smn_KeyValuesExportLength},
{"KeyValues.Merge", KeyValues_Merge},
{NULL, NULL} {NULL, NULL}
}; };

View File

@ -334,6 +334,12 @@ methodmap KeyValues < Handle
// @param id Id of the current section. // @param id Id of the current section.
// @return True on success, false on failure. // @return True on success, false on failure.
public native bool GetSectionSymbol(int &id); public native bool GetSectionSymbol(int &id);
// Merge from the current position of another KeyValues into the current
// position of this one.
//
// @param other KeyValues Handle to merge from.
public native void Merge(KeyValues other);
}; };
/** /**