internal static RawWeakPointer ConvertWeakPointer(DataCoreCompiler compiler, DataCoreDatabase database, IDataCorePointer dataCorePointer) { var rawWeakPointer = new RawWeakPointer(); rawWeakPointer.StructureIndex = -1; rawWeakPointer.VariantIndex = -1; var pointerValue = dataCorePointer; var instance = pointerValue?.InstanceObject; if (instance != null) { var structureType = instance.GetType(); var structureIndex = database.ManagedStructureTypes.IndexOf(structureType); var structureDataTable = compiler.ManagedDataTable[structureType]; //TODO: Instead of appending the data, we should rebuild from scratch each time if (!structureDataTable.Contains(instance)) { structureDataTable.Add(instance); } var variantIndex = structureDataTable.IndexOf(instance); rawWeakPointer.StructureIndex = structureIndex; rawWeakPointer.VariantIndex = variantIndex; } return(rawWeakPointer); }
internal WeakPointerFixup(DataCoreDatabase database, object instance, PropertyInfo info, RawWeakPointer pointer) : base(database, instance, info) { Pointer = pointer; }