WIP: doxygen + remove unused code
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
This commit is contained in:
parent
17d40add98
commit
c9f7407de8
16 changed files with 242 additions and 62 deletions
|
@ -42,7 +42,7 @@ DOXYFILE_ENCODING = UTF-8
|
||||||
# title of most generated pages and in a few other places.
|
# title of most generated pages and in a few other places.
|
||||||
# The default value is: My Project.
|
# The default value is: My Project.
|
||||||
|
|
||||||
PROJECT_NAME = "My Project"
|
PROJECT_NAME = "CNORXZ"
|
||||||
|
|
||||||
# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
|
# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
|
||||||
# could be handy for archiving the generated documentation or if some version
|
# could be handy for archiving the generated documentation or if some version
|
||||||
|
@ -54,7 +54,7 @@ PROJECT_NUMBER =
|
||||||
# for a project that appears at the top of each page and should give viewer a
|
# for a project that appears at the top of each page and should give viewer a
|
||||||
# quick idea about the purpose of the project. Keep the description short.
|
# quick idea about the purpose of the project. Keep the description short.
|
||||||
|
|
||||||
PROJECT_BRIEF =
|
PROJECT_BRIEF = "Container with Native Operation Routines (by XZ)"
|
||||||
|
|
||||||
# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
|
# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
|
||||||
# in the documentation. The maximum height of the logo should not exceed 55
|
# in the documentation. The maximum height of the logo should not exceed 55
|
||||||
|
@ -1343,7 +1343,7 @@ HTML_COLORSTYLE = AUTO_LIGHT
|
||||||
# Minimum value: 0, maximum value: 359, default value: 220.
|
# Minimum value: 0, maximum value: 359, default value: 220.
|
||||||
# This tag requires that the tag GENERATE_HTML is set to YES.
|
# This tag requires that the tag GENERATE_HTML is set to YES.
|
||||||
|
|
||||||
HTML_COLORSTYLE_HUE = 220
|
HTML_COLORSTYLE_HUE = 130
|
||||||
|
|
||||||
# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
|
# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
|
||||||
# in the HTML output. For a value of 0 the output will use gray-scales only. A
|
# in the HTML output. For a value of 0 the output will use gray-scales only. A
|
||||||
|
@ -1351,7 +1351,7 @@ HTML_COLORSTYLE_HUE = 220
|
||||||
# Minimum value: 0, maximum value: 255, default value: 100.
|
# Minimum value: 0, maximum value: 255, default value: 100.
|
||||||
# This tag requires that the tag GENERATE_HTML is set to YES.
|
# This tag requires that the tag GENERATE_HTML is set to YES.
|
||||||
|
|
||||||
HTML_COLORSTYLE_SAT = 100
|
HTML_COLORSTYLE_SAT = 200
|
||||||
|
|
||||||
# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
|
# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
|
||||||
# luminance component of the colors in the HTML output. Values below 100
|
# luminance component of the colors in the HTML output. Values below 100
|
||||||
|
@ -1362,7 +1362,7 @@ HTML_COLORSTYLE_SAT = 100
|
||||||
# Minimum value: 40, maximum value: 240, default value: 80.
|
# Minimum value: 40, maximum value: 240, default value: 80.
|
||||||
# This tag requires that the tag GENERATE_HTML is set to YES.
|
# This tag requires that the tag GENERATE_HTML is set to YES.
|
||||||
|
|
||||||
HTML_COLORSTYLE_GAMMA = 80
|
HTML_COLORSTYLE_GAMMA = 140
|
||||||
|
|
||||||
# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML
|
# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML
|
||||||
# documentation will contain a main index with vertical navigation menus that
|
# documentation will contain a main index with vertical navigation menus that
|
||||||
|
|
|
@ -1,3 +1,14 @@
|
||||||
|
/**
|
||||||
|
|
||||||
|
@file include/base/dtype.cc.h
|
||||||
|
@brief DType template member function definitions
|
||||||
|
|
||||||
|
Definitions of the template member functions of the DType class.
|
||||||
|
|
||||||
|
Copyright (c) 2022 Christian Zimmermann. All rights reserved.
|
||||||
|
Mail: chizeta@f3l.de
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
#ifndef __cxz_dtype_cc_h__
|
#ifndef __cxz_dtype_cc_h__
|
||||||
#define __cxz_dtype_cc_h__
|
#define __cxz_dtype_cc_h__
|
||||||
|
|
|
@ -1,3 +1,14 @@
|
||||||
|
/**
|
||||||
|
|
||||||
|
@file include/base/dtype.h
|
||||||
|
@brief DType declaration
|
||||||
|
|
||||||
|
DType is a generic type-erasing class that wrapps std::any.
|
||||||
|
|
||||||
|
Copyright (c) 2022 Christian Zimmermann. All rights reserved.
|
||||||
|
Mail: chizeta@f3l.de
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
#ifndef __cxz_dynamic_meta_h__
|
#ifndef __cxz_dynamic_meta_h__
|
||||||
#define __cxz_dynamic_meta_h__
|
#define __cxz_dynamic_meta_h__
|
||||||
|
|
|
@ -1,3 +1,14 @@
|
||||||
|
/**
|
||||||
|
|
||||||
|
@file include/base/isq.h
|
||||||
|
@brief Integer sequence range and creation functions
|
||||||
|
|
||||||
|
Declaration of integer sequence range and corresponding creating function templates
|
||||||
|
|
||||||
|
Copyright (c) 2022 Christian Zimmermann. All rights reserved.
|
||||||
|
Mail: chizeta@f3l.de
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
#ifndef __cxz_isq_h__
|
#ifndef __cxz_isq_h__
|
||||||
#define __cxz_isq_h__
|
#define __cxz_isq_h__
|
||||||
|
|
|
@ -1,3 +1,14 @@
|
||||||
|
/**
|
||||||
|
|
||||||
|
@file include/base/iter.h
|
||||||
|
@brief Static for-loops
|
||||||
|
|
||||||
|
Declaration of function templates that can be used to implement a static for-loop
|
||||||
|
|
||||||
|
Copyright (c) 2022 Christian Zimmermann. All rights reserved.
|
||||||
|
Mail: chizeta@f3l.de
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
#ifndef __cxz_iter_h__
|
#ifndef __cxz_iter_h__
|
||||||
#define __cxz_iter_h__
|
#define __cxz_iter_h__
|
||||||
|
|
|
@ -1,3 +1,14 @@
|
||||||
|
/**
|
||||||
|
|
||||||
|
@file include/base/obj_handle.cc.h
|
||||||
|
@brief ObjHandle function definition
|
||||||
|
|
||||||
|
Implementation of the member functions of template ObjHandle
|
||||||
|
|
||||||
|
Copyright (c) 2022 Christian Zimmermann. All rights reserved.
|
||||||
|
Mail: chizeta@f3l.de
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
#ifndef __cxz_obj_handle_cc_h__
|
#ifndef __cxz_obj_handle_cc_h__
|
||||||
#define __cxz_obj_handle_cc_h__
|
#define __cxz_obj_handle_cc_h__
|
||||||
|
|
|
@ -1,3 +1,15 @@
|
||||||
|
/**
|
||||||
|
|
||||||
|
@file include/base/obj_handle.h
|
||||||
|
@brief ObjHandle template declaration
|
||||||
|
|
||||||
|
Pointer wrapper for directly handling objects via abstract base class;
|
||||||
|
Provides appropriate copy implementation
|
||||||
|
|
||||||
|
Copyright (c) 2022 Christian Zimmermann. All rights reserved.
|
||||||
|
Mail: chizeta@f3l.de
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
#ifndef __cxz_obj_handle_h__
|
#ifndef __cxz_obj_handle_h__
|
||||||
#define __cxz_obj_handle_h__
|
#define __cxz_obj_handle_h__
|
||||||
|
@ -7,8 +19,6 @@
|
||||||
namespace CNORXZ
|
namespace CNORXZ
|
||||||
{
|
{
|
||||||
|
|
||||||
// Pointer wrapper for directly handling objects via abstract base class;
|
|
||||||
// Provides appropriate copy implementation
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
class ObjHandle
|
class ObjHandle
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,3 +1,14 @@
|
||||||
|
/**
|
||||||
|
|
||||||
|
@file include/base/to_string.cc.h
|
||||||
|
@brief String converter implementation
|
||||||
|
|
||||||
|
Implementation of functions that convert a given object/type to a string
|
||||||
|
|
||||||
|
Copyright (c) 2022 Christian Zimmermann. All rights reserved.
|
||||||
|
Mail: chizeta@f3l.de
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
#ifndef __cxz_to_string_cc_h__
|
#ifndef __cxz_to_string_cc_h__
|
||||||
#define __cxz_to_string_cc_h__
|
#define __cxz_to_string_cc_h__
|
||||||
|
|
|
@ -1,3 +1,14 @@
|
||||||
|
/**
|
||||||
|
|
||||||
|
@file include/base/to_string.h
|
||||||
|
@brief String converter
|
||||||
|
|
||||||
|
Declaration of functions that convert a given object/type to a string
|
||||||
|
|
||||||
|
Copyright (c) 2022 Christian Zimmermann. All rights reserved.
|
||||||
|
Mail: chizeta@f3l.de
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
#ifndef __cxz_to_string_h__
|
#ifndef __cxz_to_string_h__
|
||||||
#define __cxz_to_string_h__
|
#define __cxz_to_string_h__
|
||||||
|
|
|
@ -1,3 +1,12 @@
|
||||||
|
/**
|
||||||
|
|
||||||
|
@file include/base/utils.h
|
||||||
|
@brief utilities
|
||||||
|
|
||||||
|
Copyright (c) 2022 Christian Zimmermann. All rights reserved.
|
||||||
|
Mail: chizeta@f3l.de
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
#ifndef __cxz_utils_h__
|
#ifndef __cxz_utils_h__
|
||||||
#define __cxz_utils_h__
|
#define __cxz_utils_h__
|
||||||
|
|
|
@ -1,8 +1,16 @@
|
||||||
|
/**
|
||||||
|
|
||||||
|
@file include/base/uuid.h
|
||||||
|
@brief uuid implementation
|
||||||
|
|
||||||
|
Copyright (c) 2022 Christian Zimmermann. All rights reserved.
|
||||||
|
Mail: chizeta@f3l.de
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
#ifndef __cxz_uuid_h__
|
#ifndef __cxz_uuid_h__
|
||||||
#define __cxz_uuid_h__
|
#define __cxz_uuid_h__
|
||||||
|
|
||||||
//#include <cstdlib>
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,26 @@
|
||||||
// -*- C++ -*-
|
// -*- C++ -*-
|
||||||
|
/**
|
||||||
|
|
||||||
|
@file include/cnorxz.h
|
||||||
|
@brief cnorxz main header
|
||||||
|
|
||||||
|
Copyright (c) 2022 Christian Zimmermann. All rights reserved.
|
||||||
|
Mail: chizeta@f3l.de
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
/**
|
||||||
|
@mainpage CNORXZ Documentation
|
||||||
|
|
||||||
|
## Library organization
|
||||||
|
|
||||||
|
## Ranges and Indices
|
||||||
|
|
||||||
|
## Array types
|
||||||
|
|
||||||
|
## Expressions and Operations
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
#ifndef __cxz_cnorxz_h__
|
#ifndef __cxz_cnorxz_h__
|
||||||
#define __cxz_cnorxz_h__
|
#define __cxz_cnorxz_h__
|
||||||
|
|
|
@ -1,4 +1,16 @@
|
||||||
// -*- C++ -*-
|
// -*- C++ -*-
|
||||||
|
/**
|
||||||
|
|
||||||
|
@file include/range/range_base.h
|
||||||
|
@brief RangeBase declaration
|
||||||
|
|
||||||
|
Include basic headers containing defintions and macros
|
||||||
|
used throughout this library
|
||||||
|
|
||||||
|
Copyright (c) 2022 Christian Zimmermann. All rights reserved.
|
||||||
|
Mail: chizeta@f3l.de
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
#ifndef __cxz_range_base_h__
|
#ifndef __cxz_range_base_h__
|
||||||
#define __cxz_range_base_h__
|
#define __cxz_range_base_h__
|
||||||
|
@ -15,75 +27,150 @@
|
||||||
namespace CNORXZ
|
namespace CNORXZ
|
||||||
{
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
Abstract factory base class for creating ranges.
|
||||||
|
Ranges can exclusively create through range factories.
|
||||||
|
|
||||||
|
All ranges that are ever created are stored in a product map
|
||||||
|
(sCreated). The object type hash and the uuid of all ranges
|
||||||
|
the created depends on serve as keys. In the case the range does not
|
||||||
|
depend on any other range, its own uuid is used as key. If the
|
||||||
|
range is a result of a cast from another range, the latter's uuid is
|
||||||
|
used as key.
|
||||||
|
|
||||||
|
Derived factories are supposed to look for an existing range by
|
||||||
|
calling fromCreated() and, if nullptr returned, add the new range
|
||||||
|
to the map by calling addToCreated(). These steps are supposed to be
|
||||||
|
implemented by overloading the purely virtual function make().
|
||||||
|
|
||||||
|
The product is publicly accessible throught the function create().
|
||||||
|
*/
|
||||||
class RangeFactoryBase
|
class RangeFactoryBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
/** Default constructor */
|
||||||
RangeFactoryBase() = default;
|
RangeFactoryBase() = default;
|
||||||
|
|
||||||
|
/** Default destructor */
|
||||||
virtual ~RangeFactoryBase() = default;
|
virtual ~RangeFactoryBase() = default;
|
||||||
|
|
||||||
|
/** Return the product */
|
||||||
RangePtr create();
|
RangePtr create();
|
||||||
|
|
||||||
static RangePtr getRegistered(const TypeInfo& info, const RangePtr& r);
|
static RangePtr getRegistered(const TypeInfo& info, const RangePtr& r);
|
||||||
// check if range with uuid of r exists; if yes, return existing one, else add r and return it
|
// check if range with uuid of r exists; if yes, return existing one, else add r and return it
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
|
/** Abstract method to create the product. */
|
||||||
virtual void make() = 0;
|
virtual void make() = 0;
|
||||||
|
|
||||||
|
/** access the product map (read-only) */
|
||||||
RangePtr fromCreated(const TypeInfo& info, const Vector<Uuid>& rids) const;
|
RangePtr fromCreated(const TypeInfo& info, const Vector<Uuid>& rids) const;
|
||||||
|
|
||||||
|
/** add newly created range to the product map */
|
||||||
void addToCreated(const TypeInfo& info, const Vector<Uuid>& rids, const RangePtr& r);
|
void addToCreated(const TypeInfo& info, const Vector<Uuid>& rids, const RangePtr& r);
|
||||||
|
|
||||||
RangePtr mProd;
|
RangePtr mProd; /**< shared pointer to the product */
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// also add single ranges here (PtrId -> own)
|
|
||||||
// rangeCast: PtrId -> original Range
|
static Map<SizeT,Map<Vector<Uuid>,RangePtr>> sCreated; /**< the product map */
|
||||||
static Map<SizeT,Map<Vector<Uuid>,RangePtr>> sCreated;
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
Abstract range base class
|
||||||
|
|
||||||
|
A range defines a parameter space containers and operations are defined on.
|
||||||
|
Indices can be used to iterate over that space.
|
||||||
|
|
||||||
|
Ranges have to be created though a corresponding factory.
|
||||||
|
@see RangeFactoryBase
|
||||||
|
|
||||||
|
Ranges always exist within a shared pointer and cannot be copied.
|
||||||
|
*/
|
||||||
class RangeBase
|
class RangeBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
typedef DIndex IndexType;
|
typedef DIndex IndexType;
|
||||||
|
|
||||||
|
/** default destructor */
|
||||||
virtual ~RangeBase() = default;
|
virtual ~RangeBase() = default;
|
||||||
|
|
||||||
// virtual RangePtr sub() const; // Sptr<URange<RangePtr>> ; range of subranges (TODO!!!)
|
/** Access sub-ranges.
|
||||||
|
In the case the range is multi-dimensional the num-th
|
||||||
|
sub-range can be accessed through this function
|
||||||
|
@param num size type argument
|
||||||
|
*/
|
||||||
virtual RangePtr sub(SizeT num) const;
|
virtual RangePtr sub(SizeT num) const;
|
||||||
|
|
||||||
|
/** Access sub-ranges.
|
||||||
|
In the case the range is multi-dimensional this function returns an
|
||||||
|
array of all sub-ranges (empty is one-dimensional)
|
||||||
|
*/
|
||||||
virtual MArray<RangePtr> sub() const;
|
virtual MArray<RangePtr> sub() const;
|
||||||
|
|
||||||
|
/** Range size */
|
||||||
virtual SizeT size() const = 0;
|
virtual SizeT size() const = 0;
|
||||||
|
|
||||||
|
/** Range dimension.
|
||||||
|
Returns the range's dimension, which is equivalent to
|
||||||
|
the number of sub-ranges. If a sub-range has non-zero dimension
|
||||||
|
this is NOT taken into account!
|
||||||
|
*/
|
||||||
virtual SizeT dim() const = 0;
|
virtual SizeT dim() const = 0;
|
||||||
|
|
||||||
|
/** Range type */
|
||||||
virtual const TypeInfo& type() const = 0;
|
virtual const TypeInfo& type() const = 0;
|
||||||
|
|
||||||
|
/** The type of the range's meta data */
|
||||||
virtual const TypeInfo& metaType() const = 0;
|
virtual const TypeInfo& metaType() const = 0;
|
||||||
|
|
||||||
|
/** Meta data in string format at lexicographic position pos.
|
||||||
|
@param pos size type argument
|
||||||
|
*/
|
||||||
virtual String stringMeta(SizeT pos) const = 0;
|
virtual String stringMeta(SizeT pos) const = 0;
|
||||||
|
|
||||||
|
/** Return DIndex iterating over the range's parameter space.
|
||||||
|
@param pos index position, size type argument
|
||||||
|
*/
|
||||||
virtual DIndex index(SizeT pos = 0) const = 0;
|
virtual DIndex index(SizeT pos = 0) const = 0;
|
||||||
|
|
||||||
|
/** Create extended range.
|
||||||
|
Creates a new range consisting of the meta data spaces
|
||||||
|
of this range and the range r
|
||||||
|
@param r shared pointer to range used for extension
|
||||||
|
*/
|
||||||
virtual RangePtr extend(const RangePtr& r) const = 0;
|
virtual RangePtr extend(const RangePtr& r) const = 0;
|
||||||
|
|
||||||
|
/** check if ranges are the same */
|
||||||
bool operator==(const RangeBase& in) const;
|
bool operator==(const RangeBase& in) const;
|
||||||
|
|
||||||
|
/** check if ranges are not the same */
|
||||||
bool operator!=(const RangeBase& in) const;
|
bool operator!=(const RangeBase& in) const;
|
||||||
|
|
||||||
|
/** return the range's uuid */
|
||||||
Uuid id() const;
|
Uuid id() const;
|
||||||
DIndex begin() const;
|
|
||||||
DIndex end() const;
|
|
||||||
RangePtr orig() const;
|
|
||||||
|
|
||||||
//virtual Vector<Uuid> key2() const { return Vector<Uuid>(); }
|
|
||||||
|
|
||||||
|
/** return a DIndex pointing to the range's first element */
|
||||||
|
DIndex begin() const;
|
||||||
|
|
||||||
|
/** return a DIndex pointing to the element after the range's last element */
|
||||||
|
DIndex end() const;
|
||||||
|
|
||||||
friend RangeFactoryBase;
|
friend RangeFactoryBase;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
RangeBase();
|
|
||||||
RangeBase(const RangePtr& rel);
|
|
||||||
|
|
||||||
|
/** default constructor */
|
||||||
|
RangeBase();
|
||||||
|
|
||||||
virtual Vector<Uuid> key() const = 0;
|
virtual Vector<Uuid> key() const = 0;
|
||||||
// delete copy/move???
|
// delete copy/move???
|
||||||
Uuid mId = {0,0};
|
Uuid mId = {0,0}; /**< The range's uuid */
|
||||||
Wptr<RangeBase> mThis;
|
Wptr<RangeBase> mThis; /**< weak pointer to this range */
|
||||||
RangePtr mRel; // used, if created from another range, to point on it
|
|
||||||
};
|
};
|
||||||
|
|
||||||
template <class Range>
|
template <class Range>
|
||||||
|
|
|
@ -175,26 +175,7 @@ namespace CNORXZ
|
||||||
return UPos(id == this->id() ? 1 : 0);
|
return UPos(id == this->id() ? 1 : 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
template <typename MetaT>
|
|
||||||
template <class Index>
|
|
||||||
decltype(auto) UIndex<MetaT>::formatFrom(const Index& ind) const
|
|
||||||
{
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename MetaT>
|
|
||||||
template <class Index>
|
|
||||||
decltype(auto) UIndex<MetaT>::slice(const Sptr<Index>& ind) const
|
|
||||||
{
|
|
||||||
if(ind != nullptr){
|
|
||||||
if(ind->dim() != 0) {
|
|
||||||
return Sptr<UIndex<MetaT>>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return std::make_shared<UIndex<MetaT>>(*this);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
template <typename MetaT>
|
template <typename MetaT>
|
||||||
template <class Xpr, class F>
|
template <class Xpr, class F>
|
||||||
decltype(auto) UIndex<MetaT>::ifor(const Xpr& xpr, F&& f) const
|
decltype(auto) UIndex<MetaT>::ifor(const Xpr& xpr, F&& f) const
|
||||||
|
|
|
@ -56,13 +56,7 @@ namespace CNORXZ
|
||||||
RangePtr prange(const UIndex<MetaType>& last) const;
|
RangePtr prange(const UIndex<MetaType>& last) const;
|
||||||
|
|
||||||
SizeT deepFormat() const;
|
SizeT deepFormat() const;
|
||||||
/*
|
|
||||||
template <class Index>
|
|
||||||
decltype(auto) formatFrom(const Index& ind) const;
|
|
||||||
|
|
||||||
template <class Index>
|
|
||||||
decltype(auto) slice(const Sptr<Index>& ind) const;
|
|
||||||
*/
|
|
||||||
template <class Xpr, class F>
|
template <class Xpr, class F>
|
||||||
decltype(auto) ifor(const Xpr& xpr, F&& f) const;
|
decltype(auto) ifor(const Xpr& xpr, F&& f) const;
|
||||||
|
|
||||||
|
|
|
@ -90,14 +90,6 @@ namespace CNORXZ
|
||||||
{
|
{
|
||||||
return this->index(this->size());
|
return this->index(this->size());
|
||||||
}
|
}
|
||||||
|
|
||||||
RangePtr RangeBase::orig() const
|
|
||||||
{
|
|
||||||
if(mRel) return mRel;
|
|
||||||
else return RangePtr(mThis);
|
|
||||||
}
|
|
||||||
|
|
||||||
RangeBase::RangeBase(const RangePtr& rel) : mRel(rel) {}
|
|
||||||
|
|
||||||
/****************************
|
/****************************
|
||||||
* Non-member functions *
|
* Non-member functions *
|
||||||
|
|
Loading…
Reference in a new issue