about summary refs log tree commit diff stats
path: root/data/maps/the_sun_temple/doors.txtpb
diff options
context:
space:
mode:
authorStar Rauchenberger <fefferburbia@gmail.com>2025-08-28 17:15:09 -0400
committerStar Rauchenberger <fefferburbia@gmail.com>2025-08-28 17:15:09 -0400
commit51c4886f15e7e10cdee2d5b2f92510c700f0c537 (patch)
tree7d267cbc5e0f4632878045f554b3a3f13e5d83eb /data/maps/the_sun_temple/doors.txtpb
parent5a2d1f6f2462636d8389adb46ba3ff237ffe32c7 (diff)
downloadlingo2-archipelago-51c4886f15e7e10cdee2d5b2f92510c700f0c537.tar.gz
lingo2-archipelago-51c4886f15e7e10cdee2d5b2f92510c700f0c537.tar.bz2
lingo2-archipelago-51c4886f15e7e10cdee2d5b2f92510c700f0c537.zip
[Data] Replace move_paintings with receivers
Also fixed castle stairs.
Diffstat (limited to 'data/maps/the_sun_temple/doors.txtpb')
0 files changed, 0 insertions, 0 deletions
id='n135' href='#n135'>135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193
































































































































































































                                                                                 
#include "field.h"
#include <stdexcept>
#include <utility>

namespace verbly {
  namespace generator {

    field::field(const field& other)
    {
      type_ = other.type_;
      name_ = other.name_;

      switch (type_)
      {
        case type::integer:
        {
          integer_ = other.integer_;

          break;
        }

        case type::string:
        {
          new(&string_) std::string(other.string_);

          break;
        }

        case type::invalid:
        {
          break;
        }
      }
    }

    field::field(field&& other) : field()
    {
      swap(*this, other);
    }

    field& field::operator=(field other)
    {
      swap(*this, other);

      return *this;
    }

    void swap(field& first, field& second)
    {
      using type = field::type;

      type tempType = first.type_;
      std::string tempName = std::move(first.name_);
      int tempInteger;
      std::string tempString;

      switch (first.type_)
      {
        case type::integer:
        {
          tempInteger = first.integer_;

          break;
        }

        case type::string:
        {
          tempString = std::move(tempString);

          break;
        }

        case type::invalid:
        {
          break;
        }
      }

      first.~field();

      first.type_ = second.type_;
      first.name_ = std::move(second.name_);

      switch (second.type_)
      {
        case type::integer:
        {
          first.integer_ = second.integer_;

          break;
        }

        case type::string:
        {
          new(&first.string_) std::string(std::move(second.string_));

          break;
        }

        case type::invalid:
        {
          break;
        }
      }

      second.~field();

      second.type_ = tempType;
      second.name_ = std::move(tempName);

      switch (tempType)
      {
        case type::integer:
        {
          second.integer_ = tempInteger;

          break;
        }

        case type::string:
        {
          new(&second.string_) std::string(std::move(tempString));

          break;
        }

        case type::invalid:
        {
          break;
        }
      }
    }

    field::~field()
    {
      switch (type_)
      {
        case type::string:
        {
          using string_type = std::string;
          string_.~string_type();

          break;
        }

        case type::integer:
        case type::invalid:
        {
          break;
        }
      }
    }

    field::field(
      std::string name,
      int arg) :
        type_(type::integer),
        name_(name),
        integer_(arg)
    {
    }

    int field::getInteger() const
    {
      if (type_ != type::integer)
      {
        throw std::domain_error("field::getInteger called on non-integer field");
      }

      return integer_;
    }

    field::field(
      std::string name,
      std::string arg) :
        type_(type::string),
        name_(name)
    {
      new(&string_) std::string(arg);
    }

    std::string field::getString() const
    {
      if (type_ != type::string)
      {
        throw std::domain_error("field::getString called on non-string field");
      }

      return string_;
    }

  };
};