コード例 #1
0
            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());
                }
            }
コード例 #2
0
            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);
            }