mirror of
https://github.com/Prowlarr/Prowlarr.git
synced 2025-09-17 17:14:18 +02:00
Added db4o.
Added guards against most problematic areas.
This commit is contained in:
116
NzbDrone.Core/Datastore/NoCahceRefrenceSystem.cs
Normal file
116
NzbDrone.Core/Datastore/NoCahceRefrenceSystem.cs
Normal file
@@ -0,0 +1,116 @@
|
||||
using System.Linq;
|
||||
using Db4objects.Db4o;
|
||||
using Db4objects.Db4o.Foundation;
|
||||
using Db4objects.Db4o.Internal;
|
||||
using Db4objects.Db4o.Internal.References;
|
||||
|
||||
namespace NzbDrone.Core.Datastore
|
||||
{
|
||||
public class NoCahceRefrenceSystem : IReferenceSystem
|
||||
{
|
||||
private ObjectReference _hashCodeTree;
|
||||
private ObjectReference _idTree;
|
||||
|
||||
internal NoCahceRefrenceSystem()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public virtual void AddNewReference(ObjectReference @ref)
|
||||
{
|
||||
AddReference(@ref);
|
||||
}
|
||||
|
||||
public virtual void AddExistingReference(ObjectReference @ref)
|
||||
{
|
||||
AddReference(@ref);
|
||||
}
|
||||
|
||||
public virtual void Commit()
|
||||
{
|
||||
Reset();
|
||||
}
|
||||
|
||||
|
||||
|
||||
public virtual ObjectReference ReferenceForId(int id)
|
||||
{
|
||||
if (DTrace.enabled)
|
||||
DTrace.GetYapobject.Log(id);
|
||||
if (_idTree == null)
|
||||
return null;
|
||||
if (!ObjectReference.IsValidId(id))
|
||||
return null;
|
||||
else
|
||||
return _idTree.Id_find(id);
|
||||
}
|
||||
|
||||
public virtual ObjectReference ReferenceForObject(object obj)
|
||||
{
|
||||
if (_hashCodeTree == null)
|
||||
return null;
|
||||
else
|
||||
return _hashCodeTree.Hc_find(obj);
|
||||
}
|
||||
|
||||
public virtual void RemoveReference(ObjectReference @ref)
|
||||
{
|
||||
if (DTrace.enabled)
|
||||
DTrace.ReferenceRemoved.Log(@ref.GetID());
|
||||
if (_hashCodeTree != null)
|
||||
_hashCodeTree = _hashCodeTree.Hc_remove(@ref);
|
||||
if (_idTree == null)
|
||||
return;
|
||||
_idTree = _idTree.Id_remove(@ref);
|
||||
}
|
||||
|
||||
public virtual void Rollback()
|
||||
{
|
||||
Reset();
|
||||
}
|
||||
|
||||
public virtual void TraverseReferences(IVisitor4 visitor)
|
||||
{
|
||||
if (_hashCodeTree == null)
|
||||
return;
|
||||
_hashCodeTree.Hc_traverse(visitor);
|
||||
}
|
||||
|
||||
public virtual void Discarded()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
public void Reset()
|
||||
{
|
||||
_hashCodeTree = null;
|
||||
_idTree = null;
|
||||
}
|
||||
|
||||
private void AddReference(ObjectReference @ref)
|
||||
{
|
||||
@ref.Ref_init();
|
||||
IdAdd(@ref);
|
||||
HashCodeAdd(@ref);
|
||||
}
|
||||
|
||||
private void HashCodeAdd(ObjectReference @ref)
|
||||
{
|
||||
if (_hashCodeTree == null)
|
||||
_hashCodeTree = @ref;
|
||||
else
|
||||
_hashCodeTree = _hashCodeTree.Hc_add(@ref);
|
||||
}
|
||||
|
||||
private void IdAdd(ObjectReference @ref)
|
||||
{
|
||||
if (DTrace.enabled)
|
||||
DTrace.IdTreeAdd.Log(@ref.GetID());
|
||||
if (_idTree == null)
|
||||
_idTree = @ref;
|
||||
else
|
||||
_idTree = _idTree.Id_add(@ref);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user