31#include "musx/dom/Document.h"
32#include "musx/dom/ObjectPool.h"
33#include "musx/xml/XmlInterface.h"
34#include "musx/factory/ConstructionContext.h"
61 template <
typename T,
typename NodeNames>
63 const std::shared_ptr<const T>& scoreInstance,
64 const NodeNames& unlinkedNodeNames)
66 static_assert(std::is_base_of_v<dom::EnigmaBase, T>,
"T must derive from EnigmaBase");
67 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);
75 for (
const auto& nodeName : unlinkedNodeNames) {
76 partInstance->addUnlinkedNode(std::string(nodeName));
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:107
static dom::DetailsPoolPtr create(ConstructionContext &context, const xml::XmlElementPtr &element, const dom::DocumentPtr &document, const NodeFilter &filter={})
Definition PoolFactory.cpp:455
Creates an entry pool from an XML <entries> element.
Definition PoolFactory.h:119
static dom::EntryPoolPtr create(ConstructionContext &context, const xml::XmlElementPtr &element, const dom::DocumentPtr &document, const NodeFilter &filter={})
Definition PoolFactory.cpp:490
Creates an options pool from an XML <options> element.
Definition PoolFactory.h:83
static dom::OptionsPoolPtr create(ConstructionContext &context, const xml::XmlElementPtr &element, const dom::DocumentPtr &document, const NodeFilter &filter={})
Definition PoolFactory.cpp:425
Creates an others pool from an XML <others> element.
Definition PoolFactory.h:95
static dom::OthersPoolPtr create(ConstructionContext &context, const xml::XmlElementPtr &element, const dom::DocumentPtr &document, const NodeFilter &filter={})
Definition PoolFactory.cpp:435
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, const NodeNames &unlinkedNodeNames)
Copies score values into a partial part object and records its unlinked fields.
Definition PoolFactory.h:62
Creates a texts pool from an XML <texts> element.
Definition PoolFactory.h:131
static dom::TextsPoolPtr create(ConstructionContext &context, const xml::XmlElementPtr &element, const dom::DocumentPtr &document, const NodeFilter &filter={})
Definition PoolFactory.cpp:509
std::shared_ptr< OthersPool > OthersPoolPtr
Shared OthersPool pointer.
Definition ObjectPool.h:622
std::shared_ptr< DetailsPool > DetailsPoolPtr
Shared DetailsPool pointer.
Definition ObjectPool.h:722
std::shared_ptr< TextsPool > TextsPoolPtr
Shared OthersPool pointer.
Definition ObjectPool.h:839
std::shared_ptr< OptionsPool > OptionsPoolPtr
Shared OptionsPool pointer.
Definition ObjectPool.h:540
std::shared_ptr< Document > DocumentPtr
Shared Document pointer.
Definition DocumentElement.h:35
std::shared_ptr< EntryPool > EntryPoolPtr
Shared EntryPool pointer.
Definition ObjectPool.h:776
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:39