Add nullability to large parts of the codebase
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2022-03-23 18:30:35 +01:00
parent beb2e44a0b
commit eccf2c9121
53 changed files with 240 additions and 206 deletions

View File

@@ -1 +0,0 @@
#include "AttackLibrary.hpp"

View File

@@ -3,6 +3,6 @@
CreatureLib::Library::AttackData::AttackData(const ArbUt::StringView& name, u8 type,
CreatureLib::Library::AttackCategory category, u8 power, u8 accuracy,
u8 baseUsage, CreatureLib::Library::AttackTarget target, i8 priority,
const SecondaryEffect* effect, std::unordered_set<u32> flags)
const SecondaryEffect* nullable effect, std::unordered_set<u32> flags)
: _name(name), _type(type), _category(category), _basePower(power), _accuracy(accuracy), _baseUsages(baseUsage),
_target(target), _priority(priority), _effect(effect), _flags(std::move(flags)) {}

View File

@@ -22,7 +22,8 @@ namespace CreatureLib::Library {
public:
AttackData(const ArbUt::StringView& name, u8 type, AttackCategory category, u8 power, u8 accuracy, u8 baseUsage,
AttackTarget target, i8 priority, const SecondaryEffect* effect, std::unordered_set<u32> flags);
AttackTarget target, i8 priority, const SecondaryEffect* nullable effect,
std::unordered_set<u32> flags);
virtual ~AttackData() = default;
inline const ArbUt::StringView& GetName() const noexcept { return _name; }

View File

@@ -10,12 +10,12 @@ namespace CreatureLib::Library {
private:
float _chance;
ArbUt::StringView _effectName;
ArbUt::List<EffectParameter*> _parameters;
ArbUt::List<EffectParameter * non_null> _parameters;
public:
SecondaryEffect() noexcept : _chance(0), _effectName() {}
SecondaryEffect(float chance, const ArbUt::StringView& effectName,
const ArbUt::List<EffectParameter*>& parameters) noexcept
const ArbUt::List<EffectParameter * non_null>& parameters) noexcept
: _chance(chance), _effectName(effectName), _parameters(parameters) {}
~SecondaryEffect() noexcept {
@@ -26,7 +26,7 @@ namespace CreatureLib::Library {
constexpr inline float GetChance() const noexcept { return _chance; }
constexpr inline const ArbUt::StringView& GetEffectName() const noexcept { return _effectName; }
const inline ArbUt::List<EffectParameter*>& GetParameters() const noexcept { return _parameters; }
const inline ArbUt::List<EffectParameter * non_null>& GetParameters() const noexcept { return _parameters; }
};
}

View File

@@ -1 +0,0 @@
#include "BaseLibrary.hpp"

View File

@@ -18,12 +18,12 @@ namespace CreatureLib::Library {
virtual ~BaseLibrary() noexcept { _values.Clear(); }
inline virtual void Insert(const ArbUt::StringView& key, const T* value) {
inline virtual void Insert(const ArbUt::StringView& key, const T* non_null value) {
EnsureNotNull(value)
_values.GetStdMap().insert({key.GetHash(), std::unique_ptr<const T>(value)});
_listValues.Append(key);
}
inline virtual void Insert(u32 hashedKey, const T* value) {
inline virtual void Insert(u32 hashedKey, const T* non_null value) {
EnsureNotNull(value)
_values.GetStdMap().insert({hashedKey, std::unique_ptr<const T>(value)});
_listValues.Append(hashedKey);

View File

@@ -14,7 +14,7 @@ struct CreatureSpecies::impl {
ArbUt::List<ArbUt::BorrowedPtr<const SpeciesVariant>> _variantsList;
std::unordered_set<u32> _flags;
impl(u16 id, const ArbUt::StringView& name, const SpeciesVariant* defaultVariant, float genderRatio,
impl(u16 id, const ArbUt::StringView& name, const SpeciesVariant* non_null defaultVariant, float genderRatio,
const ArbUt::StringView& growthRate, u8 captureRate, std::unordered_set<u32> flags)
: _name(name), _id(id), _genderRate(genderRatio), _growthRate(growthRate), _captureRate(captureRate),
_variantsLookup(1), _variantsList(1), _flags(std::move(flags)) {
@@ -60,7 +60,7 @@ struct CreatureSpecies::impl {
}
[[nodiscard]] inline const ArbUt::StringView& GetName() const noexcept { return _name; }
void SetVariant(const ArbUt::StringView& name, const SpeciesVariant* variant) {
void SetVariant(const ArbUt::StringView& name, const SpeciesVariant* non_null variant) {
Ensure(!name.IsEmpty())
_variantsList.CreateBack(variant);
_variantsLookup.GetStdMap().emplace(name, variant);
@@ -106,7 +106,7 @@ ArbUt::BorrowedPtr<const SpeciesVariant> CreatureSpecies::GetVariant(const ArbUt
}
ArbUt::BorrowedPtr<const SpeciesVariant> CreatureSpecies::GetVariant(u32 key) const { return _impl->GetVariant(key); }
Gender CreatureSpecies::GetRandomGender(ArbUt::Random& rand) const noexcept { return _impl->GetRandomGender(rand); }
void CreatureSpecies::SetVariant(const ArbUt::StringView& name, const SpeciesVariant* variant) {
void CreatureSpecies::SetVariant(const ArbUt::StringView& name, const SpeciesVariant* non_null variant) {
_impl->SetVariant(name, variant);
}
const ArbUt::List<ArbUt::BorrowedPtr<const SpeciesVariant>>& CreatureSpecies::GetVariantsIterator() const {

View File

@@ -23,8 +23,9 @@ namespace CreatureLib::Library {
/// @param captureRate The chance to capture the creature species, between 0 and 255. 255 means instant capture,
/// 0 means impossible to capture.
/// @param flags A set of flags for use by the developer. These can be used for easy grouping.
CreatureSpecies(u16 id, const ArbUt::StringView& name, const SpeciesVariant* defaultVariant, float genderRatio,
const ArbUt::StringView& growthRate, u8 captureRate, std::unordered_set<u32> flags = {});
CreatureSpecies(u16 id, const ArbUt::StringView& name, const SpeciesVariant* non_null defaultVariant,
float genderRatio, const ArbUt::StringView& growthRate, u8 captureRate,
std::unordered_set<u32> flags = {});
virtual ~CreatureSpecies();
@@ -84,7 +85,7 @@ namespace CreatureLib::Library {
/// @brief Appends a variant to the species.
/// @param name The unique name of the new variant.
/// @param variant The new variant to add.
void SetVariant(const ArbUt::StringView& name, const SpeciesVariant* variant);
void SetVariant(const ArbUt::StringView& name, const SpeciesVariant* non_null variant);
/// @brief Returns a list of variants of the species.
/// @return A list of variants of the species.

View File

@@ -17,7 +17,7 @@ namespace CreatureLib::Library {
public:
impl(const ArbUt::StringView& name, float height, float weight, u32 baseExperience, ArbUt::List<u8> types,
Library::StatisticSet<u16> baseStats, ArbUt::List<ArbUt::BorrowedPtr<const Talent>> talents,
ArbUt::List<ArbUt::BorrowedPtr<const Talent>> secretTalents, const LearnableAttacks* attacks,
ArbUt::List<ArbUt::BorrowedPtr<const Talent>> secretTalents, const LearnableAttacks* non_null attacks,
std::unordered_set<u32> flags)
: _name(name), _height(height), _weight(weight), _baseExperience(baseExperience),
_types(std::move((types))), _baseStatistics(baseStats), _talents(std::move(talents)),
@@ -99,7 +99,7 @@ namespace CreatureLib::Library {
const ArbUt::List<u8>& types, StatisticSet<u16> baseStats,
const ArbUt::List<ArbUt::BorrowedPtr<const Talent>>& talents,
const ArbUt::List<ArbUt::BorrowedPtr<const Talent>>& secretTalents,
const LearnableAttacks* attacks, const std::unordered_set<u32>& flags)
const LearnableAttacks* non_null attacks, const std::unordered_set<u32>& flags)
: _impl(new impl(name, height, weight, baseExperience, types, baseStats, talents, secretTalents, attacks,
flags)) {}
SpeciesVariant::~SpeciesVariant() = default;

View File

@@ -31,7 +31,7 @@ namespace CreatureLib::Library {
const ArbUt::List<u8>& types, Library::StatisticSet<u16> baseStats,
const ArbUt::List<ArbUt::BorrowedPtr<const Talent>>& talents,
const ArbUt::List<ArbUt::BorrowedPtr<const Talent>>& secretTalents,
const LearnableAttacks* attacks, const std::unordered_set<u32>& flags = {});
const LearnableAttacks* non_null attacks, const std::unordered_set<u32>& flags = {});
virtual ~SpeciesVariant();
/// @brief Returns the unique name of the variant.

View File

@@ -8,12 +8,15 @@
namespace CreatureLib::Library {
class Talent {
public:
Talent(const ArbUt::StringView& name, const ArbUt::StringView& effect, ArbUt::List<EffectParameter*> parameters)
Talent(const ArbUt::StringView& name, const ArbUt::StringView& effect,
ArbUt::List<EffectParameter * non_null> parameters)
: _name(name), _effect(effect), _parameters(std::move(parameters)) {}
[[nodiscard]] inline const ArbUt::StringView& GetName() const noexcept { return _name; }
[[nodiscard]] inline const ArbUt::StringView& GetEffect() const noexcept { return _effect; }
[[nodiscard]] inline const ArbUt::List<EffectParameter*>& GetParameters() const noexcept { return _parameters; }
[[nodiscard]] inline const ArbUt::List<EffectParameter * non_null>& GetParameters() const noexcept {
return _parameters;
}
~Talent() noexcept {
for (auto p : _parameters) {

View File

@@ -1,10 +1,11 @@
#include "DataLibrary.hpp"
CreatureLib::Library::DataLibrary::DataLibrary(LibrarySettings* settings, CreatureLib::Library::SpeciesLibrary* species,
CreatureLib::Library::AttackLibrary* attacks,
CreatureLib::Library::ItemLibrary* items,
CreatureLib::Library::GrowthRateLibrary* growthRates,
TypeLibrary* typeLibrary, TalentLibrary* talentLibrary)
CreatureLib::Library::DataLibrary::DataLibrary(LibrarySettings* non_null settings,
CreatureLib::Library::SpeciesLibrary* non_null species,
CreatureLib::Library::AttackLibrary* non_null attacks,
CreatureLib::Library::ItemLibrary* non_null items,
CreatureLib::Library::GrowthRateLibrary* non_null growthRates,
TypeLibrary* typeLibrary, TalentLibrary* non_null talentLibrary)
: _settings(settings), _species(species), _attacks(attacks), _items(items), _growthRates(growthRates),
_typeLibrary(typeLibrary), _talentLibrary(talentLibrary) {
EnsureNotNull(_settings)

View File

@@ -24,10 +24,11 @@ namespace CreatureLib::Library {
std::unique_ptr<const TalentLibrary> _talentLibrary;
public:
DataLibrary(LibrarySettings* settings, CreatureLib::Library::SpeciesLibrary* species,
CreatureLib::Library::AttackLibrary* attacks, CreatureLib::Library::ItemLibrary* items,
CreatureLib::Library::GrowthRateLibrary* growthRates, TypeLibrary* typeLibrary,
TalentLibrary* talentLibrary);
DataLibrary(LibrarySettings* non_null settings, CreatureLib::Library::SpeciesLibrary* non_null species,
CreatureLib::Library::AttackLibrary* non_null attacks,
CreatureLib::Library::ItemLibrary* non_null items,
CreatureLib::Library::GrowthRateLibrary* non_null growthRates, TypeLibrary* non_null typeLibrary,
TalentLibrary* non_null talentLibrary);
virtual ~DataLibrary() {}

View File

@@ -7,11 +7,12 @@
namespace CreatureLib::Library {
class ExternGrowthRate : public GrowthRate {
level_int_t (*_calcLevel)(u32 experience);
u32 (*_calcExperience)(level_int_t level);
level_int_t (*_calcLevel)(u32 experience) non_null;
u32 (*_calcExperience)(level_int_t level) non_null;
public:
inline ExternGrowthRate(level_int_t (*calcLevel)(u32), u32 (*calcExperience)(level_int_t level))
inline ExternGrowthRate(level_int_t (*calcLevel)(u32) non_null,
u32 (*calcExperience)(level_int_t level) non_null)
: _calcLevel(calcLevel), _calcExperience(calcExperience) {
EnsureNotNull(calcLevel)
EnsureNotNull(calcExperience)

View File

@@ -37,10 +37,12 @@ u32 CreatureLib::Library::GrowthRateLibrary::CalculateExperience(u32 hash, level
}
void CreatureLib::Library::GrowthRateLibrary::AddGrowthRate(const ArbUt::StringView& name,
CreatureLib::Library::GrowthRate* rate) {
CreatureLib::Library::GrowthRate* non_null rate) {
EnsureNotNull(rate);
_growthRates.insert({name, std::unique_ptr<const GrowthRate>(rate)});
}
void CreatureLib::Library::GrowthRateLibrary::AddGrowthRate(u32 hash, CreatureLib::Library::GrowthRate* rate) {
void CreatureLib::Library::GrowthRateLibrary::AddGrowthRate(u32 hash, CreatureLib::Library::GrowthRate* non_null rate) {
EnsureNotNull(rate);
_growthRates.insert({hash, std::unique_ptr<const GrowthRate>(rate)});
}

View File

@@ -21,8 +21,8 @@ namespace CreatureLib::Library {
[[nodiscard]] u32 CalculateExperience(const ArbUt::BasicStringView& growthRate, level_int_t level) const;
[[nodiscard]] u32 CalculateExperience(u32 hash, level_int_t level) const;
void AddGrowthRate(u32 hash, GrowthRate* rate);
void AddGrowthRate(const ArbUt::StringView& name, GrowthRate* rate);
void AddGrowthRate(u32 hash, GrowthRate* non_null rate);
void AddGrowthRate(const ArbUt::StringView& name, GrowthRate* non_null rate);
};
}

View File

@@ -1 +0,0 @@
#include "ItemLibrary.hpp"

View File

@@ -13,7 +13,7 @@ namespace CreatureLib::Library {
public:
inline impl(const ArbUt::StringView& name, ItemCategory category, BattleItemCategory battleCategory, i32 price,
const SecondaryEffect* effect, const SecondaryEffect* battleTriggerEffect,
const SecondaryEffect* nullable effect, const SecondaryEffect* nullable battleTriggerEffect,
const std::unordered_set<u32>& flags) noexcept
: _name(name), _category(category), _battleCategory(battleCategory), _price(price), _effect(effect),
_battleTriggerEffect(battleTriggerEffect), _flags(flags) {}

View File

@@ -16,7 +16,7 @@ namespace CreatureLib::Library {
public:
Item(const ArbUt::StringView& name, ItemCategory category, BattleItemCategory battleCategory, i32 price,
const SecondaryEffect* effect, const SecondaryEffect* battleTriggerEffect,
const SecondaryEffect* nullable effect, const SecondaryEffect* nullable battleTriggerEffect,
const std::unordered_set<u32>& flags) noexcept;
NO_COPY_OR_MOVE(Item)

View File

@@ -1 +0,0 @@
#include "SpeciesLibrary.hpp"

View File

@@ -12,11 +12,11 @@ namespace CreatureLib::Library {
public:
SpeciesLibrary(size_t initialCapacity = 32) : BaseLibrary(initialCapacity){};
void Insert(const ArbUt::StringView& key, const CreatureSpecies* value) override {
void Insert(const ArbUt::StringView& key, const CreatureSpecies* non_null value) override {
BaseLibrary::Insert(key, value);
_valuesById.Insert(value->GetId(), value);
}
void Insert(u32 hashedKey, const CreatureSpecies* value) override {
void Insert(u32 hashedKey, const CreatureSpecies* non_null value) override {
BaseLibrary::Insert(hashedKey, value);
_valuesById.Insert(value->GetId(), value);
}