#pragma once #include "Domain/Evaluation/IEvaluation.h" #include "Domain/Information/MemberInformation.h" #include class DeclarationModifierComputations { public: explicit DeclarationModifierComputations(const MemberInformation* member); [[nodiscard]] DeclarationModifier* GetDeclarationModifier() const; [[nodiscard]] DeclarationModifier* GetNextDeclarationModifier() const; [[nodiscard]] std::vector GetFollowingDeclarationModifiers() const; [[nodiscard]] const std::vector& GetArrayIndices() const; [[nodiscard]] bool IsArray() const; [[nodiscard]] int GetArraySize() const; [[nodiscard]] bool HasDynamicArrayCount() const; [[nodiscard]] const IEvaluation* GetDynamicArrayCountEvaluation() const; [[nodiscard]] std::vector GetArrayEntries() const; [[nodiscard]] bool IsSinglePointer() const; [[nodiscard]] bool IsArrayPointer() const; [[nodiscard]] const IEvaluation* GetArrayPointerCountEvaluation() const; [[nodiscard]] bool IsPointerArray() const; [[nodiscard]] const IEvaluation* GetPointerArrayCountEvaluation() const; [[nodiscard]] bool IsDynamicArray() const; [[nodiscard]] const IEvaluation* GetDynamicArraySizeEvaluation() const; [[nodiscard]] bool HasPointerModifier() const; [[nodiscard]] unsigned GetAlignment() const; private: DeclarationModifierComputations(const MemberInformation* member, std::vector modifierIndices); const MemberInformation* const m_information; std::vector m_modifier_indices; int m_combined_index; };