diff --git a/PkmnLibRSharp/FFI/IdentifiablePointer.cs b/PkmnLibRSharp/FFI/IdentifiablePointer.cs
new file mode 100644
index 0000000..416067a
--- /dev/null
+++ b/PkmnLibRSharp/FFI/IdentifiablePointer.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Runtime.InteropServices;
+
+namespace PkmnLibSharp.FFI
+{
+ [StructLayout(LayoutKind.Sequential)]
+ public struct IdentifiablePointer
+ {
+ public readonly IntPtr Ptr;
+ public readonly nuint Identifier;
+ }
+}
\ No newline at end of file
diff --git a/PkmnLibRSharp/FFI/StaticData/Ability.cs b/PkmnLibRSharp/FFI/StaticData/Ability.cs
index 9113d63..049adf8 100644
--- a/PkmnLibRSharp/FFI/StaticData/Ability.cs
+++ b/PkmnLibRSharp/FFI/StaticData/Ability.cs
@@ -6,7 +6,7 @@ namespace PkmnLibSharp.FFI.StaticData
internal static class Ability
{
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
- internal static extern IntPtr ability_new(IntPtr name, IntPtr effect, IntPtr parameters, ulong size);
+ internal static extern IdentifiablePointer ability_new(IntPtr name, IntPtr effect, IntPtr parameters, ulong size);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
internal static extern void ability_drop(IntPtr value);
@@ -21,6 +21,6 @@ namespace PkmnLibSharp.FFI.StaticData
internal static extern ulong ability_parameter_length(IntPtr value);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
- internal static extern IntPtr ability_parameter_get(IntPtr value, ulong index);
+ internal static extern IdentifiablePointer ability_parameter_get(IntPtr value, ulong index);
}
}
\ No newline at end of file
diff --git a/PkmnLibRSharp/FFI/StaticData/EffectParameter.cs b/PkmnLibRSharp/FFI/StaticData/EffectParameter.cs
index 98089ad..1df4c04 100644
--- a/PkmnLibRSharp/FFI/StaticData/EffectParameter.cs
+++ b/PkmnLibRSharp/FFI/StaticData/EffectParameter.cs
@@ -6,16 +6,16 @@ namespace PkmnLibSharp.FFI.StaticData
internal static class EffectParameter
{
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl)]
- internal static extern IntPtr effect_parameter_new_bool(byte value);
+ internal static extern IdentifiablePointer effect_parameter_new_bool(byte value);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl)]
- internal static extern IntPtr effect_parameter_new_int(long value);
+ internal static extern IdentifiablePointer effect_parameter_new_int(long value);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl)]
- internal static extern IntPtr effect_parameter_new_float(float value);
+ internal static extern IdentifiablePointer effect_parameter_new_float(float value);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
- internal static extern IntPtr effect_parameter_new_string(IntPtr value);
+ internal static extern IdentifiablePointer effect_parameter_new_string(IntPtr value);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl)]
internal static extern void effect_parameter_drop(IntPtr value);
diff --git a/PkmnLibRSharp/FFI/StaticData/Form.cs b/PkmnLibRSharp/FFI/StaticData/Form.cs
index 719b032..06c3df9 100644
--- a/PkmnLibRSharp/FFI/StaticData/Form.cs
+++ b/PkmnLibRSharp/FFI/StaticData/Form.cs
@@ -7,14 +7,14 @@ namespace PkmnLibSharp.FFI.StaticData
internal static class Form
{
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl)]
- internal static extern IntPtr form_new(IntPtr name, float height, float weight, uint baseExperience,
- IntPtr types, ulong typesLength, IntPtr baseStats, IntPtr abilities, ulong abilitiesLength,
- IntPtr hiddenAbilities, ulong hiddenAbilitiesLength, IntPtr learnableMoves, IntPtr flags,
- ulong flagsLength);
+ internal static extern IdentifiablePointer form_new(IntPtr name, float height, float weight,
+ uint baseExperience, IntPtr types, ulong typesLength, IntPtr baseStats, IntPtr abilities,
+ ulong abilitiesLength, IntPtr hiddenAbilities, ulong hiddenAbilitiesLength, IntPtr learnableMoves,
+ IntPtr flags, ulong flagsLength);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl)]
internal static extern void form_drop(IntPtr ptr);
-
+
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl)]
internal static extern IntPtr form_name(IntPtr ptr);
@@ -34,7 +34,7 @@ namespace PkmnLibSharp.FFI.StaticData
internal static extern TypeIdentifier form_types_get(IntPtr ptr, ulong index);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl)]
- internal static extern IntPtr form_base_stats(IntPtr ptr);
+ internal static extern IdentifiablePointer form_base_stats(IntPtr ptr);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl)]
internal static extern ulong form_abilities_length(IntPtr ptr);
diff --git a/PkmnLibRSharp/FFI/StaticData/Item.cs b/PkmnLibRSharp/FFI/StaticData/Item.cs
index 53f66f5..7d59461 100644
--- a/PkmnLibRSharp/FFI/StaticData/Item.cs
+++ b/PkmnLibRSharp/FFI/StaticData/Item.cs
@@ -7,7 +7,7 @@ namespace PkmnLibSharp.FFI.StaticData
internal static class Item
{
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl)]
- internal static extern IntPtr item_new(IntPtr name, ItemCategory category, BattleItemCategory battleCategory,
+ internal static extern IdentifiablePointer item_new(IntPtr name, ItemCategory category, BattleItemCategory battleCategory,
int price, IntPtr flags, ulong flagsLength);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl)]
diff --git a/PkmnLibRSharp/FFI/StaticData/Libraries/AbilityLibrary.cs b/PkmnLibRSharp/FFI/StaticData/Libraries/AbilityLibrary.cs
index bf8a90d..cb122a4 100644
--- a/PkmnLibRSharp/FFI/StaticData/Libraries/AbilityLibrary.cs
+++ b/PkmnLibRSharp/FFI/StaticData/Libraries/AbilityLibrary.cs
@@ -6,13 +6,13 @@ namespace PkmnLibSharp.FFI.StaticData.Libraries
internal static class AbilityLibrary
{
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
- internal static extern IntPtr ability_library_new(ulong capacity);
+ internal static extern IdentifiablePointer ability_library_new(ulong capacity);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
internal static extern void ability_library_drop(IntPtr ptr);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
- internal static extern IntPtr ability_library_get(IntPtr ptr, IntPtr key);
+ internal static extern IdentifiablePointer ability_library_get(IntPtr ptr, IntPtr key);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
internal static extern IntPtr ability_library_get_key_by_index(IntPtr ptr, ulong index);
diff --git a/PkmnLibRSharp/FFI/StaticData/Libraries/GrowthRateLibrary.cs b/PkmnLibRSharp/FFI/StaticData/Libraries/GrowthRateLibrary.cs
index 43732e6..f112777 100644
--- a/PkmnLibRSharp/FFI/StaticData/Libraries/GrowthRateLibrary.cs
+++ b/PkmnLibRSharp/FFI/StaticData/Libraries/GrowthRateLibrary.cs
@@ -7,7 +7,7 @@ namespace PkmnLibSharp.FFI.StaticData.Libraries
internal static class GrowthRateLibrary
{
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
- internal static extern IntPtr growth_rate_library_new(ulong capacity);
+ internal static extern IdentifiablePointer growth_rate_library_new(ulong capacity);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
internal static extern void growth_rate_library_drop(IntPtr ptr);
diff --git a/PkmnLibRSharp/FFI/StaticData/Libraries/ItemLibrary.cs b/PkmnLibRSharp/FFI/StaticData/Libraries/ItemLibrary.cs
index 51b0dc4..462927b 100644
--- a/PkmnLibRSharp/FFI/StaticData/Libraries/ItemLibrary.cs
+++ b/PkmnLibRSharp/FFI/StaticData/Libraries/ItemLibrary.cs
@@ -6,13 +6,13 @@ namespace PkmnLibSharp.FFI.StaticData.Libraries
internal static class ItemLibrary
{
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
- internal static extern IntPtr item_library_new(ulong capacity);
+ internal static extern IdentifiablePointer item_library_new(ulong capacity);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
internal static extern void item_library_drop(IntPtr ptr);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
- internal static extern IntPtr item_library_get(IntPtr ptr, IntPtr key);
+ internal static extern IdentifiablePointer item_library_get(IntPtr ptr, IntPtr key);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
internal static extern IntPtr item_library_get_key_by_index(IntPtr ptr, ulong index);
diff --git a/PkmnLibRSharp/FFI/StaticData/Libraries/LibrarySettings.cs b/PkmnLibRSharp/FFI/StaticData/Libraries/LibrarySettings.cs
index e5259f2..e3f1475 100644
--- a/PkmnLibRSharp/FFI/StaticData/Libraries/LibrarySettings.cs
+++ b/PkmnLibRSharp/FFI/StaticData/Libraries/LibrarySettings.cs
@@ -7,7 +7,7 @@ namespace PkmnLibSharp.FFI.StaticData.Libraries
internal static class LibrarySettings
{
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
- internal static extern IntPtr library_settings_new(LevelInt maxLevel);
+ internal static extern IdentifiablePointer library_settings_new(LevelInt maxLevel);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
internal static extern void library_settings_drop(IntPtr ptr);
diff --git a/PkmnLibRSharp/FFI/StaticData/Libraries/MoveLibrary.cs b/PkmnLibRSharp/FFI/StaticData/Libraries/MoveLibrary.cs
index 68274f9..037673b 100644
--- a/PkmnLibRSharp/FFI/StaticData/Libraries/MoveLibrary.cs
+++ b/PkmnLibRSharp/FFI/StaticData/Libraries/MoveLibrary.cs
@@ -6,13 +6,13 @@ namespace PkmnLibSharp.FFI.StaticData.Libraries
internal static class MoveLibrary
{
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
- internal static extern IntPtr move_library_new(ulong capacity);
+ internal static extern IdentifiablePointer move_library_new(ulong capacity);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
internal static extern void move_library_drop(IntPtr ptr);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
- internal static extern IntPtr move_library_get(IntPtr ptr, IntPtr key);
+ internal static extern IdentifiablePointer move_library_get(IntPtr ptr, IntPtr key);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
internal static extern IntPtr move_library_get_key_by_index(IntPtr ptr, ulong index);
diff --git a/PkmnLibRSharp/FFI/StaticData/Libraries/NatureLibrary.cs b/PkmnLibRSharp/FFI/StaticData/Libraries/NatureLibrary.cs
index 83eb31d..f8cc953 100644
--- a/PkmnLibRSharp/FFI/StaticData/Libraries/NatureLibrary.cs
+++ b/PkmnLibRSharp/FFI/StaticData/Libraries/NatureLibrary.cs
@@ -6,7 +6,7 @@ namespace PkmnLibSharp.FFI.StaticData.Libraries
internal static class NatureLibrary
{
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
- internal static extern IntPtr nature_library_new(ulong capacity);
+ internal static extern IdentifiablePointer nature_library_new(ulong capacity);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
internal static extern void nature_library_drop(IntPtr ptr);
@@ -15,7 +15,7 @@ namespace PkmnLibSharp.FFI.StaticData.Libraries
internal static extern void nature_library_load_nature(IntPtr ptr, IntPtr name, IntPtr nature);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
- internal static extern IntPtr nature_library_get_nature(IntPtr ptr, IntPtr name);
+ internal static extern IdentifiablePointer nature_library_get_nature(IntPtr ptr, IntPtr name);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
internal static extern IntPtr nature_library_get_nature_name(IntPtr ptr, IntPtr nature);
diff --git a/PkmnLibRSharp/FFI/StaticData/Libraries/SpeciesLibrary.cs b/PkmnLibRSharp/FFI/StaticData/Libraries/SpeciesLibrary.cs
index 5ac5844..19eaacb 100644
--- a/PkmnLibRSharp/FFI/StaticData/Libraries/SpeciesLibrary.cs
+++ b/PkmnLibRSharp/FFI/StaticData/Libraries/SpeciesLibrary.cs
@@ -6,13 +6,13 @@ namespace PkmnLibSharp.FFI.StaticData.Libraries
internal static class SpeciesLibrary
{
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
- internal static extern IntPtr species_library_new(ulong capacity);
+ internal static extern IdentifiablePointer species_library_new(ulong capacity);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
internal static extern void species_library_drop(IntPtr ptr);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
- internal static extern IntPtr species_library_get(IntPtr ptr, IntPtr key);
+ internal static extern IdentifiablePointer species_library_get(IntPtr ptr, IntPtr key);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
internal static extern IntPtr species_library_get_key_by_index(IntPtr ptr, ulong index);
diff --git a/PkmnLibRSharp/FFI/StaticData/Libraries/StaticData.cs b/PkmnLibRSharp/FFI/StaticData/Libraries/StaticData.cs
index 2b5e955..bc185ba 100644
--- a/PkmnLibRSharp/FFI/StaticData/Libraries/StaticData.cs
+++ b/PkmnLibRSharp/FFI/StaticData/Libraries/StaticData.cs
@@ -6,33 +6,33 @@ namespace PkmnLibSharp.FFI.StaticData.Libraries
internal static class StaticData
{
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
- internal static extern IntPtr static_data_new(IntPtr settings);
+ internal static extern IdentifiablePointer static_data_new(IntPtr settings);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
internal static extern void static_data_drop(IntPtr ptr);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
- internal static extern IntPtr static_data_settings(IntPtr ptr);
+ internal static extern IdentifiablePointer static_data_settings(IntPtr ptr);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
- internal static extern IntPtr static_data_species(IntPtr ptr);
+ internal static extern IdentifiablePointer static_data_species(IntPtr ptr);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
- internal static extern IntPtr static_data_moves(IntPtr ptr);
+ internal static extern IdentifiablePointer static_data_moves(IntPtr ptr);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
- internal static extern IntPtr static_data_items(IntPtr ptr);
+ internal static extern IdentifiablePointer static_data_items(IntPtr ptr);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
- internal static extern IntPtr static_data_growth_rates(IntPtr ptr);
+ internal static extern IdentifiablePointer static_data_growth_rates(IntPtr ptr);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
- internal static extern IntPtr static_data_types(IntPtr ptr);
+ internal static extern IdentifiablePointer static_data_types(IntPtr ptr);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
- internal static extern IntPtr static_data_natures(IntPtr ptr);
+ internal static extern IdentifiablePointer static_data_natures(IntPtr ptr);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
- internal static extern IntPtr static_data_abilities(IntPtr ptr);
+ internal static extern IdentifiablePointer static_data_abilities(IntPtr ptr);
}
}
\ No newline at end of file
diff --git a/PkmnLibRSharp/FFI/StaticData/Libraries/TypeLibrary.cs b/PkmnLibRSharp/FFI/StaticData/Libraries/TypeLibrary.cs
index be6a126..0efacff 100644
--- a/PkmnLibRSharp/FFI/StaticData/Libraries/TypeLibrary.cs
+++ b/PkmnLibRSharp/FFI/StaticData/Libraries/TypeLibrary.cs
@@ -7,7 +7,7 @@ namespace PkmnLibSharp.FFI.StaticData.Libraries
internal static class TypeLibrary
{
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
- internal static extern IntPtr type_library_new(ulong capacity);
+ internal static extern IdentifiablePointer type_library_new(ulong capacity);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
internal static extern void type_library_drop(IntPtr ptr);
diff --git a/PkmnLibRSharp/FFI/StaticData/MoveData.cs b/PkmnLibRSharp/FFI/StaticData/MoveData.cs
index 109ad26..5f4a0cb 100644
--- a/PkmnLibRSharp/FFI/StaticData/MoveData.cs
+++ b/PkmnLibRSharp/FFI/StaticData/MoveData.cs
@@ -7,7 +7,7 @@ namespace PkmnLibSharp.FFI.StaticData
internal static class MoveData
{
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl)]
- internal static extern IntPtr move_data_new(IntPtr name, TypeIdentifier moveType, MoveCategory category,
+ internal static extern IdentifiablePointer move_data_new(IntPtr name, TypeIdentifier moveType, MoveCategory category,
byte basePower, byte accuracy, byte baseUsages, MoveTarget target, sbyte priority, IntPtr secondaryEffect,
IntPtr flags, ulong flagsLength);
@@ -39,14 +39,14 @@ namespace PkmnLibSharp.FFI.StaticData
internal static extern sbyte move_data_priority(IntPtr p);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl)]
- internal static extern IntPtr move_data_secondary_effect(IntPtr p);
+ internal static extern IdentifiablePointer move_data_secondary_effect(IntPtr p);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl)]
internal static extern byte move_data_has_flag(IntPtr p, IntPtr flag);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl)]
- internal static extern IntPtr secondary_effect_new(float chance, IntPtr effectName, IntPtr parameters,
+ internal static extern IdentifiablePointer secondary_effect_new(float chance, IntPtr effectName, IntPtr parameters,
ulong parametersLength);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl)]
@@ -62,6 +62,6 @@ namespace PkmnLibSharp.FFI.StaticData
internal static extern ulong secondary_effect_parameter_length(IntPtr p);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl)]
- internal static extern IntPtr secondary_effect_parameter_get(IntPtr p, ulong index);
+ internal static extern IdentifiablePointer secondary_effect_parameter_get(IntPtr p, ulong index);
}
}
\ No newline at end of file
diff --git a/PkmnLibRSharp/FFI/StaticData/Nature.cs b/PkmnLibRSharp/FFI/StaticData/Nature.cs
index 1ab4af5..13dc73d 100644
--- a/PkmnLibRSharp/FFI/StaticData/Nature.cs
+++ b/PkmnLibRSharp/FFI/StaticData/Nature.cs
@@ -7,7 +7,7 @@ namespace PkmnLibSharp.FFI.StaticData
internal static class Nature
{
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl)]
- internal static extern IntPtr nature_new(Statistic increaseStat, Statistic decreaseStat, float increaseModifier,
+ internal static extern IdentifiablePointer nature_new(Statistic increaseStat, Statistic decreaseStat, float increaseModifier,
float decreaseModifier);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl)]
diff --git a/PkmnLibRSharp/FFI/StaticData/Species.cs b/PkmnLibRSharp/FFI/StaticData/Species.cs
index 59dbd01..85a26b3 100644
--- a/PkmnLibRSharp/FFI/StaticData/Species.cs
+++ b/PkmnLibRSharp/FFI/StaticData/Species.cs
@@ -6,7 +6,7 @@ namespace PkmnLibSharp.FFI.StaticData
internal static class Species
{
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl)]
- internal static extern IntPtr species_new(ushort id, IntPtr name, float genderRate, IntPtr growthRate,
+ internal static extern IdentifiablePointer species_new(ushort id, IntPtr name, float genderRate, IntPtr growthRate,
byte captureRate, IntPtr defaultForm, IntPtr flags, ulong flagsLength);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl)]
@@ -31,7 +31,7 @@ namespace PkmnLibSharp.FFI.StaticData
internal static extern IntPtr species_add_form(IntPtr ptr, IntPtr name, IntPtr form);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl)]
- internal static extern IntPtr species_get_form(IntPtr ptr, IntPtr name);
+ internal static extern IdentifiablePointer species_get_form(IntPtr ptr, IntPtr name);
}
}
\ No newline at end of file
diff --git a/PkmnLibRSharp/FFI/StaticData/StaticStatisticSet.cs b/PkmnLibRSharp/FFI/StaticData/StaticStatisticSet.cs
index e3c0eb6..703f8d3 100644
--- a/PkmnLibRSharp/FFI/StaticData/StaticStatisticSet.cs
+++ b/PkmnLibRSharp/FFI/StaticData/StaticStatisticSet.cs
@@ -7,27 +7,27 @@ namespace PkmnLibSharp.FFI.StaticData
internal static class StaticStatisticSet
{
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
- internal static extern IntPtr static_statistic_set_u8_new(byte hp, byte attack, byte defense,
+ internal static extern IdentifiablePointer static_statistic_set_u8_new(byte hp, byte attack, byte defense,
byte specialAttack, byte specialDefense, byte speed);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
- internal static extern IntPtr static_statistic_set_u16_new(ushort hp, ushort attack, ushort defense,
+ internal static extern IdentifiablePointer static_statistic_set_u16_new(ushort hp, ushort attack, ushort defense,
ushort specialAttack, ushort specialDefense, ushort speed);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
- internal static extern IntPtr static_statistic_set_u32_new(uint hp, uint attack, uint defense,
+ internal static extern IdentifiablePointer static_statistic_set_u32_new(uint hp, uint attack, uint defense,
uint specialAttack, uint specialDefense, uint speed);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
- internal static extern IntPtr static_statistic_set_i8_new(sbyte hp, sbyte attack, sbyte defense,
+ internal static extern IdentifiablePointer static_statistic_set_i8_new(sbyte hp, sbyte attack, sbyte defense,
sbyte specialAttack, sbyte specialDefense, sbyte speed);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
- internal static extern IntPtr static_statistic_set_i16_new(short hp, short attack, short defense,
+ internal static extern IdentifiablePointer static_statistic_set_i16_new(short hp, short attack, short defense,
short specialAttack, short specialDefense, short speed);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
- internal static extern IntPtr static_statistic_set_i32_new(int hp, int attack, int defense, int specialAttack,
+ internal static extern IdentifiablePointer static_statistic_set_i32_new(int hp, int attack, int defense, int specialAttack,
int specialDefense, int speed);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
diff --git a/PkmnLibRSharp/FFI/StaticData/StatisticSet.cs b/PkmnLibRSharp/FFI/StaticData/StatisticSet.cs
index 0a9a260..0d207a2 100644
--- a/PkmnLibRSharp/FFI/StaticData/StatisticSet.cs
+++ b/PkmnLibRSharp/FFI/StaticData/StatisticSet.cs
@@ -7,27 +7,27 @@ namespace PkmnLibSharp.FFI.StaticData
internal static class StatisticSet
{
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
- internal static extern IntPtr statistic_set_u8_new(byte hp, byte attack, byte defense, byte specialAttack,
+ internal static extern IdentifiablePointer statistic_set_u8_new(byte hp, byte attack, byte defense, byte specialAttack,
byte specialDefense, byte speed);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
- internal static extern IntPtr statistic_set_u16_new(ushort hp, ushort attack, ushort defense,
+ internal static extern IdentifiablePointer statistic_set_u16_new(ushort hp, ushort attack, ushort defense,
ushort specialAttack, ushort specialDefense, ushort speed);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
- internal static extern IntPtr statistic_set_u32_new(uint hp, uint attack, uint defense, uint specialAttack,
+ internal static extern IdentifiablePointer statistic_set_u32_new(uint hp, uint attack, uint defense, uint specialAttack,
uint specialDefense, uint speed);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
- internal static extern IntPtr statistic_set_i8_new(sbyte hp, sbyte attack, sbyte defense, sbyte specialAttack,
+ internal static extern IdentifiablePointer statistic_set_i8_new(sbyte hp, sbyte attack, sbyte defense, sbyte specialAttack,
sbyte specialDefense, sbyte speed);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
- internal static extern IntPtr statistic_set_i16_new(short hp, short attack, short defense, short specialAttack,
+ internal static extern IdentifiablePointer statistic_set_i16_new(short hp, short attack, short defense, short specialAttack,
short specialDefense, short speed);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
- internal static extern IntPtr statistic_set_i32_new(int hp, int attack, int defense, int specialAttack,
+ internal static extern IdentifiablePointer statistic_set_i32_new(int hp, int attack, int defense, int specialAttack,
int specialDefense, int speed);
[DllImport(Data.DllName, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
diff --git a/PkmnLibRSharp/PkmnLibRSharp.csproj b/PkmnLibRSharp/PkmnLibRSharp.csproj
index 31ec70f..dea5333 100644
--- a/PkmnLibRSharp/PkmnLibRSharp.csproj
+++ b/PkmnLibRSharp/PkmnLibRSharp.csproj
@@ -25,6 +25,10 @@
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
diff --git a/PkmnLibRSharp/StaticData/Ability.cs b/PkmnLibRSharp/StaticData/Ability.cs
index a1ba946..aba31b2 100644
--- a/PkmnLibRSharp/StaticData/Ability.cs
+++ b/PkmnLibRSharp/StaticData/Ability.cs
@@ -2,6 +2,7 @@ using System;
using System.Collections.Generic;
using System.Linq;
using JetBrains.Annotations;
+using PkmnLibSharp.FFI;
using PkmnLibSharp.Utils;
using Interface = PkmnLibSharp.FFI.StaticData.Ability;
@@ -28,7 +29,7 @@ namespace PkmnLibSharp.StaticData
true);
}
- internal Ability(IntPtr ptr, bool isOwner) : base(ptr, isOwner)
+ internal Ability(IdentifiablePointer ptr, bool isOwner) : base(ptr, isOwner)
{
}
@@ -69,5 +70,10 @@ namespace PkmnLibSharp.StaticData
cacheParameter?.Invalidate();
}
}
+
+ ~Ability()
+ {
+ Dispose();
+ }
}
}
\ No newline at end of file
diff --git a/PkmnLibRSharp/StaticData/EffectParameter.cs b/PkmnLibRSharp/StaticData/EffectParameter.cs
index f26f0af..db231a5 100644
--- a/PkmnLibRSharp/StaticData/EffectParameter.cs
+++ b/PkmnLibRSharp/StaticData/EffectParameter.cs
@@ -1,5 +1,6 @@
using System;
using JetBrains.Annotations;
+using PkmnLibSharp.FFI;
using PkmnLibSharp.Utils;
using Interface = PkmnLibSharp.FFI.StaticData.EffectParameter;
@@ -14,7 +15,7 @@ namespace PkmnLibSharp.StaticData
public object? Data { get; internal set; }
}
- internal EffectParameter(IntPtr ptr, bool isOwner) : base(ptr, isOwner)
+ internal EffectParameter(IdentifiablePointer ptr, bool isOwner) : base(ptr, isOwner)
{
}
@@ -89,5 +90,10 @@ namespace PkmnLibSharp.StaticData
var data = Data;
return data is string ? $"{Type}(\"{data}\")" : $"{Type}({data})";
}
+
+ ~EffectParameter()
+ {
+ Dispose();
+ }
}
}
\ No newline at end of file
diff --git a/PkmnLibRSharp/StaticData/Form.cs b/PkmnLibRSharp/StaticData/Form.cs
index 0ab474e..c6efa6b 100644
--- a/PkmnLibRSharp/StaticData/Form.cs
+++ b/PkmnLibRSharp/StaticData/Form.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using PkmnLibSharp.FFI;
using PkmnLibSharp.Utils;
using Interface = PkmnLibSharp.FFI.StaticData.Form;
@@ -22,7 +23,7 @@ namespace PkmnLibSharp.StaticData
public LearnableMoves? LearnableMoves { get; internal set; }
}
- internal Form(IntPtr formPtr, bool isOwner) : base(formPtr, isOwner)
+ internal Form(IdentifiablePointer formPtr, bool isOwner) : base(formPtr, isOwner)
{
}
@@ -77,5 +78,10 @@ namespace PkmnLibSharp.StaticData
{
Cache.LearnableMoves?.Invalidate();
}
+
+ ~Form()
+ {
+ Dispose();
+ }
}
}
\ No newline at end of file
diff --git a/PkmnLibRSharp/StaticData/GrowthRate.cs b/PkmnLibRSharp/StaticData/GrowthRate.cs
index 93c6b02..cc0580f 100644
--- a/PkmnLibRSharp/StaticData/GrowthRate.cs
+++ b/PkmnLibRSharp/StaticData/GrowthRate.cs
@@ -44,5 +44,10 @@ namespace PkmnLibSharp.StaticData
{
return new object();
}
+
+ ~LookupGrowthRate()
+ {
+ Dispose();
+ }
}
}
\ No newline at end of file
diff --git a/PkmnLibRSharp/StaticData/Item.cs b/PkmnLibRSharp/StaticData/Item.cs
index c328e0a..6c99432 100644
--- a/PkmnLibRSharp/StaticData/Item.cs
+++ b/PkmnLibRSharp/StaticData/Item.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using PkmnLibSharp.FFI;
using PkmnLibSharp.Utils;
using Interface = PkmnLibSharp.FFI.StaticData.Item;
@@ -103,7 +104,7 @@ namespace PkmnLibSharp.StaticData
InitializePointer(ptr, true);
}
- internal Item(IntPtr ptr, bool isOwner) : base(ptr, isOwner)
+ internal Item(IdentifiablePointer ptr, bool isOwner) : base(ptr, isOwner)
{
}
@@ -116,5 +117,10 @@ namespace PkmnLibSharp.StaticData
protected override CacheData CreateCache() => new CacheData();
protected override void Destructor() => Interface.item_drop(Ptr);
+
+ ~Item()
+ {
+ Dispose();
+ }
}
}
\ No newline at end of file
diff --git a/PkmnLibRSharp/StaticData/LearnableMoves.cs b/PkmnLibRSharp/StaticData/LearnableMoves.cs
index 9baed7f..ea59132 100644
--- a/PkmnLibRSharp/StaticData/LearnableMoves.cs
+++ b/PkmnLibRSharp/StaticData/LearnableMoves.cs
@@ -27,5 +27,10 @@ namespace PkmnLibSharp.StaticData
protected override object CreateCache() => new object();
protected override void Destructor() => Interface.learnable_moves_drop(Ptr);
+
+ ~LearnableMoves()
+ {
+ Dispose();
+ }
}
}
\ No newline at end of file
diff --git a/PkmnLibRSharp/StaticData/Libraries/AbilityLibrary.cs b/PkmnLibRSharp/StaticData/Libraries/AbilityLibrary.cs
index 535ad8c..98c05db 100644
--- a/PkmnLibRSharp/StaticData/Libraries/AbilityLibrary.cs
+++ b/PkmnLibRSharp/StaticData/Libraries/AbilityLibrary.cs
@@ -1,4 +1,5 @@
using System;
+using PkmnLibSharp.FFI;
using PkmnLibSharp.Utils;
using Interface = PkmnLibSharp.FFI.StaticData.Libraries.ItemLibrary;
@@ -10,7 +11,7 @@ namespace PkmnLibSharp.StaticData.Libraries
{
}
- internal AbilityLibrary(IntPtr ptr, bool isOwner) : base(ptr, isOwner)
+ internal AbilityLibrary(IdentifiablePointer ptr, bool isOwner) : base(ptr, isOwner)
{
}
@@ -24,7 +25,7 @@ namespace PkmnLibSharp.StaticData.Libraries
protected override Ability? GetValueByKey(string key)
{
var ptr = Interface.item_library_get(Ptr, key.ToPtr());
- return ptr == IntPtr.Zero ? null : new Ability(ptr, false);
+ return ptr.Ptr == IntPtr.Zero ? null : new Ability(ptr, false);
}
public override string? GetKeyByIndex(ulong index) =>
@@ -37,5 +38,10 @@ namespace PkmnLibSharp.StaticData.Libraries
value.Invalidate();
}
}
+
+ ~AbilityLibrary()
+ {
+ Dispose();
+ }
}
}
\ No newline at end of file
diff --git a/PkmnLibRSharp/StaticData/Libraries/DataLibrary.cs b/PkmnLibRSharp/StaticData/Libraries/DataLibrary.cs
index 9447300..41800c8 100644
--- a/PkmnLibRSharp/StaticData/Libraries/DataLibrary.cs
+++ b/PkmnLibRSharp/StaticData/Libraries/DataLibrary.cs
@@ -2,13 +2,14 @@ using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
+using PkmnLibSharp.FFI;
using PkmnLibSharp.Utils;
namespace PkmnLibSharp.StaticData.Libraries
{
public abstract class DataLibrary : ExternPointer.CacheData>, IReadOnlyDictionary
{
- protected DataLibrary(IntPtr ptr, bool isOwner) : base(ptr, isOwner)
+ protected DataLibrary(IdentifiablePointer ptr, bool isOwner) : base(ptr, isOwner)
{
}
@@ -90,5 +91,10 @@ namespace PkmnLibSharp.StaticData.Libraries
{
return GetEnumerator();
}
+
+ ~DataLibrary()
+ {
+ Dispose();
+ }
}
}
\ No newline at end of file
diff --git a/PkmnLibRSharp/StaticData/Libraries/GrowthRateLibrary.cs b/PkmnLibRSharp/StaticData/Libraries/GrowthRateLibrary.cs
index 238e13f..81f4cf0 100644
--- a/PkmnLibRSharp/StaticData/Libraries/GrowthRateLibrary.cs
+++ b/PkmnLibRSharp/StaticData/Libraries/GrowthRateLibrary.cs
@@ -1,5 +1,6 @@
using System;
using JetBrains.Annotations;
+using PkmnLibSharp.FFI;
using PkmnLibSharp.Utils;
using Interface = PkmnLibSharp.FFI.StaticData.Libraries.GrowthRateLibrary;
@@ -11,7 +12,7 @@ namespace PkmnLibSharp.StaticData.Libraries
{
}
- internal GrowthRateLibrary(IntPtr ptr, bool isOwner) : base(ptr, isOwner)
+ internal GrowthRateLibrary(IdentifiablePointer ptr, bool isOwner) : base(ptr, isOwner)
{
}
@@ -29,5 +30,10 @@ namespace PkmnLibSharp.StaticData.Libraries
protected override object CreateCache() => new();
protected override void Destructor() => Interface.growth_rate_library_drop(Ptr);
+
+ ~GrowthRateLibrary()
+ {
+ Dispose();
+ }
}
}
\ No newline at end of file
diff --git a/PkmnLibRSharp/StaticData/Libraries/ItemLibrary.cs b/PkmnLibRSharp/StaticData/Libraries/ItemLibrary.cs
index b4549e1..45c9037 100644
--- a/PkmnLibRSharp/StaticData/Libraries/ItemLibrary.cs
+++ b/PkmnLibRSharp/StaticData/Libraries/ItemLibrary.cs
@@ -1,4 +1,5 @@
using System;
+using PkmnLibSharp.FFI;
using PkmnLibSharp.Utils;
using Interface = PkmnLibSharp.FFI.StaticData.Libraries.ItemLibrary;
@@ -10,7 +11,7 @@ namespace PkmnLibSharp.StaticData.Libraries
{
}
- internal ItemLibrary(IntPtr ptr, bool isOwner) : base(ptr, isOwner)
+ internal ItemLibrary(IdentifiablePointer ptr, bool isOwner) : base(ptr, isOwner)
{
}
@@ -24,7 +25,7 @@ namespace PkmnLibSharp.StaticData.Libraries
protected override Item? GetValueByKey(string key)
{
var ptr = Interface.item_library_get(Ptr, key.ToPtr());
- return ptr == IntPtr.Zero ? null : new Item(ptr, false);
+ return ptr.Ptr == IntPtr.Zero ? null : new Item(ptr, false);
}
public override string? GetKeyByIndex(ulong index) =>
@@ -37,5 +38,10 @@ namespace PkmnLibSharp.StaticData.Libraries
value.Invalidate();
}
}
+
+ ~ItemLibrary()
+ {
+ Dispose();
+ }
}
}
\ No newline at end of file
diff --git a/PkmnLibRSharp/StaticData/Libraries/LibrarySettings.cs b/PkmnLibRSharp/StaticData/Libraries/LibrarySettings.cs
index 9834600..d95b930 100644
--- a/PkmnLibRSharp/StaticData/Libraries/LibrarySettings.cs
+++ b/PkmnLibRSharp/StaticData/Libraries/LibrarySettings.cs
@@ -1,4 +1,5 @@
using System;
+using PkmnLibSharp.FFI;
using PkmnLibSharp.Utils;
using Interface = PkmnLibSharp.FFI.StaticData.Libraries.LibrarySettings;
@@ -15,7 +16,7 @@ namespace PkmnLibSharp.StaticData.Libraries
{
}
- internal LibrarySettings(IntPtr ptr, bool isOwner) : base(ptr, isOwner)
+ internal LibrarySettings(IdentifiablePointer ptr, bool isOwner) : base(ptr, isOwner)
{
}
@@ -24,5 +25,10 @@ namespace PkmnLibSharp.StaticData.Libraries
protected override CacheData CreateCache() => new();
protected override void Destructor() => Interface.library_settings_drop(Ptr);
+
+ ~LibrarySettings()
+ {
+ Dispose();
+ }
}
}
\ No newline at end of file
diff --git a/PkmnLibRSharp/StaticData/Libraries/MoveLibrary.cs b/PkmnLibRSharp/StaticData/Libraries/MoveLibrary.cs
index e0a623a..e533ae8 100644
--- a/PkmnLibRSharp/StaticData/Libraries/MoveLibrary.cs
+++ b/PkmnLibRSharp/StaticData/Libraries/MoveLibrary.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using PkmnLibSharp.FFI;
using PkmnLibSharp.Utils;
using Interface = PkmnLibSharp.FFI.StaticData.Libraries.MoveLibrary;
@@ -11,7 +12,7 @@ namespace PkmnLibSharp.StaticData.Libraries
{
}
- internal MoveLibrary(IntPtr ptr, bool isOwner) : base(ptr, isOwner)
+ internal MoveLibrary(IdentifiablePointer ptr, bool isOwner) : base(ptr, isOwner)
{
}
@@ -28,7 +29,7 @@ namespace PkmnLibSharp.StaticData.Libraries
protected override MoveData? GetValueByKey(string key)
{
var ptr = Interface.move_library_get(Ptr, key.ToPtr());
- return ptr == IntPtr.Zero ? null : new MoveData(ptr, false);
+ return ptr.Ptr == IntPtr.Zero ? null : new MoveData(ptr, false);
}
public override string? GetKeyByIndex(ulong index) =>
@@ -41,5 +42,10 @@ namespace PkmnLibSharp.StaticData.Libraries
value.Invalidate();
}
}
+
+ ~MoveLibrary()
+ {
+ Dispose();
+ }
}
}
\ No newline at end of file
diff --git a/PkmnLibRSharp/StaticData/Libraries/NatureLibrary.cs b/PkmnLibRSharp/StaticData/Libraries/NatureLibrary.cs
index 8728a50..e25b435 100644
--- a/PkmnLibRSharp/StaticData/Libraries/NatureLibrary.cs
+++ b/PkmnLibRSharp/StaticData/Libraries/NatureLibrary.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using PkmnLibSharp.FFI;
using PkmnLibSharp.Utils;
using Interface = PkmnLibSharp.FFI.StaticData.Libraries.NatureLibrary;
@@ -17,20 +18,20 @@ namespace PkmnLibSharp.StaticData.Libraries
{
}
- internal NatureLibrary(IntPtr ptr, bool isOwner) : base(ptr, isOwner)
+ internal NatureLibrary(IdentifiablePointer ptr, bool isOwner) : base(ptr, isOwner)
{
}
- public bool TryGetNature(string name, out Nature nature)
+ public Optional TryGetNature(string name)
{
- if (Cache.Natures.TryGetValue(name, out nature))
- return true;
+ if (Cache.Natures.TryGetValue(name, out var nature))
+ return nature;
var naturePtr = Interface.nature_library_get_nature(Ptr, name.ToPtr());
- if (naturePtr == IntPtr.Zero)
- return false;
- nature = new Nature(naturePtr, false);
+ if (naturePtr.Ptr == IntPtr.Zero)
+ return Optional.None();
+ nature = new Nature(naturePtr);
Cache.Natures.Add(name, nature);
- return true;
+ return nature;
}
public string GetNatureName(Nature nature)
@@ -55,5 +56,10 @@ namespace PkmnLibSharp.StaticData.Libraries
nature.Invalidate();
}
}
+
+ ~NatureLibrary()
+ {
+ Dispose();
+ }
}
}
\ No newline at end of file
diff --git a/PkmnLibRSharp/StaticData/Libraries/SpeciesLibrary.cs b/PkmnLibRSharp/StaticData/Libraries/SpeciesLibrary.cs
index 5222b69..928cc2d 100644
--- a/PkmnLibRSharp/StaticData/Libraries/SpeciesLibrary.cs
+++ b/PkmnLibRSharp/StaticData/Libraries/SpeciesLibrary.cs
@@ -1,4 +1,5 @@
using System;
+using PkmnLibSharp.FFI;
using PkmnLibSharp.Utils;
using Interface = PkmnLibSharp.FFI.StaticData.Libraries.SpeciesLibrary;
@@ -10,7 +11,7 @@ namespace PkmnLibSharp.StaticData.Libraries
{
}
- internal SpeciesLibrary(IntPtr ptr, bool isOwner) : base(ptr, isOwner)
+ internal SpeciesLibrary(IdentifiablePointer ptr, bool isOwner) : base(ptr, isOwner)
{
}
@@ -24,7 +25,7 @@ namespace PkmnLibSharp.StaticData.Libraries
protected override Species? GetValueByKey(string key)
{
var ptr = Interface.species_library_get(Ptr, key.ToPtr());
- return ptr == IntPtr.Zero ? null : new Species(ptr, false);
+ return ptr.Ptr == IntPtr.Zero ? null : new Species(ptr, false);
}
public override string? GetKeyByIndex(ulong index) =>
@@ -37,5 +38,10 @@ namespace PkmnLibSharp.StaticData.Libraries
value.Invalidate();
}
}
+
+ ~SpeciesLibrary()
+ {
+ Dispose();
+ }
}
}
\ No newline at end of file
diff --git a/PkmnLibRSharp/StaticData/Libraries/StaticData.cs b/PkmnLibRSharp/StaticData/Libraries/StaticData.cs
index ce1cd86..06619a2 100644
--- a/PkmnLibRSharp/StaticData/Libraries/StaticData.cs
+++ b/PkmnLibRSharp/StaticData/Libraries/StaticData.cs
@@ -64,5 +64,10 @@ namespace PkmnLibSharp.StaticData.Libraries
Cache.NatureLibrary?.Invalidate();
Cache.AbilityLibrary?.Invalidate();
}
+
+ ~StaticData()
+ {
+ Dispose();
+ }
}
}
\ No newline at end of file
diff --git a/PkmnLibRSharp/StaticData/Libraries/TypeLibrary.cs b/PkmnLibRSharp/StaticData/Libraries/TypeLibrary.cs
index 4859289..09b3dcb 100644
--- a/PkmnLibRSharp/StaticData/Libraries/TypeLibrary.cs
+++ b/PkmnLibRSharp/StaticData/Libraries/TypeLibrary.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using PkmnLibSharp.FFI;
using PkmnLibSharp.Utils;
using Interface = PkmnLibSharp.FFI.StaticData.Libraries.TypeLibrary;
@@ -18,7 +19,7 @@ namespace PkmnLibSharp.StaticData.Libraries
{
}
- internal TypeLibrary(IntPtr ptr, bool isOwner) : base(ptr, isOwner)
+ internal TypeLibrary(IdentifiablePointer ptr, bool isOwner) : base(ptr, isOwner)
{
}
@@ -61,5 +62,10 @@ namespace PkmnLibSharp.StaticData.Libraries
protected override CacheData CreateCache() => new();
protected override void Destructor() => Interface.type_library_drop(Ptr);
+
+ ~TypeLibrary()
+ {
+ Dispose();
+ }
}
}
\ No newline at end of file
diff --git a/PkmnLibRSharp/StaticData/MoveData.cs b/PkmnLibRSharp/StaticData/MoveData.cs
index b42767a..c54178a 100644
--- a/PkmnLibRSharp/StaticData/MoveData.cs
+++ b/PkmnLibRSharp/StaticData/MoveData.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using PkmnLibSharp.FFI;
using PkmnLibSharp.Utils;
using Interface = PkmnLibSharp.FFI.StaticData.MoveData;
@@ -76,7 +77,7 @@ namespace PkmnLibSharp.StaticData
public SecondaryEffect? SecondaryEffect { get; internal set; }
}
- internal MoveData(IntPtr ptr, bool isOwner) : base(ptr, isOwner)
+ internal MoveData(IdentifiablePointer ptr, bool isOwner) : base(ptr, isOwner)
{
}
@@ -108,7 +109,7 @@ namespace PkmnLibSharp.StaticData
if (Cache.SecondaryEffect != null)
return Cache.SecondaryEffect;
var effect = Interface.move_data_secondary_effect(Ptr);
- if (effect == IntPtr.Zero)
+ if (effect.Ptr == IntPtr.Zero)
return null;
Cache.SecondaryEffect = new SecondaryEffect(effect, false);
return Cache.SecondaryEffect;
@@ -135,5 +136,10 @@ namespace PkmnLibSharp.StaticData
base.InvalidateChildren();
Cache.SecondaryEffect?.Invalidate();
}
+
+ ~MoveData()
+ {
+ Dispose();
+ }
}
}
\ No newline at end of file
diff --git a/PkmnLibRSharp/StaticData/Nature.cs b/PkmnLibRSharp/StaticData/Nature.cs
index d8effe3..9814118 100644
--- a/PkmnLibRSharp/StaticData/Nature.cs
+++ b/PkmnLibRSharp/StaticData/Nature.cs
@@ -1,4 +1,5 @@
using System;
+using PkmnLibSharp.FFI;
using PkmnLibSharp.Utils;
using Interface = PkmnLibSharp.FFI.StaticData.Nature;
@@ -18,7 +19,7 @@ namespace PkmnLibSharp.StaticData
{
}
- internal Nature(IntPtr ptr, bool isOwner) : base(ptr, isOwner)
+ internal Nature(IdentifiablePointer ptr) : base(ptr, true)
{
}
@@ -52,5 +53,10 @@ namespace PkmnLibSharp.StaticData
{
Interface.nature_drop(Ptr);
}
+
+ ~Nature()
+ {
+ Dispose();
+ }
}
}
\ No newline at end of file
diff --git a/PkmnLibRSharp/StaticData/SecondaryEffect.cs b/PkmnLibRSharp/StaticData/SecondaryEffect.cs
index d651f96..e0e3cb0 100644
--- a/PkmnLibRSharp/StaticData/SecondaryEffect.cs
+++ b/PkmnLibRSharp/StaticData/SecondaryEffect.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using PkmnLibSharp.FFI;
using PkmnLibSharp.Utils;
using Interface = PkmnLibSharp.FFI.StaticData.MoveData;
@@ -15,7 +16,7 @@ namespace PkmnLibSharp.StaticData
public CachedExternArray? Parameters { get; internal set; }
}
- internal SecondaryEffect(IntPtr ptr, bool isOwner) : base(ptr, isOwner)
+ internal SecondaryEffect(IdentifiablePointer ptr, bool isOwner) : base(ptr, isOwner)
{
}
@@ -31,10 +32,11 @@ namespace PkmnLibSharp.StaticData
public float Chance => Cache.Chance ??= Interface.secondary_effect_chance(Ptr);
public string Name => Cache.Name ?? (Cache.Name = Interface.secondary_effect_effect_name(Ptr).PtrString()!);
- public IReadOnlyList Parameters =>
- Cache.Parameters ??= new CachedExternArray(
- Interface.secondary_effect_parameter_length(Ptr),
+ public IReadOnlyList GetParameters()
+ {
+ return Cache.Parameters ??= new CachedExternArray(Interface.secondary_effect_parameter_length(Ptr),
arg => new EffectParameter(Interface.secondary_effect_parameter_get(Ptr, arg), false));
+ }
protected override CacheData CreateCache()
{
@@ -57,5 +59,10 @@ namespace PkmnLibSharp.StaticData
}
}
}
+
+ ~SecondaryEffect()
+ {
+ Dispose();
+ }
}
}
\ No newline at end of file
diff --git a/PkmnLibRSharp/StaticData/Species.cs b/PkmnLibRSharp/StaticData/Species.cs
index 72cc9d4..904fe37 100644
--- a/PkmnLibRSharp/StaticData/Species.cs
+++ b/PkmnLibRSharp/StaticData/Species.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using PkmnLibSharp.FFI;
using PkmnLibSharp.Utils;
using Interface = PkmnLibSharp.FFI.StaticData.Species;
@@ -18,7 +19,7 @@ namespace PkmnLibSharp.StaticData
public Dictionary Forms { get; } = new();
}
- internal Species(IntPtr ptr, bool isOwner) : base(ptr, isOwner)
+ internal Species(IdentifiablePointer ptr, bool isOwner) : base(ptr, isOwner)
{
}
@@ -27,7 +28,7 @@ namespace PkmnLibSharp.StaticData
{
var flagsPtrArray = flags.Select(x => x.ToPtr()).ToArray();
var ptr = Interface.species_new(id, name.ToPtr(), genderRate, growthRate.ToPtr(), captureRate,
- defaultForm.TakeOwnershipAndInvalidate(), flagsPtrArray.ArrayPtr(), (ulong)flags.Count);
+ defaultForm.Ptr, flagsPtrArray.ArrayPtr(), (ulong)flags.Count);
InitializePointer(ptr, true);
}
@@ -42,7 +43,7 @@ namespace PkmnLibSharp.StaticData
if (Cache.Forms.TryGetValue(formName, out form))
return true;
var formPtr = Interface.species_get_form(Ptr, formName.ToPtr());
- if (formPtr == IntPtr.Zero)
+ if (formPtr.Ptr == IntPtr.Zero)
{
form = null;
return false;
@@ -66,5 +67,10 @@ namespace PkmnLibSharp.StaticData
form.Value.Invalidate();
}
}
+
+ ~Species()
+ {
+ Dispose();
+ }
}
}
\ No newline at end of file
diff --git a/PkmnLibRSharp/StaticData/StaticStatisticSet.cs b/PkmnLibRSharp/StaticData/StaticStatisticSet.cs
index 1bbe96d..9d86f20 100644
--- a/PkmnLibRSharp/StaticData/StaticStatisticSet.cs
+++ b/PkmnLibRSharp/StaticData/StaticStatisticSet.cs
@@ -1,5 +1,6 @@
using System;
using JetBrains.Annotations;
+using PkmnLibSharp.FFI;
using PkmnLibSharp.Utils;
using Interface = PkmnLibSharp.FFI.StaticData.StaticStatisticSet;
@@ -17,7 +18,7 @@ namespace PkmnLibSharp.StaticData
public T? Speed { get; internal set; }
}
- internal StaticStatisticSet(IntPtr ptr, bool isOwner) : base(ptr, isOwner)
+ internal StaticStatisticSet(IdentifiablePointer ptr, bool isOwner) : base(ptr, isOwner)
{
}
@@ -129,5 +130,10 @@ namespace PkmnLibSharp.StaticData
else if (typeof(T) == typeof(short)) Interface.static_statistic_set_i16_drop(Ptr);
else if (typeof(T) == typeof(int)) Interface.static_statistic_set_i32_drop(Ptr);
}
+
+ ~StaticStatisticSet()
+ {
+ Dispose();
+ }
}
}
\ No newline at end of file
diff --git a/PkmnLibRSharp/StaticData/StatisticSet.cs b/PkmnLibRSharp/StaticData/StatisticSet.cs
index 9cdbc01..8c88210 100644
--- a/PkmnLibRSharp/StaticData/StatisticSet.cs
+++ b/PkmnLibRSharp/StaticData/StatisticSet.cs
@@ -5,13 +5,8 @@ using Interface = PkmnLibSharp.FFI.StaticData.StatisticSet;
namespace PkmnLibSharp.StaticData
{
- public class StatisticSet : ExternPointer.CacheData> where T : struct, IConvertible
+ public class StatisticSet : ExternPointer