From 2a5150e060d7395341257520b3d437e25d106522 Mon Sep 17 00:00:00 2001 From: Sam Hocevar Date: Thu, 7 Aug 2014 13:33:02 +0000 Subject: [PATCH] base: VISUQL STUDIO JTE NIAUE Q LQ KQLQSH. --- src/image/image.cpp | 6 ++---- src/lol/image/image.h | 9 ++++++++- src/lol/math/arraynd.h | 6 ++++-- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/image/image.cpp b/src/image/image.cpp index 821f2f0a..0a97e91b 100644 --- a/src/image/image.cpp +++ b/src/image/image.cpp @@ -197,11 +197,9 @@ template typename PixelType::type *Image::Lock() } /* The Lock2D() method */ -template array2d::type> &Image::Lock2D() +void *Image::Lock2DHelper(PixelFormat T) { - SetFormat(T); - - return *(array2d::type> *)m_data->m_pixels[(int)T]->Data2D(); + return m_data->m_pixels[(int)T]->Data2D(); } template diff --git a/src/lol/image/image.h b/src/lol/image/image.h index 7a30b49d..ef435f05 100644 --- a/src/lol/image/image.h +++ b/src/lol/image/image.h @@ -87,7 +87,12 @@ public: void Unlock(void const *pixels); template - array2d::type> &Lock2D(); + inline array2d::type> &Lock2D() + { + /* Hack: this indirection is needed because of a Visual Studio ICE */ + return *(array2d::type> *)Lock2DHelper(T); + } + template void Unlock2D(array2d const &); @@ -150,6 +155,8 @@ public: static Image Difference(Image &src1, Image &src2); private: + void *Lock2DHelper(PixelFormat T); + class ImageData *m_data; }; diff --git a/src/lol/math/arraynd.h b/src/lol/math/arraynd.h index 84d435a9..d0bb7377 100644 --- a/src/lol/math/arraynd.h +++ b/src/lol/math/arraynd.h @@ -257,8 +257,10 @@ private: { ptrdiff_t total_size = 1; - for (auto size : m_sizes) - total_size *= size; + /* HACK: we can't use for (auto s : m_sizes) because of an ICE in + * the Visual Studio compiler. */ + for (int i = 0; i < N; ++i) + total_size *= m_sizes[i]; this->Resize(total_size, e); }