port image_data fixes from image_data_any branch

This commit is contained in:
Dane Springmeyer 2014-12-09 10:14:06 -05:00
parent 79366386c7
commit 4b2ad9e65f

View file

@ -41,10 +41,17 @@ struct buffer
data_(static_cast<unsigned char*>(size_ != 0 ? ::operator new(size_) : nullptr)) data_(static_cast<unsigned char*>(size_ != 0 ? ::operator new(size_) : nullptr))
{} {}
buffer(buffer && rhs) noexcept = default; buffer(buffer && rhs) noexcept
: size_(std::move(rhs.size_)),
data_(std::move(rhs.data_))
{
rhs.size_ = 0;
rhs.data_ = nullptr;
}
buffer(buffer const& rhs) buffer(buffer const& rhs)
: size_(rhs.size_), : size_(rhs.size_),
data_(rhs.data_) data_(static_cast<unsigned char*>(size_ != 0 ? ::operator new(size_) : nullptr))
{ {
if (data_) std::copy(rhs.data_, rhs.data_ + rhs.size_, data_); if (data_) std::copy(rhs.data_, rhs.data_ + rhs.size_, data_);
} }
@ -63,6 +70,7 @@ struct buffer
}; };
} }
template <typename T> template <typename T>
@ -173,7 +181,9 @@ public:
} }
inline void setRow(std::size_t row, std::size_t x0, std::size_t x1, pixel_type const* buf) inline void setRow(std::size_t row, std::size_t x0, std::size_t x1, pixel_type const* buf)
{ {
std::copy(buf, buf + (x1 - x0), pData_ + row * width_); assert(row < height_);
assert ((x1 - x0) <= width_ );
std::copy(buf, buf + (x1 - x0), pData_ + row * width_ + x0);
} }
private: private:
std::size_t width_; std::size_t width_;