BTDB.ChunkCache.DiskChunkCache.Put C# (CSharp) Method

Put() public method

public Put ( ByteBuffer key, ByteBuffer content ) : void
key ByteBuffer
content ByteBuffer
return void
        public void Put(ByteBuffer key, ByteBuffer content)
        {
            if (key.Length != _keySize) throw new ArgumentException("Key has wrong Length not equal to KeySize");
            if (content.Length == 0) throw new ArgumentException("Empty Content cannot be stored");
            var k = new ByteStructs.Key20(key);
            CacheValue cacheValue;
            if (_cache.TryGetValue(k, out cacheValue))
            {
                return;
            }
            cacheValue.AccessRate = 1;
            again:
            var writer = _cacheValueWriter;
            while (writer == null || writer.GetCurrentPosition() + content.Length > _sizeLimitOfOneValueFile)
            {
                StartNewValueFile();
                writer = _cacheValueWriter;
            }
            lock (writer)
            {
                if (writer != _cacheValueWriter) goto again;
                cacheValue.FileId = _cacheValueFileId;
                cacheValue.FileOfs = (uint)_cacheValueWriter.GetCurrentPosition();
                _cacheValueWriter.WriteBlock(content);
            }
            cacheValue.ContentLength = (uint)content.Length;
            _cache.TryAdd(k, cacheValue);
        }

Usage Example

Example #1
0
 public void WhatIPutICanGet()
 {
     using (var fileCollection = new InMemoryFileCollection())
     using (var cache = new DiskChunkCache(fileCollection, 20, 1000))
     {
         cache.Put(CalcHash(new byte[] { 0 }), ByteBuffer.NewAsync(new byte[] { 1 }));
         Assert.AreEqual(new byte[] { 1 }, cache.Get(CalcHash(new byte[] { 0 })).Result.ToByteArray());
     }
 }
All Usage Examples Of BTDB.ChunkCache.DiskChunkCache::Put