Use fancy C# 8 Nullable Reference pattern.

This commit is contained in:
2020-08-08 14:32:27 +02:00
parent e0f4a38309
commit 01e622c22c
31 changed files with 159 additions and 159 deletions

View File

@@ -59,7 +59,7 @@ namespace PkmnLibSharp.Library
{
var p = IntPtr.Zero;
Creaturelib.Generated.EffectParameter.AsString(Ptr, ref p).Assert();
return p.PtrString();
return p.PtrString()!;
}

View File

@@ -10,17 +10,17 @@ namespace PkmnLibSharp.Library
{
public class Forme : PointerWrapper
{
private ReadOnlyArray<string> _abilities;
private ReadOnlyArray<string> _hiddenAbilities;
private LearnableMoves _moves;
private string _name;
private ReadOnlyArray<byte> _types;
private ReadOnlyArray<string>? _abilities;
private ReadOnlyArray<string>? _hiddenAbilities;
private LearnableMoves? _moves;
private string? _name;
private ReadOnlyArray<byte>? _types;
internal Forme(IntPtr parent) : base(parent)
{
}
public string Name => _name ??= SpeciesVariant.GetName(Ptr).PtrString();
public string Name => _name ??= SpeciesVariant.GetName(Ptr).PtrString()!;
public float Height => SpeciesVariant.GetHeight(Ptr);
public float Weight => SpeciesVariant.GetWeight(Ptr);
public float BaseExperience => SpeciesVariant.GetBaseExperience(Ptr);
@@ -66,7 +66,7 @@ namespace PkmnLibSharp.Library
{
var s = IntPtr.Zero;
SpeciesVariant.GetTalent(Ptr, MarshalHelper.False, i, ref s).Assert();
abilities[i] = s.PtrString();
abilities[i] = s.PtrString()!;
}
_abilities = abilities.ToReadOnly();
@@ -87,7 +87,7 @@ namespace PkmnLibSharp.Library
{
var s = IntPtr.Zero;
SpeciesVariant.GetTalent(Ptr, MarshalHelper.True, i, ref s).Assert();
abilities[i] = s.PtrString();
abilities[i] = s.PtrString()!;
}
_hiddenAbilities = abilities.ToReadOnly();
@@ -101,9 +101,10 @@ namespace PkmnLibSharp.Library
{
if (_moves != null) return _moves;
var movesPtr = SpeciesVariant.GetLearnableAttacks(Ptr);
if (!TryResolvePointer(movesPtr, out _moves)) _moves = new LearnableMoves(movesPtr);
if (!TryResolvePointer(movesPtr, out _moves))
_moves = new LearnableMoves(movesPtr);
return _moves;
return _moves!;
}
}
@@ -114,7 +115,8 @@ namespace PkmnLibSharp.Library
public Forme(string name, float height, float weight, uint baseExperience, byte[] types,
ushort baseHealth, ushort baseAttack, ushort baseDefense, ushort baseSpecialAttack,
ushort baseSpecialDefense, ushort baseSpeed, string[] abilities, string[] hiddenAbilities,
ushort baseSpecialDefense, ushort baseSpeed, IReadOnlyCollection<string> abilities,
IReadOnlyCollection<string> hiddenAbilities,
LearnableMoves moves)
{
var abilitiesConverted = abilities.Select(x => x.ToPtr()).ToArray();
@@ -123,8 +125,8 @@ namespace PkmnLibSharp.Library
var hab = hiddenAbilitiesConverted.ArrayPtr();
var ptr = SpeciesVariant.Construct(name.ToPtr(), height, weight, baseExperience, types.ArrayPtr(),
(ulong) types.Length, baseHealth, baseAttack, baseDefense, baseSpecialAttack,
baseSpecialDefense, baseSpeed, ab, (ulong) abilities.Length, hab,
(ulong) hiddenAbilities.Length, moves.Ptr);
baseSpecialDefense, baseSpeed, ab, (ulong) abilities.Count, hab,
(ulong) hiddenAbilities.Count, moves.Ptr);
var f = new Forme(ptr);
foreach (var intPtr in abilitiesConverted)
Marshal.FreeHGlobal(intPtr);

View File

@@ -6,13 +6,13 @@ namespace PkmnLibSharp.Library.Items
{
public class Item : PointerWrapper
{
private string _name;
private string? _name;
internal Item(IntPtr ptr) : base(ptr)
{
}
public string Name => _name ??= Creaturelib.Generated.Item.GetName(Ptr).PtrString();
public string Name => _name ??= Creaturelib.Generated.Item.GetName(Ptr).PtrString()!;
public ItemCategory Category => (ItemCategory) Creaturelib.Generated.Item.GetCategory(Ptr);
public BattleItemCategory BattleCategory =>

View File

@@ -32,7 +32,7 @@ namespace PkmnLibSharp.Library.Items
_cache.Remove(key);
}
public bool TryGet(string key, out Item item)
public bool TryGet(string key, out Item? item)
{
if (_cache.TryGetValue(key, out item))
return true;
@@ -41,7 +41,7 @@ namespace PkmnLibSharp.Library.Items
return false;
if (TryResolvePointer(ptr, out item))
{
_cache.Add(key, item);
_cache.Add(key, item!);
return true;
}
@@ -56,10 +56,10 @@ namespace PkmnLibSharp.Library.Items
return item;
var ptr = IntPtr.Zero;
Creaturelib.Generated.ItemLibrary.Get(Ptr, key.ToPtr(), ref ptr).Assert();
if (TryResolvePointer(ptr, out item))
if (TryResolvePointer(ptr, out Item? i))
{
_cache.Add(key, item);
return item;
_cache.Add(key, i!);
return i!;
}
item = new Item(ptr);

View File

@@ -8,14 +8,14 @@ namespace PkmnLibSharp.Library.Moves
{
public class MoveData : PointerWrapper
{
private string _name;
private string _secondaryEffectName;
private string? _name;
private string? _secondaryEffectName;
internal MoveData(IntPtr ptr) : base(ptr)
{
}
public string Name => _name ??= AttackData.GetName(Ptr).PtrString();
public string Name => _name ??= AttackData.GetName(Ptr).PtrString()!;
public byte Type => AttackData.GetType(Ptr);
public MoveCategory Category => (MoveCategory) AttackData.GetCategory(Ptr);
public byte BasePower => AttackData.GetBasePower(Ptr);
@@ -27,7 +27,7 @@ namespace PkmnLibSharp.Library.Moves
public float SecondaryEffectChance => AttackData.GetSecondaryEffectChance(Ptr);
public string SecondaryEffectName =>
_secondaryEffectName ??= AttackData.GetSecondaryEffectName(Ptr).PtrString();
_secondaryEffectName ??= AttackData.GetSecondaryEffectName(Ptr).PtrString()!;
public bool HasFlag(string s)
{

View File

@@ -28,7 +28,7 @@ namespace PkmnLibSharp.Library.Moves
_cache.Remove(key);
}
public bool TryGet(string key, out MoveData move)
public bool TryGet(string key, out MoveData? move)
{
if (_cache.TryGetValue(key, out move))
return true;
@@ -37,7 +37,7 @@ namespace PkmnLibSharp.Library.Moves
return false;
if (TryResolvePointer(ptr, out move))
{
_cache.Add(key, move);
_cache.Add(key, move!);
return true;
}
@@ -52,10 +52,10 @@ namespace PkmnLibSharp.Library.Moves
return move;
var ptr = IntPtr.Zero;
AttackLibrary.Get(Ptr, key.ToPtr(), ref ptr).Assert();
if (TryResolvePointer(ptr, out move))
if (TryResolvePointer(ptr, out MoveData? m))
{
_cache.Add(key, move);
return move;
_cache.Add(key, m!);
return m!;
}
move = new MoveData(ptr);

View File

@@ -33,11 +33,11 @@ namespace PkmnLibSharp.Library
return nature;
var ptr = IntPtr.Zero;
Pkmnlib.Generated.NatureLibrary.GetNatureByName(Ptr, name.ToPtr(), ref ptr).Assert();
if (TryResolvePointer(ptr, out nature))
if (TryResolvePointer(ptr, out Nature? n))
{
_cache.Add(name, nature);
_cache.Add(name, n!);
_natureNames.Add(ptr, name);
return nature;
return n!;
}
nature = new Nature(ptr);
@@ -52,14 +52,14 @@ namespace PkmnLibSharp.Library
return s;
var ptr = IntPtr.Zero;
Pkmnlib.Generated.NatureLibrary.GetNatureName(Ptr, nature.Ptr, ref ptr).Assert();
return ptr.PtrString();
return ptr.PtrString()!;
}
public string GetRandomNatureName(Random random)
{
IntPtr val = IntPtr.Zero;
Pkmnlib.Generated.NatureLibrary.GetRandomNatureName(Ptr, random.Ptr, ref val).Assert();
return val.PtrString();
return val.PtrString()!;
}
protected override void DeletePtr()

View File

@@ -9,7 +9,7 @@ namespace PkmnLibSharp.Library
{
public class PokemonLibrary : PointerWrapper
{
private LibrarySettings _settings;
private LibrarySettings? _settings;
public LibrarySettings Settings
{
@@ -18,13 +18,13 @@ namespace PkmnLibSharp.Library
if (_settings != null) return _settings;
var ptr = DataLibrary.GetSettings(Ptr);
if (TryResolvePointer(ptr, out _settings))
return _settings;
return _settings!;
_settings = new LibrarySettings(ptr);
return _settings;
}
}
private SpeciesLibrary _species;
private SpeciesLibrary? _species;
public SpeciesLibrary SpeciesLibrary
{
@@ -33,13 +33,13 @@ namespace PkmnLibSharp.Library
if (_species != null) return _species;
var ptr = DataLibrary.GetSpeciesLibrary(Ptr);
if (TryResolvePointer(ptr, out _species))
return _species;
return _species!;
_species = new SpeciesLibrary(ptr);
return _species;
}
}
private MoveLibrary _moves;
private MoveLibrary? _moves;
public MoveLibrary MoveLibrary
{
@@ -48,13 +48,13 @@ namespace PkmnLibSharp.Library
if (_moves != null) return _moves;
var ptr = DataLibrary.GetAttackLibrary(Ptr);
if (TryResolvePointer(ptr, out _moves))
return _moves;
return _moves!;
_moves = new MoveLibrary(ptr);
return _moves;
}
}
private ItemLibrary _items;
private ItemLibrary? _items;
public ItemLibrary ItemLibrary
{
@@ -63,13 +63,13 @@ namespace PkmnLibSharp.Library
if (_items != null) return _items;
var ptr = DataLibrary.GetItemLibrary(Ptr);
if (TryResolvePointer(ptr, out _items))
return _items;
return _items!;
_items = new ItemLibrary(ptr);
return _items;
}
}
private GrowthRateLibrary _growthRateLibrary;
private GrowthRateLibrary? _growthRateLibrary;
public GrowthRateLibrary GrowthRateLibrary
{
@@ -78,13 +78,13 @@ namespace PkmnLibSharp.Library
if (_growthRateLibrary != null) return _growthRateLibrary;
var ptr = DataLibrary.GetGrowthRates(Ptr);
if (TryResolvePointer(ptr, out _growthRateLibrary))
return _growthRateLibrary;
return _growthRateLibrary!;
_growthRateLibrary = new GrowthRateLibrary(ptr);
return _growthRateLibrary;
}
}
private TypeLibrary _typeLibrary;
private TypeLibrary? _typeLibrary;
public TypeLibrary TypeLibrary
{
@@ -93,13 +93,13 @@ namespace PkmnLibSharp.Library
if (_typeLibrary != null) return _typeLibrary;
var ptr = DataLibrary.GetTypeLibrary(Ptr);
if (TryResolvePointer(ptr, out _typeLibrary))
return _typeLibrary;
return _typeLibrary!;
_typeLibrary = new TypeLibrary(ptr);
return _typeLibrary;
}
}
private NatureLibrary _natureLibrary;
private NatureLibrary? _natureLibrary;
public NatureLibrary NatureLibrary
{
@@ -108,7 +108,7 @@ namespace PkmnLibSharp.Library
if (_natureLibrary != null) return _natureLibrary;
var ptr = Pkmnlib.Generated.PokemonLibrary.GetNatureLibrary(Ptr);
if (TryResolvePointer(ptr, out _natureLibrary))
return _natureLibrary;
return _natureLibrary!;
_natureLibrary = new NatureLibrary(ptr);
return _natureLibrary;
}

View File

@@ -11,8 +11,8 @@ namespace PkmnLibSharp.Library
{
public class Species : PointerWrapper
{
private string _name;
private string _growthRate;
private string? _name;
private string? _growthRate;
private readonly Dictionary<string, Forme> _formes =
new Dictionary<string, Forme>(StringComparer.InvariantCultureIgnoreCase);
@@ -20,15 +20,15 @@ namespace PkmnLibSharp.Library
public ushort Id => CreatureSpecies.GetId(Ptr);
public float GenderRate => CreatureSpecies.GetGenderRate(Ptr);
public byte CaptureRate => CreatureSpecies.GetCaptureRate(Ptr);
public string Name => _name ??= CreatureSpecies.GetName(Ptr).PtrString();
public string GrowthRate => _growthRate ??= CreatureSpecies.GetGrowthRate(Ptr).PtrString();
public string Name => _name ??= CreatureSpecies.GetName(Ptr).PtrString()!;
public string GrowthRate => _growthRate ??= CreatureSpecies.GetGrowthRate(Ptr).PtrString()!;
public bool HasForme(string s)
{
return CreatureSpecies.HasVariant(Ptr, s.ToPtr()) == MarshalHelper.True;
}
public bool TryGetForme(string s, out Forme forme)
public bool TryGetForme(string s, out Forme? forme)
{
if (_formes.TryGetValue(s, out forme))
return true;
@@ -37,7 +37,7 @@ namespace PkmnLibSharp.Library
{
if (TryResolvePointer(ptr, out forme))
{
_formes.Add(s, forme);
_formes.Add(s, forme!);
return true;
}
@@ -55,10 +55,10 @@ namespace PkmnLibSharp.Library
return forme;
var ptr = IntPtr.Zero;
CreatureSpecies.GetVariant(ref ptr, Ptr, s.ToPtr()).Assert();
if (TryResolvePointer(ptr, out forme))
if (TryResolvePointer(ptr, out Forme? f))
{
_formes.Add(s, forme);
return forme;
_formes.Add(s, f!);
return f!;
}
forme = new Forme(ptr);
_formes.Add(s, forme);

View File

@@ -21,7 +21,7 @@ namespace PkmnLibSharp.Library
_cache.Remove(key);
}
public bool TryGet(string key, out Species species)
public bool TryGet(string key, out Species? species)
{
if (_cache.TryGetValue(key, out species))
return true;
@@ -30,7 +30,7 @@ namespace PkmnLibSharp.Library
return false;
if (TryResolvePointer(ptr, out species))
{
_cache.Add(key, species);
_cache.Add(key, species!);
return true;
}
species = new Species(ptr);
@@ -44,10 +44,10 @@ namespace PkmnLibSharp.Library
return species;
var ptr = IntPtr.Zero;
Creaturelib.Generated.SpeciesLibrary.Get(Ptr, key.ToPtr(), ref ptr).Assert();
if (TryResolvePointer(ptr, out species))
if (TryResolvePointer(ptr, out Species? s))
{
_cache.Add(key, species);
return species;
_cache.Add(key, s!);
return s!;
}
species = new Species(ptr);
_cache.Add(key, species);

View File

@@ -66,7 +66,7 @@ namespace PkmnLibSharp.Library
var ptr = IntPtr.Zero;
Creaturelib.Generated.TypeLibrary.GetTypeName(ref ptr, Ptr, typeId).Assert();
var s = ptr.PtrString();
var s = ptr.PtrString()!;
_cache[s] = typeId;
return s;
}