예제 #1
0
        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);
        }
예제 #2
0
 internal WeakPointerFixup(DataCoreDatabase database, object instance, PropertyInfo info, RawWeakPointer pointer)
     : base(database, instance, info)
 {
     Pointer = pointer;
 }