31#include "musx/dom/Document.h"
32#include "musx/dom/ObjectPool.h"
33#include "musx/xml/XmlInterface.h"
34#include "musx/factory/ConstructionContext.h"
64 const std::shared_ptr<const T>& scoreInstance)
66 static_assert(std::is_base_of_v<dom::EnigmaBase, T>,
"T must derive from EnigmaBase");
67 MUSX_ASSERT_IF(!partInstance || !scoreInstance) {
68 throw std::invalid_argument(
"Partial sharing requires both score and part instances.");
71 throw std::invalid_argument(
"Invalid score/part instances for partial sharing.");
73 *partInstance = *scoreInstance;
74 dom::PartContextRebinder<T>::rebind(partInstance);
State shared by all factories during one document construction.
Definition ConstructionContext.h:12
Creates a details pool from an XML <details> element.
Definition PoolFactory.h:104
static dom::DetailsPoolPtr create(ConstructionContext &context, const xml::XmlElementPtr &element, const dom::DocumentPtr &document, const NodeFilter &filter={})
Definition PoolFactory.cpp:451
Creates an entry pool from an XML <entries> element.
Definition PoolFactory.h:116
static dom::EntryPoolPtr create(ConstructionContext &context, const xml::XmlElementPtr &element, const dom::DocumentPtr &document, const NodeFilter &filter={})
Definition PoolFactory.cpp:486
Creates an options pool from an XML <options> element.
Definition PoolFactory.h:80
static dom::OptionsPoolPtr create(ConstructionContext &context, const xml::XmlElementPtr &element, const dom::DocumentPtr &document, const NodeFilter &filter={})
Definition PoolFactory.cpp:421
Creates an others pool from an XML <others> element.
Definition PoolFactory.h:92
static dom::OthersPoolPtr create(ConstructionContext &context, const xml::XmlElementPtr &element, const dom::DocumentPtr &document, const NodeFilter &filter={})
Definition PoolFactory.cpp:431
Initializes a partially shared part object from its score object.
Definition PoolFactory.h:54
static void initializePartial(const std::shared_ptr< T > &partInstance, const std::shared_ptr< const T > &scoreInstance)
Copies score values into a partial part object.
Definition PoolFactory.h:63
Creates a texts pool from an XML <texts> element.
Definition PoolFactory.h:128
static dom::TextsPoolPtr create(ConstructionContext &context, const xml::XmlElementPtr &element, const dom::DocumentPtr &document, const NodeFilter &filter={})
Definition PoolFactory.cpp:505
std::shared_ptr< OthersPool > OthersPoolPtr
Shared OthersPool pointer.
Definition ObjectPool.h:674
std::shared_ptr< DetailsPool > DetailsPoolPtr
Shared DetailsPool pointer.
Definition ObjectPool.h:797
std::shared_ptr< TextsPool > TextsPoolPtr
Shared OthersPool pointer.
Definition ObjectPool.h:914
std::shared_ptr< OptionsPool > OptionsPoolPtr
Shared OptionsPool pointer.
Definition ObjectPool.h:570
std::shared_ptr< Document > DocumentPtr
Shared Document pointer.
Definition DocumentElement.h:35
std::shared_ptr< EntryPool > EntryPoolPtr
Shared EntryPool pointer.
Definition ObjectPool.h:851
std::function< bool(const xml::XmlElementPtr &)> NodeFilter
Selects which child elements a pool factory creates objects from.
Definition PoolFactory.h:50
std::shared_ptr< IXmlElement > XmlElementPtr
shared pointer to IXmlElement
Definition XmlInterface.h:127
object model for musx file (enigmaxml)
Definition BaseClasses.h:38