MCPcopy Create free account
hub / github.com/Norbyte/ositools / CreateOsirisSymbolMap

Method CreateOsirisSymbolMap

OsiInterface/CustomFunctions.cpp:290–324  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

288}
289
290void CustomFunctionInjector::CreateOsirisSymbolMap(MappingInfo ** Mappings, uint32_t * MappingCount)
291{
292 // Create a map of Osiris symbols
293 osiSymbols_.clear();
294 osiSymbols_.reserve(10000);
295
296 std::unordered_map<FunctionNameAndArity, uint32_t> symbolMap;
297 auto funcs = *gOsirisProxy->GetGlobals().Functions;
298 auto visit = [&symbolMap, this](STDString const & str, Function * func) {
299 OsiSymbolInfo symbol;
300 OsiFunctionToSymbolInfo(*func, symbol);
301
302 FunctionNameAndArity sig{ symbol.name, (uint32_t)symbol.params.size() };
303 symbolMap.insert(std::make_pair(sig, (uint32_t)osiSymbols_.size()));
304
305 osiSymbols_.push_back(std::move(symbol));
306 };
307
308 for (auto i = 0; i < 0x3ff; i++) {
309 auto map = funcs->Hash[i].NodeMap;
310 map.Iterate(visit);
311 }
312
313 // Map EoC function indices to Osiris functions
314 for (unsigned i = 0; i < *MappingCount; i++) {
315 auto const & mapping = (*Mappings)[i];
316 FunctionNameAndArity sig{ mapping.Name, mapping.NumParams };
317 auto it = symbolMap.find(sig);
318 if (it != symbolMap.end()) {
319 osiSymbols_[it->second].EoCFunctionId = mapping.Id;
320 } else {
321 Debug("No Osiris definition found for engine function %s/%d", mapping.Name, mapping.NumParams);
322 }
323 }
324}
325
326void CustomFunctionInjector::OnAfterGetFunctionMappings(void * Osiris, MappingInfo ** Mappings, uint32_t * MappingCount)
327{

Callers

nothing calls this directly

Calls 3

OsiFunctionToSymbolInfoFunction · 0.85
DebugFunction · 0.85
IterateMethod · 0.45

Tested by

no test coverage detected