diff --git a/DSArray.h b/DSArray.h new file mode 100644 index 0000000..03c4359 --- /dev/null +++ b/DSArray.h @@ -0,0 +1,143 @@ +#ifndef _DS_ARRAY +#define _DS_ARRAY + +#include "TArray.h" + +// x + this.width * y +// i % width +// i / width + +class DSArray { +public: + int width, height; + int type; + TArray* data; + + std::list::iterator list_it; + + DSArray(int type, int width, int height); + ~DSArray(); + + + + void set(int x, int y, double val); + double get(int x, int y); + void set_region( int x1, int y1, int x2, int y2, double val ); + + unsigned int write( char* buffer, unsigned int offset ); + unsigned int read( char* buffer, unsigned int offset ); + unsigned int write_compressed( char* buffer, unsigned int offset ); + unsigned int read_compressed( char* buffer, unsigned int offset ); + void clear( double val ); + + int find_index( double val, int offset ); + + //void resize( int new_width, int new_height ); // - to implement later on + + void init_data(); +}; + +inline DSArray::DSArray( int type, int width, int height ) +{ + this->width = width; + this->height = height; + this->type = type; + this->init_data(); +} + +inline DSArray::~DSArray() +{ + delete data; +} + +inline void DSArray::set( int x, int y, double val ) +{ + data->set( x + this->width * y, val ); +} + +inline double DSArray::get( int x, int y ) +{ + return data->get( x + this->width * y ); +} + +inline void DSArray::set_region( int x1, int y1, int x2, int y2, double val ) +{ + int range = x2 - x1 + 1; + for( int y = y1; y <= y2; y++ ) { + this->data->set_range( x1 + this->width * y, range, val ); + } +} + +inline unsigned int DSArray::write( char* buffer, unsigned int offset ) +{ + return this->data->write( buffer, offset ); +} + +inline unsigned int DSArray::read( char* buffer, unsigned int offset ) +{ + return this->data->read( buffer, offset ); +} + +inline unsigned int DSArray::write_compressed( char * buffer, unsigned int offset ) +{ + return this->data->write_compressed( buffer, offset ); +} + +inline unsigned int DSArray::read_compressed( char * buffer, unsigned int offset ) +{ + return this->data->read_compressed( buffer, offset ); +} + +inline void DSArray::clear( double val ) +{ + this->data->set_range( 0, this->data->size, val ); +} + +inline int DSArray::find_index( double val, int offset ) +{ + return this->data->find_index( val, offset ); +} + +inline void DSArray::init_data() +{ + int size = this->width * this->height; + + switch( this->type ) { + case e_sbyte: + this->data = new TArray_type( size ); + break; + case e_ubyte: + this->data = new TArray_type( size ); + break; + case e_uint16: + this->data = new TArray_type( size ); + break; + case e_sint16: + this->data = new TArray_type( size ); + break; + case e_uint32: + this->data = new TArray_type( size ); + break; + case e_sint32: + this->data = new TArray_type( size ); + break; + case e_uint64: + this->data = new TArray_type( size ); + break; + case e_sint64: + this->data = new TArray_type( size ); + break; + case e_float32: + this->data = new TArray_type( size ); + break; + case e_float64: + this->data = new TArray_type( size ); + break; + default: + printf( "Unknown type in ds_array_create!" ); + break; + } +} + + +#endif