TLIGHT_PRODUCTS / WS281X
Revision:
32:64c391617f6c
Parent:
29:a362df191524
Child:
34:5a141ed5d52a
--- a/PixelBuffer.cpp	Tue Sep 13 12:04:51 2016 +0000
+++ b/PixelBuffer.cpp	Thu Oct 13 23:51:20 2016 +0000
@@ -8,6 +8,8 @@
  */
 #include "PixelBuffer.h"
 
+#define USE_MALLOC          1   // 0:new, 1:malloc
+
 //----------------------------------------------------------------------------
 // 指定されたバッファの先頭からblock_size分をbuf_sizeが満杯になるまで繰り返しコピーする
 template <class T>
@@ -30,14 +32,14 @@
 
 //----------------------------------------------------------------------------
 RGBPixels::RGBPixels(RGBColor *buffer, int maxPixels)
-    : _buf_owner(false)
+    : _owned_buffer(false)
 {
     _dummyPixel = 0;
     setPixelBuffer(buffer, maxPixels);
 }
 
 RGBPixels::RGBPixels(int maxPixels)
-    : _buf_owner(false)
+    : _owned_buffer(false)
 {
     _dummyPixel = 0;
     setPixelBuffer(nullptr, maxPixels);
@@ -45,23 +47,35 @@
 
 RGBPixels::~RGBPixels()
 {
-    if (_buf_owner && _pixels)
-        delete[] _pixels;
+    setPixelBuffer(0, 0);
 }
 
 void RGBPixels::setPixelBuffer(RGBColor *buffer, int maxPixels)
 {
-    if (_buf_owner && _pixels)
+    if (_owned_buffer && _pixels)
+    {
+#if USE_MALLOC
+        free(_pixels);
+#else
         delete[] _pixels;
+#endif
+    }
+    _owned_buffer = false;
+    _maxPixels = (maxPixels < 0) ? 0 : (maxPixels > MAX_PIXELS) ? MAX_PIXELS : maxPixels;
+    _pixels = (!_maxPixels) ? NULL : buffer;
 
-    _buf_owner = false;
-    _pixels = buffer;
-
-    _maxPixels = (maxPixels < 0) ? 0 : (maxPixels > MAX_PIXELS) ? MAX_PIXELS : maxPixels;
     if (!_pixels && _maxPixels > 0)
     {
+#if USE_MALLOC
+        _pixels = static_cast<RGBColor*>(malloc(sizeof(RGBColor)*_maxPixels));
+        if (_pixels)
+            _owned_buffer = true;
+        else
+            _maxPixels = 0;
+#else
         _pixels = new RGBColor[_maxPixels];
-        _buf_owner = true;
+        _owned_buffer = true;
+#endif
     }
     _numPixels = _maxPixels;
     clear();
@@ -222,14 +236,14 @@
 //----------------------------------------------------------------------------
 //----------------------------------------------------------------------------
 HSVPixels::HSVPixels(HSVColor *buffer, int maxPixels)
-    : _buf_owner(false)
+    : _owned_buffer(false)
 {
     _dummyPixel = 0;
     setPixelBuffer(buffer, maxPixels);
 }
 
 HSVPixels::HSVPixels(int maxPixels)
-    : _buf_owner(false)
+    : _owned_buffer(false)
 {
     _dummyPixel = 0;
     setPixelBuffer(nullptr, maxPixels);
@@ -237,23 +251,35 @@
 
 HSVPixels::~HSVPixels()
 {
-    if (_buf_owner && _pixels)
-        delete[] _pixels;
+    setPixelBuffer(0, 0);
 }
 
 void HSVPixels::setPixelBuffer(HSVColor *buffer, int maxPixels)
 {
-    if (_buf_owner && _pixels)
+    if (_owned_buffer && _pixels)
+    {
+#if USE_MALLOC
+        free(_pixels);
+#else
         delete[] _pixels;
+#endif
+    }
+    _owned_buffer = false;
+    _maxPixels = (maxPixels < 0) ? 0 : (maxPixels > MAX_PIXELS) ? MAX_PIXELS : maxPixels;
+    _pixels = (!_maxPixels) ? NULL : buffer;
 
-    _buf_owner = false;
-    _pixels = buffer;
-
-    _maxPixels = (maxPixels < 0) ? 0 : (maxPixels > MAX_PIXELS) ? MAX_PIXELS : maxPixels;
     if (!_pixels && _maxPixels > 0)
     {
+#if USE_MALLOC
+        _pixels = static_cast<HSVColor*>(malloc(sizeof(HSVColor)*_maxPixels));
+        if (_pixels)
+            _owned_buffer = true;
+        else
+            _maxPixels = 0;
+#else
         _pixels = new HSVColor[_maxPixels];
-        _buf_owner = true;
+        _owned_buffer = true;
+#endif
     }
     _numPixels = _maxPixels;
     clear();