コード例 #1
0
ファイル: Common.cs プロジェクト: Doom2fan/EchelonScript
    public static int GetArraySize([NotNull] ES_ObjectAddress arrayPointer)
    {
        var arrayType   = (ES_ArrayTypeData *)arrayPointer.Header->TypeData;
        var arrayHeader = (ES_ArrayHeader *)arrayPointer.Address;

        return(
            sizeof(ES_ObjectHeader) +
            GetArrayHeaderSize(arrayHeader->Rank) +
            arrayType->ElementType->RuntimeSize * arrayHeader->Length
            );
    }
コード例 #2
0
        static bool MarkObject(ES_ObjectAddress obj, bool flipMark)
        {
            var curFlags = obj.Header->Flags;

            var isMarked = !IsMarked(curFlags, flipMark);

            obj.Header->Flags = flipMark
                ? (curFlags & ~ES_ObjectFlags.Marked)
                : (curFlags | ES_ObjectFlags.Marked);

            return(isMarked);
        }
コード例 #3
0
        static bool HandleForwarding(ref ES_ObjectAddress obj)
        {
            var objFlags = obj.Header->Flags;

            if (objFlags.HasFlag(ES_ObjectFlags.Forwarded))
            {
                obj.Address = *(void **)obj.Address;
                return(true);
            }
            else if (objFlags.HasFlag(ES_ObjectFlags.DoRemove) && !objFlags.HasFlag(ES_ObjectFlags.Pinned))
            {
                obj.Address = null;
                return(true);
            }

            return(false);
        }