public void Read(BinaryReader reader) { for (var i = 0; i < BucketSize; i++) { _keys[i] = new DateTime(reader.ReadInt64()); } for (var i = 0; i < BucketSize; i++) { _values[i] = new OffsetCount(reader.ReadInt64(), reader.ReadInt32()); } }
public bool Add(DateTime dateTime, long offset) { if (dateTime == DefaultKey) { throw new ArgumentException("invalid date time"); } var key = new DateTime(dateTime.Year, dateTime.Month, dateTime.Day); var hash = HashKey(key); var index = hash & Mask; var found = false; var oldIndex = index; while (_keys[index] != DefaultKey) { if (_keys[index] == key) { found = true; break; } hash++; index = hash & Mask; if (oldIndex == index) { throw new InvalidOperationException("Unexpected collision is detected in DateTimeToOffsetMap."); } } if (found) { var old = _values[index]; _values[index] = new OffsetCount(old.Offset, old.Count + 1); } else { _keys[index] = key; _values[index] = new OffsetCount(offset, 1); _fileHeader.MarkAsDirty(true); } return(!found); }