public override T[] Deserialize(ref byte[] bytes, int offset, DirtyTracker tracker, out int byteSize) { tracker.Dirty(); // can not track so mark as dirty. var length = BinaryUtil.ReadInt32(ref bytes, offset); if (length == -1) { byteSize = 4; return(null); } var startOffset = offset; offset += 4; int size; BinaryUtil.ValidateNewSize(length); // size is not strict(Marshal.SizeOf<T>()) but okay to use. var result = new T[length]; for (int i = 0; i < length; i++) { result[i] = formatter.Deserialize(ref bytes, offset, tracker, out size); offset += size; } byteSize = offset - startOffset; return(result); }
public override ISet <T> Deserialize(ref byte[] bytes, int offset, DirtyTracker tracker, out int byteSize) { tracker.Dirty(); // can not track so mark as dirty. var length = BinaryUtil.ReadInt32(ref bytes, offset); if (length == -1) { byteSize = 4; return(null); } BinaryUtil.ValidateNewSize(length); // size is not strict(Marshal.SizeOf<T>()) but okay to use. var startOffset = offset; offset += 4; int size; var comparer = ZeroFormatterEqualityComparer <T> .NondeterministicSafeFallbacked; var result = new HashSet <T>(comparer); for (int i = 0; i < length; i++) { result.Add(formatter.Deserialize(ref bytes, offset, tracker, out size)); offset += size; } byteSize = offset - startOffset; return(result); }
public override ICollection <T> Deserialize(ref byte[] bytes, int offset, DirtyTracker tracker, out int byteSize) { tracker.Dirty(); // can not track so mark as dirty. var length = BinaryUtil.ReadInt32(ref bytes, offset); if (length == -1) { byteSize = 4; return(null); } ZeroFormatterSerializer.ValidateNewLength(length); var startOffset = offset; offset += 4; int size; var result = new T[length]; for (int i = 0; i < length; i++) { result[i] = formatter.Deserialize(ref bytes, offset, tracker, out size); offset += size; } byteSize = offset - startOffset; return(result); }
public override IDictionary <TKey, TValue> Deserialize(ref byte[] bytes, int offset, DirtyTracker tracker, out int byteSize) { tracker.Dirty(); // can not track so mark as dirty. var length = BinaryUtil.ReadInt32(ref bytes, offset); if (length == -1) { byteSize = 4; return(null); } ZeroFormatterSerializer.ValidateNewLength(length); var startOffset = offset; offset += 4; int size; var comparer = ZeroFormatterEqualityComparer <TKey> .NondeterministicSafeFallbacked; var result = new Dictionary <TKey, TValue>(length, comparer); for (int i = 0; i < length; i++) { var kvp = formatter.Deserialize(ref bytes, offset, tracker, out size); result.Add(kvp.Key, kvp.Value); offset += size; } byteSize = offset - startOffset; return(result); }
public override Int32[] Deserialize(ref byte[] bytes, int offset, DirtyTracker tracker, out int byteSize) { tracker.Dirty(); // can not track so mark as dirty. var length = BinaryUtil.ReadInt32(ref bytes, offset); if (length == -1) { byteSize = 4; return(null); } else { byteSize = length * 4 + 4; } var arraySize = length * 4; ZeroFormatterSerializer.ValidateNewLength(arraySize); var result = new Int32[length]; Buffer.BlockCopy(bytes, offset + 4, result, 0, arraySize); return(result); }
public override TCollection Deserialize(ref byte[] bytes, int offset, DirtyTracker tracker, out int byteSize) { tracker.Dirty(); // can not track so mark as dirty. var length = BinaryUtil.ReadInt32(ref bytes, offset); if (length == -1) { byteSize = 4; return(default(TCollection)); } var startOffset = offset; offset += 4; int size; BinaryUtil.ValidateNewSize(length); // size is not strict(Marshal.SizeOf<T>()) but okay to use. TCollection result; if (isList) { // optmize fixed length. result = (TCollection)(object)new List <TElement>(length); } else { result = new TCollection(); } for (int i = 0; i < length; i++) { result.Add(formatter.Deserialize(ref bytes, offset, tracker, out size)); offset += size; } byteSize = offset - startOffset; return(result); }
public override Char[] Deserialize(ref byte[] bytes, int offset, DirtyTracker tracker, out int byteSize) { tracker.Dirty(); // can not track so mark as dirty. var length = BinaryUtil.ReadInt32(ref bytes, offset); if (length == -1) { byteSize = 4; return(null); } else { byteSize = length * 2 + 4; } BinaryUtil.ValidateNewSize(length * 2); var result = new Char[length]; Buffer.BlockCopy(bytes, offset + 4, result, 0, length * 2); return(result); }