26#ifndef CASA_IPOSITION_2_H
27#define CASA_IPOSITION_2_H
34#include <initializer_list>
145 template <typename... Vals>
147 IPosition(
size_t , ssize_t val1, ssize_t val2, Vals... vals)
148 :
IPosition{val1, val2,
static_cast<ssize_t
>(vals)...} {}
167 template <
typename... Vals>
214 template <
typename InputIterator>
217 for (
size_t i = 0; i <
size; ++i, ++iter) {
224 template <
typename OutputIterator>
225 void copy(OutputIterator iter)
const {
226 for (
size_t i = 0; i <
size_p; ++i, ++iter) {
278 ssize_t&
last(
size_t index = 0);
279 ssize_t
last(
size_t index = 0)
const;
283 const ssize_t*
storage()
const;
560#if defined(AIPS_ARRAY_INDEX_CHECK)
569#if defined(AIPS_ARRAY_INDEX_CHECK)
578#if defined(AIPS_ARRAY_INDEX_CHECK)
579 if (
size_p - index <= 0) {
587#if defined(AIPS_ARRAY_INDEX_CHECK)
588 if (
size_p - index <= 0) {
Allows a way for IPosition to be used as keys in a std::map.
bool operator()(const IPosition &lhs, const IPosition &rhs) const
if sizes aren't equal, returns true if lhs.size() < rhs.size(), false otherwise.
ssize_t & operator[](size_t index)
Index into the IPosition.
ptrdiff_t difference_type
void operator*=(const IPosition &other)
friend std::ostream & operator<<(std::ostream &os, const IPosition &ip)
Write an IPosition to an ostream in a simple text form.
const value_type * const_pointer
IPosition(const Array< long long > &other)
bool isEqual(const IPosition &other, size_t nrCompare) const
Element-by-element comparison for (partial) equality.
IPosition & operator=(IPosition &&source)
IPosition(const Array< int > &other)
Convert an IPosition to and from an Array<int/int64>.
ssize_t & operator()(size_t index)
const_iterator end() const
IPosition nonDegenerate(const IPosition &ignoreAxes) const
IPosition keepAxes(const IPosition &axes) const
Return an IPosition containing the given axes only.
ssize_t value_type
Define the STL-style iterators.
std::vector< long long > asStdVector64() const
void copy(OutputIterator iter) const
Copy the contents of this IPosition object to the output iterator.
void setLast(const IPosition &other)
Set the last values of this IPosition to another IPosition.
long long product() const
Returns 0 if nelements() == 0, otherwise it returns the product of its elements.
void operator-=(const IPosition &other)
IPosition getFirst(size_t n) const
Construct an IPosition from the first n values of this IPosition.
IPosition removeAxes(const IPosition &axes) const
Return an IPosition where the given axes are reoved.
IPosition & operator=(ssize_t value)
Copy "value" into every position of this IPosition.
void operator/=(ssize_t val)
void operator+=(const IPosition &other)
Element-by-element arithmetic.
IPosition() noexcept
A zero-length IPosition.
Vector< long long > asVector64() const
IPosition(IPosition &&source) noexcept
void resize(size_t newSize, bool copy=true)
Old values are copied on resize if copy==true.
std::string toString() const
Write the IPosition into a string.
bool isEqual(const IPosition &other) const
Element-by-element comparison for equality.
bool ok() const
Is this IPosition consistent?
IPosition(const IPosition &source)
Makes a copy (copy, NOT reference, semantics) of source.
void prepend(const IPosition &other)
Prepend this IPosition with another one (causing a resize).
bool isEqual(const IPosition &other, bool skipDegeneratedAxes) const
Element-by-element comparison for equality.
static IPosition makeAxisPath(size_t nrdim)
Construct a default axis path consisting of the values 0.
IPosition nonDegenerate(size_t startingAxis=0) const
This member functions return an IPosition which has degenerate (length==1) axes removed and the dimen...
size_t nelements() const
The number of elements in this IPosition.
IPosition(const std::vector< long long > &other)
void operator-=(ssize_t val)
bool empty() const
Is the IPosition empty (i.e.
static IPosition makeAxisPath(size_t nrdim, const IPosition &partialPath)
Construct a full axis path from a (partially) given axis path.
bool allOne() const
Are all elements equal to 1?
std::vector< int > asStdVector() const
friend class IPositionComparator
IPosition concatenate(const IPosition &other) const
Return an IPosition as the concetanation of this and another IPosition.
iterator begin()
Get the begin and end iterator object for this object.
Vector< int > asVector() const
void operator*=(ssize_t val)
void allocateBuffer()
Allocate a buffer with length size_p.
ssize_t * data_p
When the iposition is length BufferSize or less data is just buffer_p, avoiding calls to new and dele...
static IPosition Make(Vals... vals)
Construct an IPosition that is initialized from a variable number of parameter.
const ssize_t * storage() const
Get the storage.
bool conform(const IPosition &other) const
conform returns true if nelements() == other.nelements().
IPosition getLast(size_t n) const
Construct an IPosition from the last n values of this IPosition.
void append(const IPosition &other)
Append this IPosition with another one (causing a resize).
IPosition & operator=(const IPosition &source)
Makes this a copy of other.
const_iterator begin() const
ssize_t & last(size_t index=0)
Index into the IPosition from the end.
ssize_t buffer_p[BufferLength]
const value_type & const_reference
void fill(size_t size, InputIterator iter)
Resize and fill this IPosition object.
void operator/=(const IPosition &other)
IPosition operator()(const IPosition &axes) const
Make an IPosition by using only the specified elements of the current IPosition.
static IPosition otherAxes(size_t nrdim, const IPosition &axes)
Make a list of axes which are the axes not given in axes up to the given dimension.
IPosition(const std::vector< int > &other)
Convert an IPosition to and from an Array<int/int64>.
void operator+=(ssize_t val)
void throwIndexError() const
Throw an index error exception.
const ssize_t * const_iterator
bool isSubSet(const IPosition &other) const
Is the other IPosition a subset of (or equal to) this IPosition?
void setFirst(const IPosition &other)
Set the first values of this IPosition to another IPosition.
bool operator==(const String &x, const String &y)
Global comparison operators.
String operator+(const String &lhs, const String &rhs)
Global concatenation operators.
For temporary backward namespace compatibility, use casa as alias for casacore.
bool operator<(const String &x, const String &y)
bool operator>=(const String &x, const String &y)
int offset(int, int) const
compute a linear offset from array indicies
LatticeExprNode operator-(const LatticeExprNode &expr)
LatticeExprNode operator/(const LatticeExprNode &left, const LatticeExprNode &right)
IPosition shape(const RecordFieldId &) const
Get the actual shape of this field.
bool operator<=(const String &x, const String &y)
std::string to_string(const IPosition &ip)
LatticeExprNode length(const LatticeExprNode &expr, const LatticeExprNode &axis)
2-argument function to get the length of an axis.
T & operator*()
Provide access to the field's value.
bool operator>(const String &x, const String &y)
bool operator!=(const String &x, const String &y)
NewDelAllocator< T > NewDelAllocator< T >::value
Define real & complex conjugation for non-complex types and put comparisons into std namespace.
Arithmetic Operations for IPosition's Element by element arithmetic on IPositions.
IPosition operator/(const IPosition &left, const IPosition &right)
IPosition operator*(const IPosition &left, ssize_t val)
IPosition operator-(const IPosition &left, const IPosition &right)
IPosition operator+(ssize_t val, const IPosition &right)
Same functions as above but with with the int argument on the left side.
IPosition operator/(const IPosition &left, ssize_t val)
IPosition operator*(const IPosition &left, const IPosition &right)
IPosition operator+(const IPosition &left, const IPosition &right)
Each operation is done on corresponding elements of the IPositions.
IPosition operator-(ssize_t val, const IPosition &right)
IPosition min(const IPosition &left, const IPosition &right)
IPosition operator*(ssize_t val, const IPosition &right)
IPosition operator-(const IPosition &left, ssize_t val)
IPosition operator/(ssize_t val, const IPosition &right)
IPosition max(const IPosition &left, const IPosition &right)
Returns the element by element minimum or maximum.
IPosition operator+(const IPosition &left, ssize_t val)
Each operation is done by appliying the integer argument to all elements of the IPosition argument.
Indexing functions for IPosition's Convert between IPosition and offset in an array.
IPosition toIPositionInArray(long long offset, const IPosition &shape)
Convert from offset to IPosition in an array.
long long toOffsetInArray(const IPosition &iposition, const IPosition &shape)
Convert from IPosition to offset in an array.
bool isInsideArray(const long long offset, const IPosition &shape)
Determine if the given offset or IPosition is inside the array.
bool isInsideArray(const IPosition &iposition, const IPosition &shape)
Logical operations for IPosition's Element by element boolean operations on IPositions.
bool operator>(const IPosition &left, const IPosition &right)
bool operator<(const IPosition &left, const IPosition &right)
bool operator!=(const IPosition &left, const IPosition &right)
bool operator!=(const IPosition &left, ssize_t val)
bool operator!=(ssize_t val, const IPosition &right)
bool operator==(const IPosition &left, const IPosition &right)
Each operation is done on corresponding elements of the IPositions.
bool operator>(ssize_t val, const IPosition &right)
bool operator<=(const IPosition &left, ssize_t val)
bool operator<(const IPosition &left, ssize_t val)
bool operator>=(const IPosition &left, ssize_t val)
bool operator>=(ssize_t val, const IPosition &right)
bool operator<=(ssize_t val, const IPosition &right)
bool operator<=(const IPosition &left, const IPosition &right)
bool operator>=(const IPosition &left, const IPosition &right)
bool operator>(const IPosition &left, ssize_t val)
bool operator<(ssize_t val, const IPosition &right)
bool operator==(ssize_t val, const IPosition &right)
Same functions as above but with with the int argument on the left side.
bool operator==(const IPosition &left, ssize_t val)
Each operation is done by appliying the integer argument to all elements.