Browse Source

TextureTools: add a NoCreate AtlasLandfill constructor.

pull/674/head
Vladimír Vondruš 1 year ago
parent
commit
42904c4fef
  1. 2
      src/Magnum/TextureTools/Atlas.cpp
  2. 14
      src/Magnum/TextureTools/Atlas.h
  3. 12
      src/Magnum/TextureTools/Test/AtlasTest.cpp

2
src/Magnum/TextureTools/Atlas.cpp

@ -214,6 +214,8 @@ AtlasLandfill::AtlasLandfill(const Vector3i& size):_state{InPlaceInit} {
AtlasLandfill::AtlasLandfill(const Vector2i& size): AtlasLandfill{{size, 1}} {} AtlasLandfill::AtlasLandfill(const Vector2i& size): AtlasLandfill{{size, 1}} {}
AtlasLandfill::AtlasLandfill(NoCreateT) noexcept {}
AtlasLandfill::AtlasLandfill(AtlasLandfill&&) noexcept = default; AtlasLandfill::AtlasLandfill(AtlasLandfill&&) noexcept = default;
AtlasLandfill::~AtlasLandfill() = default; AtlasLandfill::~AtlasLandfill() = default;

14
src/Magnum/TextureTools/Atlas.h

@ -226,6 +226,20 @@ class MAGNUM_TEXTURETOOLS_EXPORT AtlasLandfill {
*/ */
explicit AtlasLandfill(const Vector2i& size); explicit AtlasLandfill(const Vector2i& size);
/**
* @brief Construct without creating the internal state
* @m_since_latest
*
* The constructed instance is equivalent to moved-from state, i.e. no
* APIs can be safely called on the object. Useful in cases where you
* will overwrite the instance later anyway. Move another object over
* it to make it useful.
*
* Note that this is a low-level and a potentially dangerous API, see
* the documentation of @ref NoCreate for alternatives.
*/
explicit AtlasLandfill(NoCreateT) noexcept;
/** @brief Copying is not allowed */ /** @brief Copying is not allowed */
AtlasLandfill(const AtlasLandfill&) = delete; AtlasLandfill(const AtlasLandfill&) = delete;

12
src/Magnum/TextureTools/Test/AtlasTest.cpp

@ -53,6 +53,7 @@ struct AtlasTest: TestSuite::Tester {
void landfillConstruct(); void landfillConstruct();
void landfillConstructInvalidSize(); void landfillConstructInvalidSize();
void landfillConstructNoCreate();
void landfillConstructCopy(); void landfillConstructCopy();
void landfillConstructMove(); void landfillConstructMove();
@ -504,6 +505,7 @@ AtlasTest::AtlasTest() {
&AtlasTest::landfillConstruct, &AtlasTest::landfillConstruct,
&AtlasTest::landfillConstructInvalidSize, &AtlasTest::landfillConstructInvalidSize,
&AtlasTest::landfillConstructNoCreate,
&AtlasTest::landfillConstructCopy, &AtlasTest::landfillConstructCopy,
&AtlasTest::landfillConstructMove, &AtlasTest::landfillConstructMove,
@ -614,6 +616,16 @@ void AtlasTest::landfillConstructInvalidSize() {
TestSuite::Compare::String); TestSuite::Compare::String);
} }
void AtlasTest::landfillConstructNoCreate() {
AtlasLandfill a{NoCreate};
/* Shouldn't crash */
CORRADE_VERIFY(true);
/* Implicit construction is not allowed */
CORRADE_VERIFY(!std::is_convertible<NoCreateT, AtlasLandfill>::value);
}
void AtlasTest::landfillConstructCopy() { void AtlasTest::landfillConstructCopy() {
CORRADE_VERIFY(!std::is_copy_constructible<AtlasLandfill>{}); CORRADE_VERIFY(!std::is_copy_constructible<AtlasLandfill>{});
CORRADE_VERIFY(!std::is_copy_assignable<AtlasLandfill>{}); CORRADE_VERIFY(!std::is_copy_assignable<AtlasLandfill>{});

Loading…
Cancel
Save