예제 #1
0
 /// <summary>
 /// Initialize.
 /// </summary>
 /// <param name="file"></param>
 /// <param name="dataBlocksMruManager"></param>
 /// <param name="name"></param>
 /// <param name="extraParams"></param>
 protected void Initialize(File.IFile file, string name,
                           params KeyValuePair <string, object>[] extraParams)
 {
     this.Name = name;
     KeyValuePair <string, object>[] p = extraParams;
     Initialize(file, p);
 }
예제 #2
0
 public ConcurrentBTreeAlgorithm(File.IFile file,
                                 System.Collections.IComparer comparer = null,
                                 string name = null,
                                 DataBlock.IDataBlockDriver dataBlockDriver = null,
                                 bool isDataInKeySegment = true)
 {
     Collection = new Algorithm.BTree.BTreeAlgorithm(file, comparer, name, dataBlockDriver, isDataInKeySegment);
 }
예제 #3
0
 public BTreeAlgorithm(File.IFile file,
                       IComparer comparer,
                       string name,
                       IDataBlockDriver dataBlockDriver
                       )
     : this(file, comparer, name, null, false)
 {
 }
예제 #4
0
 public ConcurrentIOData GetInstance(File.IFile f, long size = 0)
 {
     if (f.Server != null && f.Server.Transaction != null)
     {
         return(GetInstance(f.Filename,
                            (TransactionRoot)
                            ((TransactionBase)f.Server.Transaction).Root, size));
     }
     return(GetInstance(f.Filename, null, size));
 }
예제 #5
0
 /// <summary>
 /// Returns the File object with its Name equal to Name argument
 /// </summary>
 /// <param name="name"></param>
 /// <returns></returns>
 public IFile GetFile(string name)
 {
     File.IFile r = (File.IFile)SystemFile;
     if (r.Name == name || r.Filename == name)
     {
         return(r);
     }
     r = (File.IFile)FileSet[name];
     if (r == null)
     {
         string s = NormalizePath(name);
         r = (File.IFile)FileSet[s];
     }
     return(r);
 }
예제 #6
0
        public IndexedBlockRecycler(
            File.IFile file, IComparer comparer, string name
            )
        {
            IsDataLongInt = true;
            var param = new[]
            {
                new KeyValuePair <string, object>("Comparer", comparer),
                new KeyValuePair <string, object>("DataBlockDriver", null)
            };

            Name = name;
            Initialize(file, param);
            _segmentSize = file.CollectionGrowthSizeInNob * (int)DataBlockSize;
        }
예제 #7
0
        /// <summary>
        /// Serialize an Object to the target DataBlock
        /// </summary>
        /// <param name="file"></param>
        /// <param name="value"></param>
        /// <param name="dataBlock"></param>
        public void WriteObject(File.IFile file, object value, Sop.DataBlock dataBlock)
        {
            if (value == null)
            {
                throw new ArgumentNullException("value");
            }

            this.DataBlock = dataBlock;
            if (value is IInternalPersistent)
            {
                ((IInternalPersistent)value).Pack(file, this);
            }
            else
            {
                _serializer.Serialize(this.BaseStream, value);
                this.Write(_buffer.GetBuffer(), 0, (int)this.BaseStream.Position);
            }
        }
예제 #8
0
        protected internal override void Initialize(File.IFile file, params KeyValuePair <string, object>[] parameters)
        {
            base.Initialize(file, parameters);
            if (FirstItem == null)
            {
                FirstItem = new LinkedItemOnDisk(file.DataBlockSize);
            }
            if (CurrentItem == null)
            {
                CurrentItem = FirstItem;
            }
            if (LastItem == null)
            {
                LastItem = new LinkedItemOnDisk(file.DataBlockSize);
            }

            //** don't call open here, let caller code do it to ensure proper "state" when Open is called!!
        }
예제 #9
0
        public BTreeAlgorithm(File.IFile file,
                              IComparer comparer,
                              string name,
                              IDataBlockDriver dataBlockDriver,
                              bool isDataInKeySegment
                              )
        {
            this.Name = name;
            var p = new[]
            {
                new KeyValuePair <string, object>("comparer", comparer),
                new KeyValuePair <string, object>("DataBlockDriver",
                                                  dataBlockDriver)
            };

            IsDataInKeySegment = isDataInKeySegment;
            Initialize(file, p);
        }
예제 #10
0
 public LinkedListOnDisk(File.IFile container) : this(container, string.Empty)
 {
 }
예제 #11
0
 public SharedBlockOnDiskList(File.IFile container,
                              params KeyValuePair <string, object>[] extraParams)
     : base(container, string.Empty, extraParams)
 {
 }
예제 #12
0
 public SharedBlockOnDiskList(File.IFile container) : base(container)
 {
 }
예제 #13
0
 /// <summary>
 /// Create Dictionary On Disk
 /// </summary>
 /// <param name="file"></param>
 /// <returns></returns>
 public static Algorithm.SortedDictionary.ISortedDictionaryOnDisk CreateDictionaryOnDisk(File.IFile file)
 {
     return(CreateDictionaryOnDisk(file, new BTreeDefaultComparer()));
 }
예제 #14
0
 /// <summary>
 /// Create Dictionary On Disk
 /// </summary>
 /// <param name="file"></param>
 /// <param name="comparer"></param>
 /// <returns></returns>
 public static Algorithm.SortedDictionary.ISortedDictionaryOnDisk CreateDictionaryOnDisk(File.IFile file, IComparer comparer)
 {
     return(CreateDictionaryOnDisk(file, comparer, string.Empty, file.Profile.IsDataInKeySegment));
 }
예제 #15
0
 public BTreeAlgorithm(File.IFile file, IComparer comparer)
     : this(file, comparer, string.Empty)
 {
 }
예제 #16
0
        /// <summary>
        /// Initialize. NOTE: this function doesn't open the file.
        /// </summary>
        /// <param name="file"></param>
        /// <param name="parameters"> </param>
        protected internal virtual void Initialize(File.IFile file, params KeyValuePair <string, object>[] parameters)
        {
            if (file == null)
            {
                throw new ArgumentNullException("file");
            }

            if (transaction == null ||
                (transaction is Transaction.Transaction &&
                 ((Transaction.Transaction)transaction).Server != file.Server))
            {
                Transaction.ITransactionLogger trans = file.Transaction;
                if (trans != null)
                {
                    trans = ((Transaction.TransactionBase)trans).GetLeafChild();
                }
                if (trans == null ||
                    trans is Transaction.Transaction)
                {
                    transaction = trans;
                }
            }

            if (string.IsNullOrEmpty(this.Name))
            {
                var f = new FileInfo(file.Filename);
                Name = string.Format("{0} Collection {1}", f.Name, ((Sop.OnDisk.File.File)file).GetNewStoreId());
            }
            if (MruMinCapacity == 0)
            {
                MruMinCapacity = file.Profile.MruMinCapacity;
            }
            if (MruMaxCapacity == 0)
            {
                MruMaxCapacity = file.Profile.MruMaxCapacity;
            }

            if (File == null)
            {
                File = file;
            }
            if (DataBlockSize == DataBlockSize.Unknown)
            {
                DataBlockSize = file.DataBlockSize;
            }
            HeaderData hd = null;

            if (parameters != null && parameters.Length > 0)
            {
                foreach (KeyValuePair <string, object> o in parameters)
                {
                    switch (o.Key)
                    {
                    case "HasMruSegments":
                        break;

                    case "HeaderData":
                        hd = (HeaderData)o.Value;
                        break;

                    default:
                        if (o.Key == "DataBlockDriver" && o.Value != null)
                        {
                            DataBlockDriver = (IDataBlockDriver)o.Value;
                        }
                        break;
                    }
                }
            }
            if (DataBlockDriver == null)
            {
                DataBlockDriver = new DataBlockDriver(this, hd);
            }
            else
            {
                if (DataBlockDriver.HeaderData == null)
                {
                    DataBlockDriver.HeaderData = hd ?? new HeaderData(DataBlockSize);
                }
            }
            if (MruManager == null)
            {
                int min = MruMinCapacity;
                int max = MruMaxCapacity;

                //MruManager = new ConcurrentMruManager(min, max);
                MruManager = new MruManager(min, max);

                MruManager.SetDataStores(this, DataBlockDriver);
            }
            if (_diskBuffer == null)
            {
                _diskBuffer = CreateBlock(); //new Sop.DataBlock(DataBlockSize);
            }
        }
예제 #17
0
 public virtual void Initialize(File.IFile file)
 {
     RealDictionary.Initialize(file);
 }
예제 #18
0
 public BTreeAlgorithm(File.IFile file)
     : this(file, new BTreeDefaultComparer())
 {
 }
예제 #19
0
 public FileRecycler(File.IFile file)
     : base(file, new BTreeDefaultComparer())
 {
 }
예제 #20
0
 public static Algorithm.SortedDictionary.ISortedDictionaryOnDisk CreateDictionaryOnDisk(File.IFile file, string name)
 {
     return(CreateDictionaryOnDisk(file, null, name, file.Profile.IsDataInKeySegment));
 }
예제 #21
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="file"></param>
 /// <param name="dataBlocksMruManager"></param>
 protected CollectionOnDisk(File.IFile file)
 {
     Initialize(file, string.Empty);
 }
예제 #22
0
 public LinkedListOnDisk(File.IFile container, string name,
                         params KeyValuePair <string, object>[] extraParams)
 {
     Initialize(container, name, extraParams);
 }
예제 #23
0
 public BTreeAlgorithm(File.IFile file,
                       IComparer comparer,
                       string name)
     : this(file, comparer, name, null)
 {
 }
예제 #24
0
 public SdodWrapper(File.IFile file, System.Collections.IComparer comparer, string name,
                    bool isDataInKeySegment)
 {
     RealDictionary = new SortedDictionaryOnDisk(file, comparer, name, isDataInKeySegment);
 }
예제 #25
0
 /// <summary>
 /// Create Dictionary On Disk
 /// </summary>
 /// <param name="file"></param>
 /// <param name="comparer"></param>
 /// <param name="name"></param>
 /// <param name="isDataInKeySegment"> </param>
 /// <returns></returns>
 public static Algorithm.SortedDictionary.ISortedDictionaryOnDisk CreateDictionaryOnDisk(File.IFile file, IComparer comparer, string name,
                                                                                         bool isDataInKeySegment)
 {
     return
         ((Algorithm.SortedDictionary.ISortedDictionaryOnDisk)
          ObjectFactory.Instance.GetDictionaryOnDisk(file, comparer, name, isDataInKeySegment));
 }