mirror of
https://github.com/tristanpenman/valijson.git
synced 2024-12-12 10:13:51 +01:00
Merge pull request #187 from jackorobot/move_schema
Implemented functioning move constructors/operators
This commit is contained in:
commit
27f7e75ca1
@ -42,11 +42,37 @@ public:
|
|||||||
// Disable copy assignment
|
// Disable copy assignment
|
||||||
Schema & operator=(const Schema &) = delete;
|
Schema & operator=(const Schema &) = delete;
|
||||||
|
|
||||||
// Default move construction
|
/**
|
||||||
Schema(Schema &&other) = default;
|
* @brief Move construct a new Schema
|
||||||
|
*
|
||||||
|
* @param other Schema that is moved into the new Schema
|
||||||
|
*/
|
||||||
|
Schema(Schema &&other)
|
||||||
|
: Subschema(std::move(other)),
|
||||||
|
subschemaSet(std::move(other.subschemaSet)),
|
||||||
|
sharedEmptySubschema(other.sharedEmptySubschema)
|
||||||
|
{
|
||||||
|
// Makes other invalid by setting sharedEmptySubschema to nullptr
|
||||||
|
other.sharedEmptySubschema = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
// Disable copy assignment
|
/**
|
||||||
Schema & operator=(Schema &&) = default;
|
* @brief Move assign a Schema
|
||||||
|
*
|
||||||
|
* @param other Schema that is move assigned to this Schema
|
||||||
|
* @return Schema&
|
||||||
|
*/
|
||||||
|
Schema & operator=(Schema &&other)
|
||||||
|
{
|
||||||
|
// Calls the base class move assignment operator
|
||||||
|
Subschema::operator=(std::move(other));
|
||||||
|
|
||||||
|
// Swaps all Schema members
|
||||||
|
std::swap(subschemaSet, other.subschemaSet);
|
||||||
|
std::swap(sharedEmptySubschema, other.sharedEmptySubschema);
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Clean up and free all memory managed by the Schema
|
* @brief Clean up and free all memory managed by the Schema
|
||||||
@ -56,9 +82,12 @@ public:
|
|||||||
*/
|
*/
|
||||||
~Schema() override
|
~Schema() override
|
||||||
{
|
{
|
||||||
sharedEmptySubschema->~Subschema();
|
if(sharedEmptySubschema != nullptr)
|
||||||
m_freeFn(const_cast<Subschema *>(sharedEmptySubschema));
|
{
|
||||||
sharedEmptySubschema = nullptr;
|
sharedEmptySubschema->~Subschema();
|
||||||
|
m_freeFn(const_cast<Subschema *>(sharedEmptySubschema));
|
||||||
|
sharedEmptySubschema = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
#if VALIJSON_USE_EXCEPTIONS
|
#if VALIJSON_USE_EXCEPTIONS
|
||||||
try {
|
try {
|
||||||
|
@ -43,11 +43,39 @@ public:
|
|||||||
// Disable copy assignment
|
// Disable copy assignment
|
||||||
Subschema & operator=(const Subschema &) = delete;
|
Subschema & operator=(const Subschema &) = delete;
|
||||||
|
|
||||||
// Default move construction
|
/**
|
||||||
Subschema(Subschema &&) = default;
|
* @brief Move construct a new Subschema
|
||||||
|
*
|
||||||
|
* @param other Subschema that is moved into the new Subschema
|
||||||
|
*/
|
||||||
|
Subschema(Subschema &&other)
|
||||||
|
: m_allocFn(other.m_allocFn),
|
||||||
|
m_freeFn(other.m_freeFn),
|
||||||
|
m_alwaysInvalid(std::move(other.m_alwaysInvalid)),
|
||||||
|
m_constraints(std::move(other.m_constraints)),
|
||||||
|
m_description(std::move(other.m_description)),
|
||||||
|
m_id(std::move(other.m_id)),
|
||||||
|
m_title(std::move(other.m_title)) { }
|
||||||
|
|
||||||
// Default move assignment
|
/**
|
||||||
Subschema & operator=(Subschema &&) = default;
|
* @brief Move assign a Subschema
|
||||||
|
*
|
||||||
|
* @param other Subschema that is move assigned to this Subschema
|
||||||
|
* @return Subschema&
|
||||||
|
*/
|
||||||
|
Subschema & operator=(Subschema &&other)
|
||||||
|
{
|
||||||
|
// Swaps all members
|
||||||
|
std::swap(m_allocFn, other.m_allocFn);
|
||||||
|
std::swap(m_freeFn, other.m_freeFn);
|
||||||
|
std::swap(m_alwaysInvalid, other.m_alwaysInvalid);
|
||||||
|
std::swap(m_constraints, other.m_constraints);
|
||||||
|
std::swap(m_description, other.m_description);
|
||||||
|
std::swap(m_id, other.m_id);
|
||||||
|
std::swap(m_title, other.m_title);
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Construct a new Subschema object
|
* @brief Construct a new Subschema object
|
||||||
|
Loading…
Reference in New Issue
Block a user