22 #ifndef SIRF_ABSTRACT_DATA_CONTAINER_TYPE
23 #define SIRF_ABSTRACT_DATA_CONTAINER_TYPE
31 typedef std::map<std::string, int> Dimensions;
63 virtual unsigned int items()
const = 0;
64 virtual bool is_complex()
const = 0;
69 return is_complex() ? 16 *
sizeof(float) : 8 *
sizeof(
float);
73 virtual float norm()
const = 0;
82 virtual void sum(
void* ptr)
const = 0;
85 virtual void max(
void* ptr)
const = 0;
88 virtual void min(
void* ptr)
const = 0;
158 xapyb(a_y, ptr_b, a_x, a_a);
161 virtual void write(
const std::string &filename)
const = 0;
163 bool is_empty()
const
168 std::unique_ptr<DataContainer> clone()
const
170 return std::unique_ptr<DataContainer>(this->clone_impl());
184 return std::unique_ptr<DataContainer>(ptr);
188 static T product(T x, T y)
194 static T ratio(T x, T y)
200 static T inverse_ratio(T x, T y)
206 static T
sum(T x, T y)
214 return std::max(x, y);
217 static T maxabs(T x, T y)
219 return std::max(std::abs(x), std::abs(y));
222 static T maxreal(T x, T y)
224 return std::real(x) > std::real(y) ? x : y;
230 return std::min(x, y);
233 static T minabs(T x, T y)
235 return std::min(std::abs(x), std::abs(y));
238 static T minreal(T x, T y)
240 return std::real(x) < std::real(y) ? x : y;
242 static std::complex<float>
power(std::complex<float> x, std::complex<float> y)
244 return std::pow(x, y);
246 static std::complex<float>
exp(std::complex<float> x)
250 static std::complex<float>
log(std::complex<float> x)
254 static std::complex<float>
sqrt(std::complex<float> x)
261 return (std::real(x) > 0) - (std::real(x) < 0);
266 return T(std::abs(x));
270 virtual DataContainer* clone_impl()
const = 0;
275 THROW(
"complex data containes must override conjugate_impl()");
Execution status type and wrappers for C++ objects.
Definition: DataHandle.h:159
Abstract data container.
Definition: DataContainer.h:44
Abstract data container with numerical operations.
Definition: DataContainer.h:58
virtual void conjugate_impl()
we assume data to be real, complex data containers must override this
Definition: DataContainer.h:272
std::unique_ptr< DataContainer > conjugate() const
returns unique pointer to the complex-conjugated copy of this container
Definition: DataContainer.h:180
void xapyb(const DataContainer &a_x, const DataContainer &a_a, const DataContainer &a_y, const void *ptr_b)
*this = elementwise sum of elementwise x*a and y*b
Definition: DataContainer.h:154
virtual void xapyb(const DataContainer &x, const DataContainer &a, const DataContainer &y, const DataContainer &b)=0
*this = elementwise sum of two elementwise products x*a and y*b
virtual void sum(void *ptr) const =0
calculates the sum of this container elements
virtual float norm() const =0
returns the norm of this container viewed as a vector
virtual void xapyb(const DataContainer &a_x, const void *ptr_a, const DataContainer &a_y, const DataContainer &a_b)=0
*this = elementwise sum of x*a and elementwise y*b
virtual void add(const DataContainer &x, const void *ptr_y)=0
*this = the sum x + y with scalar y
virtual void multiply(const DataContainer &x, const void *ptr_y)=0
*this = the product x * y with scalar y
virtual void multiply(const DataContainer &x, const DataContainer &y)=0
*this = the elementwise product x*y
virtual void maximum(const DataContainer &x, const DataContainer &y)=0
*this = the elementwise max(x, y)
void conjugate()
overwrites this container's complex data with complex conjugate values
Definition: DataContainer.h:174
virtual void sign(const DataContainer &x)=0
*this = the elementwise sign(x)
virtual void abs(const DataContainer &x)=0
*this = the elementwise abs(x)
virtual void exp(const DataContainer &x)=0
*this = the elementwise exp(x)
virtual void power(const DataContainer &x, const DataContainer &y)=0
*this = the elementwise pow(x, y)
virtual void axpby(const void *ptr_a, const DataContainer &x, const void *ptr_b, const DataContainer &y)=0
*this = the linear combination of x and y
virtual void minimum(const DataContainer &x, const DataContainer &y)=0
*this = the elementwise min(x, y)
virtual void dot(const DataContainer &dc, void *ptr) const =0
calculates the dot product of this container with another one
virtual void divide(const DataContainer &x, const DataContainer &y)=0
*this = the elementwise ratio x / y
virtual void min(void *ptr) const =0
calculates the value of this container's element with the smallest real part
virtual void log(const DataContainer &x)=0
*this = the elementwise log(x)
virtual int bits() const
returns the size of data elements
Definition: DataContainer.h:66
virtual void xapyb(const DataContainer &x, const void *ptr_a, const DataContainer &y, const void *ptr_b)=0
alternative interface to the above
virtual void sqrt(const DataContainer &x)=0
*this = the elementwise sqrt(x)
virtual void max(void *ptr) const =0
calculates the value of this container's element with the largest real part
Abstract base class for SIRF image data.
Definition: GeometricalInfo.cpp:141