MNX Document Model
Loading...
Searching...
No Matches
mnx::ContentArray< BaseContentT > Class Template Reference

Class for content arrays. More...

#include <ContentArray.h>

+ Inheritance diagram for mnx::ContentArray< BaseContentT >:

Public Types

using BaseArray = Array< BaseContentT >
 The base array type.
 
- Public Types inherited from mnx::Array< BaseContentT >
using value_type = BaseContentT
 The type for elements in this Array.
 
using iterator = iter< Array >
 non-const iterator type
 
using const_iterator = iter< const Array >
 const iterator type
 

Public Member Functions

template<typename T , std::enable_if_t< std::is_base_of_v< BaseContentT, T >, int > = 0>
get (size_t index) const
 Retrieve an element from the array as a specific type.
 
BaseContentT append (...)=delete
 
- Public Member Functions inherited from mnx::Array< BaseContentT >
 Array ()
 Constructor for detached array instance.
 
 Array (const std::shared_ptr< json > &root, json_pointer pointer)
 Wraps an Array class around an existing JSON array node.
 
 Array (Base &parent, std::string_view key)
 Creates a new Array class as a child of a JSON node.
 
size_t size () const
 Get the size of the array.
 
bool empty () const
 Check if the array is empty.
 
void clear ()
 Clear all elements.
 
BaseContentT at (size_t index) const
 Direct getter for a particular element.
 
BaseContentT front () const
 Access the first element.
 
BaseContentT back () const
 Access the last element.
 
auto operator[] (size_t index) const
 const operator[]
 
auto operator[] (size_t index)
 non-const operator[]
 
std::enable_if_t<!std::is_base_of_v< Base, U >, void > push_back (const U &value)
 Append a new value to the array. (Available only for primitive types)
 
std::enable_if_t<!std::is_base_of_v< Base, U >, void > assign (InputIt first, InputIt last)
 Replace all elements with values from an iterator range. (Available only for primitive types)
 
std::enable_if_t<!std::is_base_of_v< Base, U >, void > assign (const std::vector< U > &values)
 Replace all elements with values from a vector. (Available only for primitive types)
 
void erase (size_t index)
 Remove an element at a given index.
 
std::enable_if_t<!std::is_base_of_v< Base, U >, std::vector< U > > toStdVector () const
 Converts the Array to an owning std::vector.
 
auto begin ()
 Returns an iterator to the beginning of the array.
 
auto begin () const
 Returns a const iterator to the beginning of the array.
 
auto end ()
 Returns an iterator to the end of the array.
 
auto end () const
 Returns a const iterator to the end of the array.
 
- Public Member Functions inherited from mnx::Base
 Base (const Base &src)
 Copy constructor.
 
 Base (Base &&src) noexcept
 Move constructor.
 
Baseoperator= (const Base &src)
 Copy assignment operator.
 
Baseoperator= (Base &&src)
 Move assignment operator.
 
std::string dump (int indents=-1) const
 Dumps the branch to a string. Useful in debugging.
 
template<typename T >
parent () const
 Returns the parent object for this node.
 
template<typename T , typename Scope = scope::Default>
std::optional< T > getEnclosingElement () const
 Returns the enclosing array element for this instance. If T is a type that can be nested (e.g. ContentObject), the highest level instance is returned. (To get the lowest level immediate container, use ContentObject::container.)
 
json_pointer pointer () const
 Returns the json_pointer for this node.
 
Document document () const
 Returns the document root.
 
bool empty () const
 Returns true if the object is empty.
 
- Public Member Functions inherited from mnx::detail::ArrayAppendBase< Derived, T >
template<typename U = T, typename... Args, std::enable_if_t< std::is_base_of_v< Base, U >, int > = 0>
append (Args &&... args)
 Append a new element at the end of the array. (Available only for Base types)
 

Protected Member Functions

template<typename T , typename... Args>
appendWithType (Args &&... args)
 
template<typename T , std::enable_if_t< std::is_base_of_v< BaseContentT, T >, int > = 0>
getTypedObject (size_t index) const
 Constructs an object of type T if its type matches the JSON type.
 
- Protected Member Functions inherited from mnx::Array< BaseContentT >
void checkIndex (size_t index) const
 validates that an index is not out of range
 
- Protected Member Functions inherited from mnx::Base
jsonref () const
 Convert this node for retrieval.
 
jsonref ()
 Access the JSON node for modification.
 
const std::shared_ptr< json > & root () const
 Returns the root.
 
 Base (const std::shared_ptr< json > &root, json_pointer pointer)
 Wrap a Base instance around a specific JSON reference using a json_pointer.
 
 Base (json &&jsonRef, Base &parent, std::string_view key)
 Construct a Base reference as a child inside a parent node.
 
template<typename T >
getChild (std::string_view key) const
 Retrieves and validates a required child node.
 
template<typename T >
setChild (std::string_view key, const T &value)
 Sets a child node.
 
template<typename T >
std::optional< T > getOptionalChild (std::string_view key) const
 Retrieves an optional child node.
 

Detailed Description

template<typename BaseContentT>
class mnx::ContentArray< BaseContentT >

Class for content arrays.

Allows arrays of any type that derives from ContentObject. An exampled of how to get type instances is:

auto next = content[index]; // gets the base ContentObject instance.
if (next.type() == layout::Group::ContentTypeValue) {
auto group = next.get<layout::Group>(); // gets the instance typed as a layout::Group.
// process group
} else if (next.type() == layout::Staff::ContentTypeValue) {
auto staff = next.get<layout::Staff>(); // gets the instance typed as a layout::Staff.
// process staff
}
T get() const
Constructs an object of type T if its type matches the JSON type.
Definition BaseTypes.h:752
Represents a groups of staves within an MNX layout.
Definition Layout.h:129
static constexpr std::string_view ContentTypeValue
type value that identifies the type within the content array
Definition Layout.h:154
Represents a single staff instance within an MNX layout.
Definition Layout.h:102
static constexpr std::string_view ContentTypeValue
type value that identifies the type within the content array
Definition Layout.h:121

Member Function Documentation

◆ getTypedObject()

template<typename BaseContentT >
template<typename T , std::enable_if_t< std::is_base_of_v< BaseContentT, T >, int > = 0>
T mnx::ContentArray< BaseContentT >::getTypedObject ( size_t  index) const
inlineprotected

Constructs an object of type T if its type matches the JSON type.

Exceptions
std::invalid_argumentif there is a type mismatch