# HG changeset patch # User Eleni Maria Stea # Date 1389476998 -7200 # Node ID 1fbbe10c8e087f942eb151f00b84b2d5dcd50b99 # Parent 927c29b9300959044d9659540c4d1320cbe68818 quick backup diff -r 927c29b93009 -r 1fbbe10c8e08 Makefile --- a/Makefile Sat Jan 11 22:55:27 2014 +0200 +++ b/Makefile Sat Jan 11 23:49:58 2014 +0200 @@ -8,7 +8,7 @@ inc = -Isrc -I/usr/local/include -I/usr/local/lib CXX = g++ -CXXFLAGS = -pedantic -Wall $(dbg) $(opt) $(inc) +CXXFLAGS = -std=c++11 -pedantic -Wall $(dbg) $(opt) $(inc) LDFLAGS = -lGL -lGLU -lGLEW -lglut -limago -lm $(bin): $(obj) diff -r 927c29b93009 -r 1fbbe10c8e08 src/image.cc --- a/src/image.cc Sat Jan 11 22:55:27 2014 +0200 +++ b/src/image.cc Sat Jan 11 23:49:58 2014 +0200 @@ -14,6 +14,48 @@ delete [] pixels; } +//copy constructor - assignment operator +Image::Image(const Image &img) +{ + pixels = 0; + set_pixels(img.pixels, img.width, img.height); +} + +Image &Image::operator = (const Image &img) +{ + if(&img != this) { + set_pixels(img.pixels, img.width, img.height); + } + return *this; +} + +//move constructor - move operator c++11 R-value reference to image +Image::Image(Image &&img) +{ + pixels = img.pixels; + width = img.width; + height = img.height; + + img.pixels = 0; + img.width = 0; + img.height = 0; +} + +Image &Image::operator = (Image &&img) +{ + if(&img != this) { + pixels = img.pixels; + width = img.width; + height = img.height; + + img.pixels = 0; + img.width = 0; + img.height = 0; + } + + return *this; +} + bool Image::load(const char *fname) { int new_width, new_height; diff -r 927c29b93009 -r 1fbbe10c8e08 src/image.h --- a/src/image.h Sat Jan 11 22:55:27 2014 +0200 +++ b/src/image.h Sat Jan 11 23:49:58 2014 +0200 @@ -6,10 +6,19 @@ float *pixels; int width; int height; + public: Image(); ~Image(); + //copy constructor - assignment operator + Image(const Image &img); + Image &operator = (const Image &img); + + //move constructor - move operator c++11 R-value reference to image + Image(Image &&img); + Image &operator = (Image &&img); + bool load(const char *fname); float *get_pixels(); diff -r 927c29b93009 -r 1fbbe10c8e08 src/volume.cc --- a/src/volume.cc Sat Jan 11 22:55:27 2014 +0200 +++ b/src/volume.cc Sat Jan 11 23:49:58 2014 +0200 @@ -1,1 +1,30 @@ +#include + #include "volume.h" + +Volume::Volume() +{ + width = height = 0; +} + +bool Volume::load_volume(const char *fname) +{ + return true; +} + +bool Volume::push_slice(Image &&slice) +{ + if(slices.empty()) { + width = slice.get_width(); + height = slice.get_height(); + } + else { + if(width != slice.get_width() || height != slice.get_height()) { + fprintf(stderr, "failed to load slice no: %d\n", (int)slices.size() + 1); + return false; + } + } + + slices.push_back(slice); + return true; +} diff -r 927c29b93009 -r 1fbbe10c8e08 src/volume.h --- a/src/volume.h Sat Jan 11 22:55:27 2014 +0200 +++ b/src/volume.h Sat Jan 11 23:49:58 2014 +0200 @@ -7,16 +7,14 @@ class Volume { private: std::vector slices; + int width; + int height; public: Volume(); - ~Volume(); bool load_volume(const char *fname); - void push_slice(Image *slice); - - Image *get_slice(); - const Image *get_slice() const; + bool push_slice(Image &&slice); void draw(); };