28#include "musx/dom/Fundamentals.h"
29#include "musx/xml/XmlInterface.h"
30#include "musx/util/Logger.h"
46 using std::runtime_error::runtime_error;
78 virtual ~Base() noexcept(false) = default;
87 auto document = m_document.lock();
90 throw std::logic_error(
"Document pointer is no longer valid.");
121 m_unlinkedNodes.insert(nodeName);
155 : m_document(document), m_partId(partId), m_shareMode(shareMode) {}
167 const Cmper m_partId;
213 :
Base(document, partId, shareMode) {}
235 :
Base(document, partId, shareMode), m_cmper(cmper), m_inci(inci) {}
250 std::optional<Inci>
getInci()
const {
return m_inci; }
254 std::optional<Inci> m_inci;
260template <
typename ElementType,
size_t REQUIRED_SIZE = 0>
264 virtual std::string_view xmlTag()
const = 0;
269 :
OthersBase(document, partId, shareMode, cmper)
280 if constexpr (REQUIRED_SIZE > 0) {
281 const size_t originalSize =
values.size();
282 values.resize(REQUIRED_SIZE);
283 if (originalSize < REQUIRED_SIZE) {
284 MUSX_INTEGRITY_ERROR(
"Array with xml tag " + std::string(xmlTag()) +
" and cmper " + std::to_string(
getCmper())
285 +
" has fewer than " + std::to_string(REQUIRED_SIZE) +
" elements.");
311 :
Base(document, partId, shareMode), m_cmper1(cmper1), m_cmper2(cmper2), m_inci(inci) {}
327 std::optional<Inci>
getInci()
const {
return m_inci; }
332 std::optional<Inci> m_inci;
396 :
Base(document, partId, shareMode), m_textNumber(textNumber) {}
Base class to enforce polymorphism across all DOM classes.
Definition BaseClasses.h:60
DocumentPtr getDocument() const
Gets a reference to the Document.
Definition BaseClasses.h:85
virtual void integrityCheck()
Allows a class to determine if it has been properly contructed by the factory and fix issues that it ...
Definition BaseClasses.h:132
virtual bool requireAllFields() const
Specifies if the parser should alert (print or throw) when an unknown xml tag is found for this class...
Definition BaseClasses.h:144
Base(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode)
Constructs the base class.
Definition BaseClasses.h:154
ShareMode getShareMode() const
Gets the sharing mode for this instance.
Definition BaseClasses.h:109
std::set< std::string > SharedNodes
The container type for shared nodes.
Definition BaseClasses.h:63
Base & operator=(Base &&) noexcept
no-op move assignment operator allows subclasses to move their values.
Definition BaseClasses.h:163
const SharedNodes & getUnlinkedNodes() const
Gets the unlinked nodes for this instance. (Only populated for ShareMode::Partial)
Definition BaseClasses.h:114
void addUnlinkedNode(const std::string &nodeName)
Adds a shared node for this instance.
Definition BaseClasses.h:119
ShareMode
Describes how this instance is shared between part and score.
Definition BaseClasses.h:68
virtual ~Base() noexcept(false)=default
Virtual destructor for polymorphic behavior.
virtual Cmper getPartId() const
Gets the partId for this instance (or SCORE_PARTID for score)
Definition BaseClasses.h:104
Base(const Base &)=default
explicit default copy constructor
Base(Base &&) noexcept=default
explicit default move constructor
Base class for classes that are commonly used among others, details, entries, and/or texts....
Definition BaseClasses.h:178
CommonClassBase(const DocumentWeakPtr &document)
Constructs a CommonClassBase object.
Definition BaseClasses.h:185
Base class for all "details" types.
Definition BaseClasses.h:298
DetailsBase(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, Cmper cmper1, Cmper cmper2, std::optional< Inci > inci=std::nullopt)
Constructs a DetailsBase object.
Definition BaseClasses.h:310
Cmper getCmper1() const
Gets the cmper1 key value.
Definition BaseClasses.h:317
Cmper getCmper2() const
Gets the cmper2 key value.
Definition BaseClasses.h:322
std::optional< Inci > getInci() const
Gets the optional array index (inci).
Definition BaseClasses.h:327
Represents a document object that encapsulates the entire EnigmaXML structure.
Definition Document.h:51
Base class for all "details" types that use entnum rather than cmper and cmper.
Definition BaseClasses.h:339
EntryDetailsBase(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, EntryNumber entnum, std::optional< Inci > inci=std::nullopt)
Constructs a EntryDetailsBase object.
Definition BaseClasses.h:350
EntryNumber getEntryNumber() const
Gets the entnum key value.
Definition BaseClasses.h:357
Represents the default font settings for a particular element type.
Definition CommonClasses.h:110
Base class note details. Note details are entry details associated with a note ID.
Definition BaseClasses.h:368
virtual NoteNumber getNoteId() const =0
Required virtual function that returns the note id.
Base class for all "options" types.
Definition BaseClasses.h:203
OptionsBase(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode)
Constructs the OptionsBase and validates XmlNodeName in the derived class.
Definition BaseClasses.h:212
Template pattern for OthersBase items consisting of an array of a single item.
Definition BaseClasses.h:262
std::vector< ElementType > values
Definition BaseClasses.h:273
OthersArray(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, Cmper cmper)
Constructor function.
Definition BaseClasses.h:268
void integrityCheck() override
Override of Base::integrityCheck.
Definition BaseClasses.h:277
Base class for all "others" types.
Definition BaseClasses.h:223
std::optional< Inci > getInci() const
Gets the optional array index (inci).
Definition BaseClasses.h:250
OthersBase(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, Cmper cmper, std::optional< Inci > inci=std::nullopt)
Constructs an OthersBase object.
Definition BaseClasses.h:234
Cmper getCmper() const
Gets the cmper key value.
Definition BaseClasses.h:243
Base class for all text blocks.
Definition BaseClasses.h:385
Cmper getTextNumber() const
Returns the raw text number.
Definition BaseClasses.h:403
std::string text
Raw Enigma string (with Enigma string tags), encoded UTF-8.
Definition BaseClasses.h:398
std::shared_ptr< FontInfo > parseFirstFontInfo() const
Returns a shared pointer to a FontInfo instance that reflects the first font information in the text.
Definition Implementations.cpp:3244
TextsBase(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, Cmper textNumber)
Constructs a TextsBase object.
Definition BaseClasses.h:395
void setTextNumber(Cmper textNumber)
Sets the raw text number.
Definition BaseClasses.h:408
Exception for integrity errors. (Used when MUSX_THROW_ON_INTEGRITY_CHECK_FAIL is defined....
Definition BaseClasses.h:44
constexpr Cmper SCORE_PARTID
The part id of the score.
Definition Fundamentals.h:80
uint16_t Cmper
Enigma "comperator" key type.
Definition Fundamentals.h:55
std::weak_ptr< Document > DocumentWeakPtr
Shared weak Document pointer.
Definition BaseClasses.h:53
int32_t EntryNumber
Entry identifier.
Definition Fundamentals.h:68
uint16_t NoteNumber
Note identifier.
Definition Fundamentals.h:69
std::shared_ptr< Document > DocumentPtr
Shared Document pointer.
Definition BaseClasses.h:51
object model for musx file (enigmaxml)
Definition BaseClasses.h:32