21 #ifndef SIRF_ABSTRACT_DATA_CONTAINER_TYPE
22 #define SIRF_ABSTRACT_DATA_CONTAINER_TYPE
40 typedef std::map<std::string, int> Dimensions;
47 virtual unsigned int items()
const = 0;
48 virtual bool is_complex()
const = 0;
53 return is_complex() ? 16 *
sizeof(float) : 8 *
sizeof(
float);
57 virtual float norm()
const = 0;
66 virtual void sum(
void* ptr)
const = 0;
69 virtual void max(
void* ptr)
const = 0;
139 xapyb(a_y, ptr_b, a_x, a_a);
142 virtual void write(
const std::string &filename)
const = 0;
144 bool is_empty()
const
149 std::unique_ptr<DataContainer> clone()
const
151 return std::unique_ptr<DataContainer>(this->clone_impl());
165 return std::unique_ptr<DataContainer>(ptr);
169 static T product(T x, T y)
175 static T ratio(T x, T y)
181 static T inverse_ratio(T x, T y)
187 static T
sum(T x, T y)
195 return std::max(x, y);
198 static T maxabs(T x, T y)
200 return std::max(std::abs(x), std::abs(y));
203 static T maxreal(T x, T y)
205 return std::real(x) > std::real(y) ? x : y;
211 return std::min(x, y);
214 static T minabs(T x, T y)
216 return std::min(std::abs(x), std::abs(y));
219 static T minreal(T x, T y)
221 return std::real(x) < std::real(y) ? x : y;
223 static std::complex<float>
power(std::complex<float> x, std::complex<float> y)
225 return std::pow(x, y);
227 static std::complex<float>
exp(std::complex<float> x)
231 static std::complex<float>
log(std::complex<float> x)
235 static std::complex<float>
sqrt(std::complex<float> x)
242 return (std::real(x) > 0) - (std::real(x) < 0);
247 return T(std::abs(x));
251 virtual DataContainer* clone_impl()
const = 0;
256 THROW(
"complex data containes must override conjugate_impl()");
Execution status type and wrappers for C++ objects.
Definition: DataHandle.h:159
Definition: DataContainer.h:42
virtual void conjugate_impl()
we assume data to be real, complex data containers must override this
Definition: DataContainer.h:253
std::unique_ptr< DataContainer > conjugate() const
returns unique pointer to the complex-conjugated copy of this container
Definition: DataContainer.h:161
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:135
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:155
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 log(const DataContainer &x)=0
*this = the elementwise log(x)
virtual int bits() const
returns the size of data elements
Definition: DataContainer.h:50
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 data container.
Definition: GeometricalInfo.cpp:141