Seek() private method

private Seek ( RelocatableReference reference ) : void
reference RelocatableReference
return void
Example #1
0
        public StructDefinition Resolve(GR2Reader gr2)
        {
            Debug.Assert(IsValid);
            // Type definitions use a 2-level cache
            // First we'll check the reference itself, if it has a cached ref to the resolved type
            // If it has, we have nothing to do

            // If the struct wasn't resolved yet, try the type definition cache
            // When a type definition is read from the GR2 file, it is stored here using its definition address as a key
            if (Type == null)
            {
                gr2.Types.TryGetValue(this, out Type);
            }

            if (Type == null)
            {
                // We haven't seen this type before, read its definition from the file and cache it
#if DEBUG_GR2_SERIALIZATION
                System.Console.WriteLine(String.Format(" ===== Struct definition at {0:X8} ===== ", Offset));
#endif
                var originalPos = gr2.Stream.Position;
                gr2.Seek(this);
                Type = gr2.ReadStructDefinition();
                gr2.Stream.Seek(originalPos, SeekOrigin.Begin);
                gr2.Types[this] = Type;
            }

            return(Type);
        }
Example #2
0
        public string Resolve(GR2Reader gr2)
        {
            Debug.Assert(IsValid);
            // Don't use a global string cache here, as string constants are rarely referenced twice,
            // unlike struct definitions
            if (Value == null)
            {
                var originalPos = gr2.Stream.Position;
                gr2.Seek(this);
                Value = gr2.ReadString();
                gr2.Stream.Seek(originalPos, SeekOrigin.Begin);
            }

            return(Value);
        }
Example #3
0
        public List <RelocatableReference> Resolve(GR2Reader gr2)
        {
            Debug.Assert(IsValid);
            if (Items == null)
            {
#if DEBUG_GR2_SERIALIZATION
                System.Console.WriteLine(String.Format("    (Reference list at {0:X8})", Offset));
#endif
                var originalPos = gr2.Stream.Position;
                gr2.Seek(this);
                Items = new List <RelocatableReference>();
                for (int i = 0; i < Size; i++)
                {
                    Items.Add(gr2.ReadReference());
#if DEBUG_GR2_SERIALIZATION
                    System.Console.WriteLine(String.Format("        {0:X8}", r.Offset));
#endif
                }
                gr2.Stream.Seek(originalPos, SeekOrigin.Begin);
            }

            return(Items);
        }