PkmnLibRSharp/PkmnLibRSharp/Utils/BasePointer.cs

70 lines
1.6 KiB
C#

using System;
using PkmnLibSharp.FFI;
namespace PkmnLibSharp.Utils
{
public abstract class BasePointer<TCache> : IDisposable
where TCache : class
{
private IntPtr _ptr;
private ulong _identifier;
private TCache? _cache;
protected BasePointer()
{
}
protected BasePointer(IntPtr ptr, ulong identifier = 0)
{
_ptr = ptr;
_identifier = identifier;
}
protected BasePointer(IdentifiablePointer ptr)
{
_ptr = ptr.Ptr;
_identifier = ptr.Identifier;
}
protected internal void InitializePointer(IntPtr ptr, ulong identifier = 0)
{
_ptr = ptr;
_identifier = identifier;
}
protected internal void InitializePointer(IdentifiablePointer ptr)
{
_ptr = ptr.Ptr;
_identifier = ptr.Identifier;
}
protected internal ulong Identifier => _identifier;
internal virtual IntPtr Ptr => _ptr;
protected abstract TCache CreateCache();
internal TCache Cache
{
get
{
if (_cache == null && _identifier != 0)
{
_cache = CacheHandler.GetCache<TCache>(_identifier, CreateCache);
}
return _cache!;
}
}
protected bool HasCache => _cache != null;
protected abstract void Destructor();
public virtual void Dispose()
{
}
}
}