70 lines
1.6 KiB
C#
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()
|
|
{
|
|
|
|
}
|
|
}
|
|
} |