From a1ff1d4b0051836c3651cedc968a66e33c264f76 Mon Sep 17 00:00:00 2001 From: "shewitt.au" Date: Sun, 25 May 2025 17:45:53 +1000 Subject: [PATCH] cast-to-int-format-error-v3 --- lib/include/pl/patterns/pattern.hpp | 105 +----------------- .../pl/patterns/pattern_array_dynamic.hpp | 4 +- .../pl/patterns/pattern_array_static.hpp | 4 +- lib/include/pl/patterns/pattern_bitfield.hpp | 10 +- lib/include/pl/patterns/pattern_enum.hpp | 2 +- lib/include/pl/patterns/pattern_pointer.hpp | 2 +- lib/include/pl/patterns/pattern_struct.hpp | 4 +- lib/include/pl/patterns/pattern_union.hpp | 4 +- 8 files changed, 20 insertions(+), 115 deletions(-) diff --git a/lib/include/pl/patterns/pattern.hpp b/lib/include/pl/patterns/pattern.hpp index 1a478f3f..70620e44 100644 --- a/lib/include/pl/patterns/pattern.hpp +++ b/lib/include/pl/patterns/pattern.hpp @@ -61,7 +61,7 @@ namespace pl::ptrn { friend class core::Evaluator; }; - class Pattern { + class Pattern : public std::enable_shared_from_this { public: constexpr static u64 MainSectionId = 0x0000'0000'0000'0000; constexpr static u64 HeapSectionId = 0xFFFF'FFFF'FFFF'FFFF; @@ -82,7 +82,7 @@ namespace pl::ptrn { } - Pattern(const Pattern &other) { + Pattern(const Pattern &other) : std::enable_shared_from_this(other) { this->m_evaluator = other.m_evaluator; this->m_offset = other.m_offset; this->m_endian = other.m_endian; @@ -115,6 +115,8 @@ namespace pl::ptrn { } } + std::shared_ptr get_shared() { return shared_from_this(); } + virtual std::unique_ptr clone() const = 0; [[nodiscard]] u64 getOffset() const { return this->m_offset; } @@ -635,101 +637,4 @@ namespace pl::ptrn { bool m_manualColor = false; }; - struct PatternRef { - class NoIIndexable {}; - class NoIInlinable {}; - class NoIIterable { - public: - NoIIterable(auto*){} - }; - - template - class PatternRefIterable : public IIndexable { - public: - PatternRefIterable() = default; - PatternRefIterable(T *refPattern) : m_refPattern(refPattern) {} - PatternRefIterable(const PatternRefIterable &other) { - this->m_refPattern = other.m_refPattern; - } - - std::vector> getEntries() override { - return m_refPattern->getEntries(); - } - - void setEntries(const std::vector> &entries) override { - m_refPattern->setEntries(entries); - } - - [[nodiscard]] std::shared_ptr getEntry(size_t index) const override { - return m_refPattern->getEntry(index); - } - - void forEachEntry(u64 start, u64 end, const std::function &callback) override { - m_refPattern->forEachEntry(start, end, callback); - } - - [[nodiscard]] size_t getEntryCount() const override { - return m_refPattern->getEntryCount(); - } - - void addEntry(const std::shared_ptr &entry) override { - return m_refPattern->addEntry(entry); - } - - private: - T *m_refPattern; - }; - - template - class PatternRefImpl - : public Pattern, - public std::conditional_t, IInlinable, NoIInlinable>, - public std::conditional_t || std::derived_from, PatternRefIterable, NoIIterable> { - public: - PatternRefImpl() = default; - PatternRefImpl(T *refPattern) - : Pattern(refPattern->getEvaluator(), refPattern->getOffset(), refPattern->getSize(), refPattern->getLine()), - std::conditional_t || std::derived_from, PatternRefIterable, NoIIterable>(refPattern) { - this->m_refPattern = refPattern; - } - - PatternRefImpl(const PatternRefImpl &other) - : Pattern(other), - std::conditional_t || std::derived_from, PatternRefIterable, NoIIterable>(other), - m_refPattern(other.m_refPattern) {} - - std::unique_ptr clone() const override { - return std::make_unique(*this); - } - - void accept(PatternVisitor &v) override { - m_refPattern->accept(v); - } - - std::string formatDisplayValue() override { - return m_refPattern->formatDisplayValue(); - } - - std::string getFormattedName() const override { - return m_refPattern->getFormattedName(); - } - - std::vector getRawBytes() override { - return m_refPattern->getRawBytes(); - } - - bool operator==(const Pattern &other) const override { - return *this->m_refPattern == other; - } - - private: - T *m_refPattern; - }; - - template - static std::shared_ptr create(PatternType *pattern) { - return std::shared_ptr(new PatternRefImpl>(pattern)); - } - }; - -} +} // namespace pl::ptrn \ No newline at end of file diff --git a/lib/include/pl/patterns/pattern_array_dynamic.hpp b/lib/include/pl/patterns/pattern_array_dynamic.hpp index eb768745..9141e88b 100644 --- a/lib/include/pl/patterns/pattern_array_dynamic.hpp +++ b/lib/include/pl/patterns/pattern_array_dynamic.hpp @@ -173,7 +173,7 @@ namespace pl::ptrn { result += " ]"; - return Pattern::callUserFormatFunc(PatternRef::create(this), true).value_or(result); + return Pattern::callUserFormatFunc(get_shared(), true).value_or(result); } [[nodiscard]] bool operator==(const Pattern &other) const override { @@ -208,7 +208,7 @@ namespace pl::ptrn { } std::string formatDisplayValue() override { - return Pattern::callUserFormatFunc(PatternRef::create(this)).value_or("[ ... ]"); + return Pattern::callUserFormatFunc(get_shared()).value_or("[ ... ]"); } std::vector getRawBytes() override { diff --git a/lib/include/pl/patterns/pattern_array_static.hpp b/lib/include/pl/patterns/pattern_array_static.hpp index 9e29ee77..a47f2c86 100644 --- a/lib/include/pl/patterns/pattern_array_static.hpp +++ b/lib/include/pl/patterns/pattern_array_static.hpp @@ -191,7 +191,7 @@ namespace pl::ptrn { } std::string formatDisplayValue() override { - return Pattern::callUserFormatFunc(PatternRef::create(this)).value_or("[ ... ]"); + return Pattern::callUserFormatFunc(get_shared()).value_or("[ ... ]"); } [[nodiscard]] std::string toString() override { @@ -220,7 +220,7 @@ namespace pl::ptrn { result += " ]"; - return Pattern::callUserFormatFunc(PatternRef::create(this), true).value_or(result); + return Pattern::callUserFormatFunc(get_shared(), true).value_or(result); } std::vector getRawBytes() override { diff --git a/lib/include/pl/patterns/pattern_bitfield.hpp b/lib/include/pl/patterns/pattern_bitfield.hpp index 5d9788bd..1202c784 100644 --- a/lib/include/pl/patterns/pattern_bitfield.hpp +++ b/lib/include/pl/patterns/pattern_bitfield.hpp @@ -455,7 +455,7 @@ namespace pl::ptrn { result += " ]"; - return Pattern::callUserFormatFunc(PatternRef::create(this), true).value_or(result); + return Pattern::callUserFormatFunc(get_shared(), true).value_or(result); } [[nodiscard]] bool operator==(const Pattern &other) const override { @@ -495,7 +495,7 @@ namespace pl::ptrn { } std::string formatDisplayValue() override { - return Pattern::callUserFormatFunc(PatternRef::create(this)).value_or("[ ... ]"); + return Pattern::callUserFormatFunc(get_shared()).value_or("[ ... ]"); } void sort(const std::function &comparator) override { @@ -691,7 +691,7 @@ namespace pl::ptrn { result += " }"; - return Pattern::callUserFormatFunc(PatternRef::create(this), true).value_or(result); + return Pattern::callUserFormatFunc(get_shared(), true).value_or(result); } std::string formatDisplayValue() override { @@ -725,9 +725,9 @@ namespace pl::ptrn { } if (valueString.size() > 64) - return Pattern::callUserFormatFunc(PatternRef::create(this)).value_or(fmt::format("{{ ... }}", valueString)); + return Pattern::callUserFormatFunc(get_shared()).value_or(fmt::format("{{ ... }}", valueString)); else - return Pattern::callUserFormatFunc(PatternRef::create(this)).value_or(fmt::format("{{ {} }}", valueString)); + return Pattern::callUserFormatFunc(get_shared()).value_or(fmt::format("{{ {} }}", valueString)); } void setEndian(std::endian endian) override { diff --git a/lib/include/pl/patterns/pattern_enum.hpp b/lib/include/pl/patterns/pattern_enum.hpp index 1da766ab..811780fd 100644 --- a/lib/include/pl/patterns/pattern_enum.hpp +++ b/lib/include/pl/patterns/pattern_enum.hpp @@ -86,7 +86,7 @@ namespace pl::ptrn { [[nodiscard]] std::string toString() override { u128 value = this->getValue().toUnsigned(); - return Pattern::callUserFormatFunc(PatternRef::create(this), true).value_or(getEnumName(this->getTypeName(), value, m_enumValues)); + return Pattern::callUserFormatFunc(get_shared(), true).value_or(getEnumName(this->getTypeName(), value, m_enumValues)); } std::vector getRawBytes() override { diff --git a/lib/include/pl/patterns/pattern_pointer.hpp b/lib/include/pl/patterns/pattern_pointer.hpp index fa834512..bcf110f1 100644 --- a/lib/include/pl/patterns/pattern_pointer.hpp +++ b/lib/include/pl/patterns/pattern_pointer.hpp @@ -155,7 +155,7 @@ namespace pl::ptrn { [[nodiscard]] std::string toString() override { auto result = this->m_pointedAt->toString(); - return Pattern::callUserFormatFunc(PatternRef::create(this), true).value_or(result); + return Pattern::callUserFormatFunc(get_shared(), true).value_or(result); } std::vector getRawBytes() override { diff --git a/lib/include/pl/patterns/pattern_struct.hpp b/lib/include/pl/patterns/pattern_struct.hpp index 28f087a6..2dccea92 100644 --- a/lib/include/pl/patterns/pattern_struct.hpp +++ b/lib/include/pl/patterns/pattern_struct.hpp @@ -153,7 +153,7 @@ namespace pl::ptrn { result += " }"; - return Pattern::callUserFormatFunc(PatternRef::create(this), true).value_or(result); + return Pattern::callUserFormatFunc(get_shared(), true).value_or(result); } void sort(const std::function &comparator) override { @@ -199,7 +199,7 @@ namespace pl::ptrn { } std::string formatDisplayValue() override { - return Pattern::callUserFormatFunc(PatternRef::create(this)).value_or("{ ... }"); + return Pattern::callUserFormatFunc(get_shared()).value_or("{ ... }"); } std::vector getRawBytes() override { diff --git a/lib/include/pl/patterns/pattern_union.hpp b/lib/include/pl/patterns/pattern_union.hpp index 2b3470db..f4f86144 100644 --- a/lib/include/pl/patterns/pattern_union.hpp +++ b/lib/include/pl/patterns/pattern_union.hpp @@ -152,7 +152,7 @@ namespace pl::ptrn { result += " }"; - return Pattern::callUserFormatFunc(PatternRef::create(this), true).value_or(result); + return Pattern::callUserFormatFunc(get_shared(), true).value_or(result); } void sort(const std::function &comparator) override { @@ -198,7 +198,7 @@ namespace pl::ptrn { } std::string formatDisplayValue() override { - return Pattern::callUserFormatFunc(PatternRef::create(this)).value_or("{ ... }"); + return Pattern::callUserFormatFunc(get_shared()).value_or("{ ... }"); } std::vector getRawBytes() override {