Ejemplo n.º 1
0
        protected override void Restore(NaiadReader reader)
        {
            base.Restore(reader);
            this.isShutdown = reader.Read <bool>();

            if (!this.isShutdown)
            {
                this.internTable.Restore(reader);
                this.inputTrace.Restore(reader);
                this.outputTrace.Restore(reader);

                for (int i = 0; i < this.keyIndices.Length; ++i)
                {
                    int length = reader.Read <int>();
                    if (length == 0)
                    {
                        this.keyIndices[i] = null;
                    }
                    else
                    {
                        Debug.Assert(length == 65536);
                        this.keyIndices[i] = new UnaryKeyIndices[length];
                        for (int j = 0; j < this.keyIndices[i].Length; ++j)
                        {
                            this.keyIndices[i][j] = reader.Read <UnaryKeyIndices>();
                        }
                    }
                }

                this.keysToProcess.Restore(reader);

                this.Input.Restore(reader);
            }
        }
Ejemplo n.º 2
0
        protected override void Restore(NaiadReader reader)
        {
            base.Restore(reader);

            if (!this.isShutdown)
            {
                this.internTable.Restore(reader);
                this.inputTrace1.Restore(reader);
                this.inputTrace2.Restore(reader);
                this.outputTrace.Restore(reader);

                for (int i = 0; i < this.keyIndices.Length; ++i)
                {
                    int length = reader.Read <int>();
                    if (length >= 0)
                    {
                        this.keyIndices[i] = new BinaryKeyIndices[length];
                        for (int j = 0; j < this.keyIndices[i].Length; ++j)
                        {
                            this.keyIndices[i][j] = reader.Read <BinaryKeyIndices>();
                        }
                    }
                }

                this.Input1.Restore(reader);
                this.Input2.Restore(reader);
            }
        }
Ejemplo n.º 3
0
        public void Restore(NaiadReader reader, NaiadSerialization <T> timeSerializer)
        {
            int before = reader.objectsRead;

            this.indices.Restore(reader, timeSerializer, PrimitiveSerializers.Int32);

            //Console.Error.WriteLine("% LIT.indices read {0} objects", reader.objectsRead - before);
            before = reader.objectsRead;

            this.times = FaultToleranceExtensionMethods.RestoreArray <T>(reader, n => {
                this.count = n;
                return(this.times.Length >= n ? this.times : new T[1 << BufferPoolUtils.Log2(n)]);
            }, timeSerializer);

            this.redirection = FaultToleranceExtensionMethods.RestoreArray <int>(reader, n => new int[n], PrimitiveSerializers.Int32);

            //Console.Error.WriteLine("% LIT.times read {0} objects", reader.objectsRead - before);

            before = reader.objectsRead;

            this.lastInterned = reader.Read <T>(timeSerializer);

            //Console.Error.WriteLine("% LIT.lastInterned read {0} objects", reader.objectsRead - before);

            before = reader.objectsRead;

            this.lastInternedResult = reader.Read <int>(PrimitiveSerializers.Int32);

            //Console.Error.WriteLine("% LIT.lastInternedResult read {0} objects", reader.objectsRead - before);
        }
Ejemplo n.º 4
0
        public void Restore(NaiadReader reader)
        {
            if (tSerializer == null)
            {
                tSerializer = AutoSerialization.GetSerializer <T>();
            }

            int spineCount = reader.Read <int>(PrimitiveSerializers.Int32);

            this.Spine.Clear();
            this.Spine.EnsureCapacity(spineCount);
            this.Spine.Count = spineCount;
            for (int i = 0; i < spineCount; ++i)
            {
                this.Spine.Array[i] = new T[this.SegmentLength];
                for (int j = 0; j < this.Spine.Array[i].Length; ++j)
                {
                    this.Spine.Array[i][j] = reader.Read <T>(tSerializer);
                }
            }

            this.FreeList.Restore(reader, PrimitiveSerializers.Int32);

            this.Allocated = reader.Read <int>(PrimitiveSerializers.Int32);
        }
Ejemplo n.º 5
0
        public override void Restore(NaiadReader reader)
        {
            base.Restore(reader);
            throw new NotImplementedException();

#if false
            //if (!this.terminated)
            {
                var timeSerializer = AutoSerialization.GetSerializer <T>();

                if (sSerializer == null)
                {
                    sSerializer = AutoSerialization.GetSerializer <S>();
                }

                this.accumulations.Clear();
                int accumulationsCount = reader.Read <int>(PrimitiveSerializers.Int32);
                for (int i = 0; i < accumulationsCount; ++i)
                {
                    T key = reader.Read <T>(timeSerializer);
                    Dictionary <S, Int64> value = new Dictionary <S, Int64>();
                    value.Restore(reader, sSerializer, PrimitiveSerializers.Int64);
                    this.accumulations[key] = value;
                }
            }
#endif
        }
        /// <summary>
        /// Reads this list from the given reader.
        /// </summary>
        /// <typeparam name="TElement">The type of elements in the list.</typeparam>
        /// <param name="list">The list to be read.</param>
        /// <param name="reader">The reader.</param>
        public static void Restore <TElement>(this List <TElement> list, NaiadReader reader)
        {
            list.Clear();
            int count = reader.Read <int>();

            for (int i = 0; i < list.Count; ++i)
            {
                list.Add(reader.Read <TElement>());
            }
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Restores from NaiadReader
        /// </summary>
        /// <param name="reader"></param>
        /// <param name="serializer"></param>
        /// <param name="intSerializer"></param>
        public void Restore(NaiadReader reader, NaiadSerialization <T> serializer, NaiadSerialization <Int32> intSerializer)
        {
            int readCount = reader.Read(intSerializer);

            this.Count = 0;
            Array.Clear(this.Spine, 0, this.Spine.Length);
            for (int i = 0; i < readCount; ++i)
            {
                this.Add(reader.Read(serializer));
            }
        }
        /// <summary>
        /// Reads an array from the given reader.
        /// </summary>
        /// <typeparam name="TElement">The type of elements in the array.</typeparam>
        /// <param name="reader">The reader.</param>
        /// <param name="allocator">An allocator function that allocates an array with at least as many elements as its argument.</param>
        /// <returns>The array.</returns>
        public static TElement[] RestoreArray <TElement>(NaiadReader reader, Func <int, TElement[]> allocator)
        {
            int count = reader.Read <int>();

            TElement[] ret = allocator(count);
            for (int i = 0; i < count; ++i)
            {
                ret[i] = reader.Read <TElement>();
            }
            return(ret);
        }
        /// <summary>
        /// Reads this dictionary from the given reader.
        /// </summary>
        /// <typeparam name="TKey">The type of keys in the dictionary.</typeparam>
        /// <typeparam name="TValue">The type of values in the dictionary.</typeparam>
        /// <param name="dictionary">The dictionary to be read.</param>
        /// <param name="reader">The reader.</param>
        public static void Restore <TKey, TValue>(this Dictionary <TKey, TValue> dictionary, NaiadReader reader)
        {
            dictionary.Clear();
            int count = reader.Read <int>();

            for (int i = 0; i < count; ++i)
            {
                TKey   key   = reader.Read <TKey>();
                TValue value = reader.Read <TValue>();
                dictionary[key] = value;
            }
        }
Ejemplo n.º 10
0
Archivo: Input.cs Proyecto: omidm/naiad
        protected override void Restore(NaiadReader reader)
        {
            this.nextAvailableEpoch = reader.Read <int>();
            this.nextSendEpoch      = reader.Read <int>();
            int inputQueueCount = reader.Read <int>();

            for (int i = 0; i < inputQueueCount; ++i)
            {
                S[]  array  = CheckpointRestoreExtensionMethods.RestoreArray <S>(reader, n => new S[n]);
                bool isLast = reader.Read <bool>();
                this.inputQueue.Enqueue(new Instruction(array, isLast));
            }
        }
Ejemplo n.º 11
0
        public void Restore(NaiadReader reader)
        {
            var timeSerializer  = AutoSerialization.GetSerializer <TTime>();
            var valueSerializer = AutoSerialization.GetSerializer <TRecord>();

            int readCount = reader.Read(PrimitiveSerializers.Int32);

            for (int i = 0; i < readCount; ++i)
            {
                TTime time = reader.Read(timeSerializer);
                SpinedList <TRecord> records = new SpinedList <TRecord>();
                records.Restore(reader, valueSerializer);
                this.recordsToProcess[time] = records;
            }
        }
Ejemplo n.º 12
0
 protected override void Restore(NaiadReader reader)
 {
     base.Restore(reader);
     //if (!this.terminated)
     {
         this.accumulations.Clear();
         int accumulationsCount = reader.Read <int>();
         for (int i = 0; i < accumulationsCount; ++i)
         {
             T key = reader.Read <T>();
             Dictionary <S, Int64> value = new Dictionary <S, Int64>();
             value.Restore(reader);
             this.accumulations[key] = value;
         }
     }
 }
Ejemplo n.º 13
0
        protected override void Restore(NaiadReader reader)
        {
            base.Restore(reader);
            this.isShutdown = reader.Read <bool>();

            if (!this.isShutdown)
            {
                this.internTable.Restore(reader);
                this.inputTrace.Restore(reader);
                this.outputTrace.Restore(reader);

                this.keyIndices.Restore(reader);
                //this.KeysToProcessAtTimes.Restore(reader, keySerializer);

                this.Input.Restore(reader);

                /*
                 * int recordsToProcessCount = reader.Read<int>(PrimitiveSerializers.Int32);
                 *
                 * foreach (NaiadList<Weighted<S>> recordList in this.recordsToProcess.Values)
                 *  recordList.Free();
                 * this.recordsToProcess.Clear();
                 *
                 * for (int i = 0; i < recordsToProcessCount; ++i)
                 * {
                 *  T key = reader.Read<T>(timeSerializer);
                 *  NaiadList<Weighted<S>> value = new NaiadList<Weighted<S>>();
                 *  value.Restore(reader, weightedSSerializer);
                 *  this.recordsToProcess[key] = value;
                 * }
                 */
            }
        }
Ejemplo n.º 14
0
        public static T[] RestoreArray <T>(NaiadReader reader, Func <int, T[]> allocator, NaiadSerialization <T> serializer)
        {
            if (intSerializer == null)
            {
                intSerializer = AutoSerialization.GetSerializer <int>();
            }

            int count = reader.Read <int>(intSerializer);

            T[] ret = allocator(count);
            for (int i = 0; i < count; ++i)
            {
                ret[i] = reader.Read <T>(serializer);
            }
            return(ret);
        }
Ejemplo n.º 15
0
        public static void Restore <S>(this List <S> list, NaiadReader reader, NaiadSerialization <S> serializer)
        //    where S : IEquatable<S>
        {
            if (intSerializer == null)
            {
                intSerializer = AutoSerialization.GetSerializer <int>();
            }

            list.Clear();
            int count = reader.Read <int>(intSerializer);

            for (int i = 0; i < list.Count; ++i)
            {
                list.Add(reader.Read <S>(serializer));
            }
        }
Ejemplo n.º 16
0
        /// <summary>
        /// Restores this buffer from the given <see cref="NaiadReader"/>.
        /// </summary>
        /// <param name="reader">The reader.</param>
        public void Restore(NaiadReader reader)
        {
            var timeSerializer  = this.Vertex.SerializationFormat.GetSerializer <TTime>();
            var valueSerializer = this.Vertex.SerializationFormat.GetSerializer <TRecord>();
            var intSerializer   = this.Vertex.SerializationFormat.GetSerializer <Int32>();

            int readCount = reader.Read(intSerializer);

            for (int i = 0; i < readCount; ++i)
            {
                TTime time = reader.Read(timeSerializer);
                SpinedList <TRecord> records = new SpinedList <TRecord>();
                records.Restore(reader, valueSerializer, intSerializer);
                this.recordsToProcess[time] = records;
            }
        }
Ejemplo n.º 17
0
        public void Restore(NaiadReader reader)
        {
            int spineCount = reader.Read<int>();
            this.Spine.Clear();
            this.Spine.EnsureCapacity(spineCount);
            this.Spine.Count = spineCount;
            for (int i = 0; i < spineCount; ++i)
            {
                this.Spine.Array[i] = new T[this.SegmentLength];
                for (int j = 0; j < this.Spine.Array[i].Length; ++j)
                    this.Spine.Array[i][j] = reader.Read<T>();
            }

            this.FreeList.Restore(reader);

            this.Allocated = reader.Read<int>();
        }
Ejemplo n.º 18
0
        public static void Restore <S>(this NaiadList <S> list, NaiadReader reader, NaiadSerialization <S> serializer)
        //    where S : IEquatable<S>
        {
            if (intSerializer == null)
            {
                intSerializer = AutoSerialization.GetSerializer <int>();
            }

            list.Clear();
            int count = reader.Read <int>(intSerializer);

            list.EnsureCapacity(count);
            list.Count = count;
            for (int i = 0; i < list.Count; ++i)
            {
                list.Array[i] = reader.Read <S>(serializer);
            }
        }
Ejemplo n.º 19
0
        public override void Restore(NaiadReader reader)
        {
            if (weightedSSerializer == null)
            {
                weightedSSerializer = AutoSerialization.GetSerializer <S>();
            }

            this.nextAvailableEpoch = reader.Read <int>(PrimitiveSerializers.Int32);
            this.nextSendEpoch      = reader.Read <int>(PrimitiveSerializers.Int32);
            int inputQueueCount = reader.Read <int>(PrimitiveSerializers.Int32);

            for (int i = 0; i < inputQueueCount; ++i)
            {
                S[]  array  = FaultToleranceExtensionMethods.RestoreArray <S>(reader, n => new S[n], weightedSSerializer);
                bool isLast = reader.Read <bool>(PrimitiveSerializers.Bool);
                this.inputQueue.Enqueue(new Instruction(array, isLast));
            }
        }
Ejemplo n.º 20
0
        public override void Restore(NaiadReader reader)
        {
            base.Restore(reader);
            this.isShutdown = reader.Read <bool>(PrimitiveSerializers.Bool);

            if (!this.isShutdown)
            {
                if (timeSerializer == null)
                {
                    timeSerializer = AutoSerialization.GetSerializer <T>();
                }
                if (weightedSSerializer == null)
                {
                    weightedSSerializer = AutoSerialization.GetSerializer <Weighted <S> >();
                }

                this.internTable.Restore(reader, timeSerializer);
                this.inputTrace.Restore(reader);
                this.outputTrace.Restore(reader);

                for (int i = 0; i < this.keyIndices.Length; ++i)
                {
                    int length = reader.Read(PrimitiveSerializers.Int32);
                    if (length == 0)
                    {
                        this.keyIndices[i] = null;
                    }
                    else
                    {
                        Debug.Assert(length == 65536);
                        this.keyIndices[i] = new UnaryKeyIndices[length];
                        for (int j = 0; j < this.keyIndices[i].Length; ++j)
                        {
                            this.keyIndices[i][j] = reader.Read(UnaryKeyIndices.Serializer);
                        }
                    }
                }

                this.keysToProcess.Restore(reader, PrimitiveSerializers.Int32);

                this.Input.Restore(reader);
            }
        }
Ejemplo n.º 21
0
        public static void Restore <K, V>(this Dictionary <K, V> dictionary, NaiadReader reader, NaiadSerialization <K> keySerializer, NaiadSerialization <V> valueSerializer)
        //where K : IEquatable<K>
        //where V : IEquatable<V>
        {
            if (intSerializer == null)
            {
                intSerializer = AutoSerialization.GetSerializer <int>();
            }

            dictionary.Clear();
            int count = reader.Read <int>(intSerializer);

            for (int i = 0; i < count; ++i)
            {
                K key   = reader.Read <K>(keySerializer);
                V value = reader.Read <V>(valueSerializer);
                dictionary[key] = value;
            }
        }
Ejemplo n.º 22
0
        public override void Restore(NaiadReader reader)
        {
            base.Restore(reader);
            this.isShutdown = reader.Read <bool>(PrimitiveSerializers.Bool);

            if (!this.isShutdown)
            {
                if (timeSerializer == null)
                {
                    timeSerializer = AutoSerialization.GetSerializer <T>();
                }
                if (weightedS1Serializer == null)
                {
                    weightedS1Serializer = AutoSerialization.GetSerializer <Weighted <S1> >();
                }
                if (weightedS2Serializer == null)
                {
                    weightedS2Serializer = AutoSerialization.GetSerializer <Weighted <S2> >();
                }

                this.internTable.Restore(reader, timeSerializer);
                this.inputTrace1.Restore(reader);
                this.inputTrace2.Restore(reader);
                this.outputTrace.Restore(reader);

                for (int i = 0; i < this.keyIndices.Length; ++i)
                {
                    int length = reader.Read <int>(PrimitiveSerializers.Int32);
                    if (length >= 0)
                    {
                        this.keyIndices[i] = new BinaryKeyIndices[length];
                        for (int j = 0; j < this.keyIndices[i].Length; ++j)
                        {
                            this.keyIndices[i][j] = reader.Read <BinaryKeyIndices>(BinaryKeyIndices.Serializer);
                        }
                    }
                }

                this.Input1.Restore(reader);
                this.Input2.Restore(reader);
            }
        }
Ejemplo n.º 23
0
        public void Restore(NaiadReader reader)
        {
            if (rSerializer == null)
            {
                rSerializer = AutoSerialization.GetSerializer <R>();
            }

            bool isMutable = reader.Read <bool>(PrimitiveSerializers.Bool);

            if (isMutable)
            {
                int headsCount = reader.Read <int>(PrimitiveSerializers.Int32);
                this.heads = new List <int>(headsCount);
                for (int i = 0; i < headsCount; ++i)
                {
                    this.heads.Add(reader.Read <int>(PrimitiveSerializers.Int32));
                }

                int linksCount = reader.Read <int>(PrimitiveSerializers.Int32);
                if (pairSerializer == null)
                {
                    pairSerializer = AutoSerialization.GetSerializer <Naiad.Pair <R, int> >();
                }
                //this.links = new List<Naiad.Pair<R, int>>(linksCount);
                this.links = new SpinedList <Naiad.Pair <R, int> >();
                for (int i = 0; i < linksCount; ++i)
                {
                    this.links.Add(reader.Read <Naiad.Pair <R, int> >(pairSerializer));
                }
            }
            else
            {
                int offsetsLength = reader.Read <int>(PrimitiveSerializers.Int32);
                offsets = new int[offsetsLength];
                for (int i = 0; i < offsets.Length; ++i)
                {
                    offsets[i] = reader.Read <int>(PrimitiveSerializers.Int32);
                }

                int dataLength = reader.Read <int>(PrimitiveSerializers.Int32);
                data = new R[dataLength];
                for (int i = 0; i < data.Length; ++i)
                {
                    data[i] = reader.Read <R>(rSerializer);
                }
            }
        }
Ejemplo n.º 24
0
Archivo: Join.cs Proyecto: xyuan/Naiad
 protected override void Restore(NaiadReader reader)
 {
     base.Restore(reader);
     if (!this.isShutdown)
     {
         for (int i = 0; i < this.JoinKeys.Length; ++i)
         {
             int count = reader.Read <int>();
             if (count >= 0)
             {
                 this.JoinKeys[i] = new JoinIntKeyIndices[count];
                 for (int j = 0; j < this.JoinKeys[i].Length; ++j)
                 {
                     this.JoinKeys[i][j] = reader.Read <JoinIntKeyIndices>();
                 }
             }
             else
             {
                 this.JoinKeys[i] = null;
             }
         }
     }
 }
Ejemplo n.º 25
0
 public override void Restore(NaiadReader reader)
 {
     base.Restore(reader);
     if (!this.isShutdown)
     {
         for (int i = 0; i < this.JoinKeys.Length; ++i)
         {
             int count = reader.Read <int>(PrimitiveSerializers.Int32);
             if (count >= 0)
             {
                 this.JoinKeys[i] = new JoinIntKeyIndices[count];
                 for (int j = 0; j < this.JoinKeys[i].Length; ++j)
                 {
                     this.JoinKeys[i][j] = reader.Read <JoinIntKeyIndices>(JoinIntKeyIndices.Serializer);
                 }
             }
             else
             {
                 this.JoinKeys[i] = null;
             }
         }
     }
 }
Ejemplo n.º 26
0
        public void Restore(NaiadReader reader)
        {
            this.indices.Restore(reader);

            //Console.Error.WriteLine("% LIT.indices read {0} objects", reader.objectsRead - before);
            //before = reader.objectsRead;

            this.times = CheckpointRestoreExtensionMethods.RestoreArray <T>(reader, n => {
                this.count = n;
                return(this.times.Length >= n ? this.times : new T[n]);
            });

            this.redirection = CheckpointRestoreExtensionMethods.RestoreArray <int>(reader, n => new int[n]);

            //Console.Error.WriteLine("% LIT.times read {0} objects", reader.objectsRead - before);

            this.lastInterned = reader.Read <T>();

            //Console.Error.WriteLine("% LIT.lastInterned read {0} objects", reader.objectsRead - before);

            this.lastInternedResult = reader.Read <int>();

            //Console.Error.WriteLine("% LIT.lastInternedResult read {0} objects", reader.objectsRead - before);
        }
Ejemplo n.º 27
0
        protected override void Restore(NaiadReader reader)
        {
            base.Restore(reader);
            this.isShutdown = reader.Read <bool>();

            if (!this.isShutdown)
            {
                this.internTable.Restore(reader);
                this.inputTrace1.Restore(reader);
                this.inputTrace2.Restore(reader);
                this.outputTrace.Restore(reader);

                this.keyIndices.Restore(reader);

                this.Input1.Restore(reader);
                this.Input2.Restore(reader);

                /*
                 * int recordsToProcessCount1 = reader.Read<int>(PrimitiveSerializers.Int32);
                 *
                 * foreach (NaiadList<Weighted<S1>> recordList in this.recordsToProcess1.Values)
                 *  recordList.Free();
                 * this.recordsToProcess1.Clear();
                 *
                 * for (int i = 0; i < recordsToProcessCount1; ++i)
                 * {
                 *  T key = reader.Read<T>(timeSerializer);
                 *  NaiadList<Weighted<S1>> value = new NaiadList<Weighted<S1>>();
                 *  value.Restore(reader, weightedS1Serializer);
                 *  this.recordsToProcess1[key] = value;
                 * }
                 *
                 * int recordsToProcessCount2 = reader.Read<int>(PrimitiveSerializers.Int32);
                 *
                 * foreach (NaiadList<Weighted<S2>> recordList in this.recordsToProcess2.Values)
                 *  recordList.Free();
                 * this.recordsToProcess2.Clear();
                 *
                 * for (int i = 0; i < recordsToProcessCount2; ++i)
                 * {
                 *  T key = reader.Read<T>(timeSerializer);
                 *  NaiadList<Weighted<S2>> value = new NaiadList<Weighted<S2>>();
                 *  value.Restore(reader, weightedS2Serializer);
                 *  this.recordsToProcess2[key] = value;
                 * }
                 */
            }
        }
Ejemplo n.º 28
0
        public override void Restore(NaiadReader reader)
        {
            base.Restore(reader);
            this.isShutdown = reader.Read <bool>(PrimitiveSerializers.Bool);

            if (!this.isShutdown)
            {
                if (timeSerializer == null)
                {
                    timeSerializer = AutoSerialization.GetSerializer <T>();
                }
                if (keySerializer == null)
                {
                    keySerializer = AutoSerialization.GetSerializer <K>();
                }
                if (weightedSSerializer == null)
                {
                    weightedSSerializer = AutoSerialization.GetSerializer <Weighted <S> >();
                }

                this.internTable.Restore(reader, timeSerializer);
                this.inputTrace.Restore(reader);
                this.outputTrace.Restore(reader);

                this.keyIndices.Restore(reader, keySerializer, UnaryKeyIndices.Serializer);
                this.keysToProcess.Restore(reader, keySerializer);

                this.Input.Restore(reader);

                /*
                 * int recordsToProcessCount = reader.Read<int>(PrimitiveSerializers.Int32);
                 *
                 * foreach (NaiadList<Weighted<S>> recordList in this.recordsToProcess.Values)
                 *  recordList.Free();
                 * this.recordsToProcess.Clear();
                 *
                 * for (int i = 0; i < recordsToProcessCount; ++i)
                 * {
                 *  T key = reader.Read<T>(timeSerializer);
                 *  NaiadList<Weighted<S>> value = new NaiadList<Weighted<S>>();
                 *  value.Restore(reader, weightedSSerializer);
                 *  this.recordsToProcess[key] = value;
                 * }
                 */
            }
        }
Ejemplo n.º 29
0
        public void Restore(NaiadReader reader)
        {
            bool isMutable = reader.Read <bool>();

            if (isMutable)
            {
                int headsCount = reader.Read <int>();
                this.heads = new List <int>(headsCount);
                for (int i = 0; i < headsCount; ++i)
                {
                    this.heads.Add(reader.Read <int>());
                }

                int linksCount = reader.Read <int>();
                //this.links = new List<Naiad.Pair<R, int>>(linksCount);
                this.links = new SpinedList <Microsoft.Research.Naiad.Pair <R, int> >();
                for (int i = 0; i < linksCount; ++i)
                {
                    this.links.Add(reader.Read <Microsoft.Research.Naiad.Pair <R, int> >());
                }
            }
            else
            {
                int offsetsLength = reader.Read <int>();
                offsets = new int[offsetsLength];
                for (int i = 0; i < offsets.Length; ++i)
                {
                    offsets[i] = reader.Read <int>();
                }

                int dataLength = reader.Read <int>();
                data = new R[dataLength];
                for (int i = 0; i < data.Length; ++i)
                {
                    data[i] = reader.Read <R>();
                }
            }
        }