using System; using System.Collections.Generic; using System.Linq; using ln.types.btree; using System.Threading; using System.Runtime.ConstrainedExecution; using ln.types.threads; using ln.objects.catalog; namespace ln.types.odb.ng.storage.bases { public abstract class StorageBase : IStorage { BTree lockedDocuments = new BTree(); public StorageBase() { } public abstract bool Open(); public abstract void Close(); public abstract bool IsOpen { get; } public abstract Document Load(Guid documentID); public abstract void Save(Document document); public abstract void Delete(Guid documentID); public virtual DateTime GetStorageTimestamp(Guid documentID) { Document doc = Load(documentID); return doc.StorageTimeStamp; } /* Enumeration */ public abstract IEnumerable GetDocumentIDs(); public abstract IEnumerable GetDocumentIDs(string path, Predicate predicate); /* Indeces */ public abstract void EnsureIndex(params string[] path); public virtual void Dispose() { if (IsOpen) Close(); } public virtual bool Contains(Guid documentID) { return GetDocumentIDs().Contains(documentID); } public virtual IDisposable Lock() { return new DisposableLock(this); } public abstract bool Refresh(Document document); public abstract bool IsCaching { get; } } }