ln.objects/ng/storage/bases/StorageBase.cs

61 lines
1.4 KiB
C#

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<Guid> lockedDocuments = new BTree<Guid>();
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<Guid> GetDocumentIDs();
public abstract IEnumerable<Guid> GetDocumentIDs(string path, Predicate<ODBEntity> 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; }
}
}