From 5a75c7964f73359209b4bdd33d6a6d246b1e238f Mon Sep 17 00:00:00 2001 From: Christian Zimmermann Date: Fri, 29 Dec 2023 15:20:02 +0100 Subject: [PATCH 1/5] remove .gitlab-ci.yml --- .gitlab-ci.yml | 21 --------------------- 1 file changed, 21 deletions(-) delete mode 100644 .gitlab-ci.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml deleted file mode 100644 index b03515f..0000000 --- a/.gitlab-ci.yml +++ /dev/null @@ -1,21 +0,0 @@ - -image: docker.io/chizeta/centos:8 - -stages: - - build - -build-centos: - stage: build - script: - - source /opt/rh/gcc-toolset-9/enable - - mkdir build-gcc - - cd build-gcc - - cmake3 .. - - make -j2 - - make test - - cd .. - - mkdir build-clang - - cd build-clang - - CC=/usr/bin/clang CXX=/usr/bin/clang++ cmake3 .. - - make -j2 - - make test \ No newline at end of file From e8db02a6ec22c21d3d5ab9aa7bdff7444a68beea Mon Sep 17 00:00:00 2001 From: Christian Zimmermann Date: Fri, 29 Dec 2023 22:48:28 +0100 Subject: [PATCH 2/5] more doc --- src/include/ranges/crange.h | 10 +-- src/include/ranges/dindex.cc.h | 4 +- src/include/ranges/dindex.h | 92 +++++++++++++++++++- src/include/ranges/index_pack.h | 144 ++++++++++++++++++++++++++++++-- 4 files changed, 234 insertions(+), 16 deletions(-) diff --git a/src/include/ranges/crange.h b/src/include/ranges/crange.h index 45d2ef6..8e96d1a 100644 --- a/src/include/ranges/crange.h +++ b/src/include/ranges/crange.h @@ -21,7 +21,7 @@ namespace CNORXZ { /** **** - specific index for CRange + Specific index for CRange. */ class CIndex : public IndexInterface { @@ -34,7 +34,7 @@ namespace CNORXZ INDEX_RANDOM_ACCESS_ITERATOR_DEFS(MetaType); DEFAULT_MEMBERS(CIndex); /**< default constructors and assignments */ - /** constrcut index from range and position + /** Construct index from range and position. @param range Range to iterate over @param pos lexicographic position */ @@ -98,9 +98,6 @@ namespace CNORXZ /** @copydoc IndexInterface::at() */ CIndex& at(const SizeT& metaPos); - /** @copydoc IndexInterface::xpr() */ - COpRoot xpr(const Sptr& _this) const; - /** @copydoc IndexInterface::prange() */ RangePtr prange(const CIndex& last) const; @@ -120,6 +117,9 @@ namespace CNORXZ /** @copydoc IndexInterface::formatIsTrivial() */ bool formatIsTrivial() const; + /** @copydoc IndexInterface::xpr() */ + COpRoot xpr(const Sptr& _this) const; + private: Sptr mRangePtr; }; diff --git a/src/include/ranges/dindex.cc.h b/src/include/ranges/dindex.cc.h index 5d8451c..6637298 100644 --- a/src/include/ranges/dindex.cc.h +++ b/src/include/ranges/dindex.cc.h @@ -44,7 +44,9 @@ namespace CNORXZ I indexAs(const DIndex& i) { static_assert(is_index::value, "expected index type"); - return std::dynamic_pointer_cast>( i.xptr() )->get(); + auto ptr = std::dynamic_pointer_cast>( i.xptr() ); + CXZ_ASSERT(ptr, "invalid cast"); + return ptr->get(); } } diff --git a/src/include/ranges/dindex.h b/src/include/ranges/dindex.h index 7a87fe1..041eb50 100644 --- a/src/include/ranges/dindex.h +++ b/src/include/ranges/dindex.h @@ -20,6 +20,9 @@ namespace CNORXZ { + /** **** + index of compile-time-unspecified type + */ class DIndex : public IndexInterface { public: @@ -27,64 +30,145 @@ namespace CNORXZ typedef DType MetaType; typedef RangeBase RangeType; - DEFAULT_C(DIndex); + DEFAULT_C(DIndex); /**< default constructor */ + + /** copy constructor + @param i index to copy + */ DIndex(const DIndex& i); + + /** move constructor + @param i index to move + */ DIndex(DIndex&& i); + + /** copy assignment + @param i index to copy + */ DIndex& operator=(const DIndex& i); + + /** move assignment + @param i index to move + */ DIndex& operator=(DIndex&& i); + + /** construct from XIndex instance + @param i XIndex to use for construction + */ DIndex(const XIndexPtr& i); + + /** construct from range pointer + @param r Range to iterate over + @param lexpos initial lexicographic position + */ DIndex(const RangePtr& r, SizeT lexpos = 0); - + + /** construct from index of arbitrary type + @param i Index to use for construction + */ template DIndex(const IndexInterface& i); + /** @copydoc IndexInterface::operator=(SizeT) */ DIndex& operator=(SizeT lexpos); + + /** @copydoc IndexInterface::operator++() */ DIndex& operator++(); + + /** @copydoc IndexInterface::operator--() */ DIndex& operator--(); + + /** @copydoc IndexInterface::operator+() */ DIndex operator+(Int n) const; + + /** @copydoc IndexInterface::operator-() */ DIndex operator-(Int n) const; + + /** @copydoc IndexInterface::operator-(CIndex) */ SizeT operator-(const DIndex& i) const; + + /** @copydoc IndexInterface::operator+=() */ DIndex& operator+=(Int n); + + /** @copydoc IndexInterface::operator-=() */ DIndex& operator-=(Int n); + /** @copydoc IndexInterface::lex() */ SizeT lex() const; + + /** @copydoc IndexInterface::pmax() */ UPos pmax() const; + + /** @copydoc IndexInterface::lmax() */ UPos lmax() const; + + /** @copydoc IndexInterface::id() */ IndexId<0> id() const; + /** @copydoc IndexInterface::operator*() */ DType operator*() const; + /** @copydoc IndexInterface::dim() */ SizeT dim() const; + + /** @copydoc IndexInterface::range() */ RangePtr range() const; + /** @copydoc IndexInterface::stepSize() */ UPos stepSize(const IndexId<0>& id) const; + /** @copydoc IndexInterface::stringMeta() */ String stringMeta() const; + + /** @copydoc IndexInterface::meta() */ DType meta() const; + + /** @copydoc IndexInterface::at() */ DIndex& at(const DType& meta); + + /** @copydoc IndexInterface::prange() */ RangePtr prange(const DIndex& end) const; + + /** @copydoc IndexInterface::deepFormat() */ Vector deepFormat() const; + + /** @copydoc IndexInterface::deepMax() */ Vector deepMax() const; /** @copydoc IndexInterface::reformat() */ DIndex& reformat(const Vector& f, const Vector& s); + /** @copydoc IndexInterface::ifor() */ template decltype(auto) ifor(const Xpr& xpr, F&& f) const; - const XIndexPtr& xptr() const; - /** @copydoc IndexInterface::formatIsTrivial() */ bool formatIsTrivial() const; + /** get internal XIndex instance + @return shared pointer to XIndex instance + */ + const XIndexPtr& xptr() const; + private: XIndexPtr mI; }; + /** Trait-specialization: + DIndex can have sub-indices + */ template <> struct has_sub { static constexpr bool value = true; }; + /** dynamically cast DIndex to given type. + If type does not match the index type of the underlying index + and exception is thrown + + @tparam I index type to be returned + @param i DIndex to by casted + @return copy of underlying index instance + */ template I indexAs(const DIndex& i); } diff --git a/src/include/ranges/index_pack.h b/src/include/ranges/index_pack.h index adaa628..aab655d 100644 --- a/src/include/ranges/index_pack.h +++ b/src/include/ranges/index_pack.h @@ -2,12 +2,17 @@ /** @file include/ranges/index_pack.h - @brief ... + @brief Index pack declaration + Index packs are sets of indices. In contrast to multi-indices like + (G)MIndex or YIndex, there is no format that can be used to determine + a linearized memory position. Hence, only a lexicographic position is well defined. + Nevertheless, a function pos() is implemented, which just returns + the same value as lex(). Copyright (c) 2022 Christian Zimmermann. All rights reserved. Mail: chizeta@f3l.de - + **/ #ifndef __cxz_index_pack_h__ @@ -18,76 +23,203 @@ namespace CNORXZ { + /** **** + Static index pack. + Containes tuple of shared pointers to index instances. + @tparam Indices Index types. + */ template class SPack { public: - SP_DEFAULT_MEMBERS(constexpr,SPack); + SP_DEFAULT_MEMBERS(constexpr,SPack); /**< default constructors and assignments */ + + /** Construct from index pointers + @param is index pointers + */ constexpr SPack(const Sptr&... is); + + /** Construct from index pointer tuple + @param is index pointer tuple + */ constexpr SPack(const Tuple...>& is); + /** get underlying index pointer tuple + @return underlying index pointer tuple + */ constexpr const Tuple...>& all() const; + /** get pack size i.e. dimension (non-recursive) + @return pack size + */ constexpr SizeT size() const; - + + /** get pack element + @return i'th element of the pack + @tparam I static position + @param i static position instance + */ template constexpr decltype(auto) get(CSizeT i) const; + /** get pack element + @return i'th element of the pack + @tparam I static position + @param i static position instance + */ template constexpr decltype(auto) operator[](CSizeT i) const; + /** Append index on the r.h.s. of the pack. + @tparam Index Type of the index to be appended + @param i index to be appended + */ template constexpr decltype(auto) rmul(const Sptr& i) const; + /** Append index on the l.h.s. of the pack. + @tparam Index Type of the index to be appended + @param i Index to be appended + */ template constexpr decltype(auto) lmul(const Sptr& i) const; + /** Append another index pack on the r.h.s. of this pack + @tparam Indices2 Types of the indices in the pack to be appended + @param p Index pack to be appended + */ template constexpr decltype(auto) mul(const SPack& p) const; + /** create a range from the index pack + @return created range + */ decltype(auto) mkRange() const; + /** Get lexicographic position if pack was transformed to a (trivial) multi-index. + @return lexicographic position + */ SizeT lex() const; + + /** Get lexicographic position if pack was transformed to a (trivial) multi-index. + @return lexicographic position + */ SizeT pos() const; private: Tuple...> mIs; }; + /** Create static index pack + @tparam Indices index types + @param inds Indices to create the pack from + @return Created pack + */ template constexpr decltype(auto) spack(const Indices&... inds); + /** Create static index pack from index pointers + @tparam Indices index types + @param inds Indices to create the pack from + @return Created pack + */ template constexpr decltype(auto) spackp(const Sptr&... inds); + /** ****** + Dynamic index pack. + Containes array of shared pointers to XIndex instances. + */ class DPack { public: - DEFAULT_MEMBERS(DPack); + DEFAULT_MEMBERS(DPack); /**< default constructors and assignments */ + + /** Create pack from XIndex instance + @param is Vector of XIndex pointers + */ explicit DPack(const Vector& is); + + /** Create pack from XIndex instance (move input vector) + @param is Vector of XIndex pointers + */ explicit DPack(Vector&& is); + /** Create pack from a static pack (SPack) + @param p static pack used for construction + */ template explicit DPack(const SPack& p); - + + /** get underlying index pointer vector + @return underlying index pointer vector + */ const Vector& all() const; + + /** get pack size i.e. dimension (non-recursive) + @return pack size + */ SizeT size() const; + + /** get pack element + @return i'th element of the pack + @param i Position + */ const XIndexPtr& get(SizeT i) const; + + /** get pack element + @return i'th element of the pack + @param i Position + */ const XIndexPtr& operator[](SizeT i) const; + + /** Append index on the r.h.s. + @param i DIndex to be appended + */ DPack rmul(const Sptr& i) const; + + /** Append index on the l.h.s. + @param i DIndex to be appended + */ DPack lmul(const Sptr& i) const; + + /** Append pack on the r.h.s. + @param p Pack to be appnded + */ DPack mul(const DPack& p) const; + + /** create a range from the index pack + @return created range + */ RangePtr mkRange() const; + + /** Get lexicographic position if pack was transformed to a (trivial) multi-index. + @return lexicographic position + */ SizeT lex() const; + + /** Get lexicographic position if pack was transformed to a (trivial) multi-index. + @return lexicographic position + */ SizeT pos() const; private: Vector mIs; }; + /** Create dynamic index pack + @tparam Indices index types + @param inds Indices to create the pack from + @return Created pack + */ template DPack dpack(const Indices&... inds); + /** Create dynamic index pack from index pointers + @tparam Indices index types + @param inds Indices to create the pack from + @return Created pack + */ template DPack dpackp(const Sptr&... inds); } From 73769059284b48ef333d82be5d12a9311fe49e40 Mon Sep 17 00:00:00 2001 From: Christian Zimmermann Date: Sat, 30 Dec 2023 00:09:29 +0100 Subject: [PATCH 3/5] doxy: use readme as main page --- README.md | 12 ++++++++---- doc/doxy/Doxyfile | 4 ++-- src/include/cnorxz.h | 13 ------------- 3 files changed, 10 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 1fe520d..5b86dd8 100644 --- a/README.md +++ b/README.md @@ -9,9 +9,10 @@ This library provides a framework for handling multi dimensional containers, the The library can be installed by the following procedure (`gtest` required): ```bash -git clone git@git.f3l.de:chizeta/cnorxz.git +git clone git@git.f3l.de:chizeta/cnorxz.git +mkdir cd -cmake -DCMAKE_INSTALL_PREFIX:PATH= +cmake -DCMAKE_INSTALL_PREFIX:PATH= make install ``` @@ -31,7 +32,7 @@ The tools of the library are accessible within the namespace `CNORXZ`. (Also consider doxygen) -### Basics +### Basics and Library organization This library consists of several building blocks. For simple usage, the most important building blocks are [ranges](#ranges), [indices](#indices) and [array types](#arrays). @@ -63,8 +64,11 @@ Apart from range specific indices, there exist also special indices: * `BIndex` : The same as `AIndex`, but not const. -#### Arrays +#### Array types Finally, there are the container classes (arrays), which are derived from `CArrayBase` (const) or `ArrayBase` for a given data type `T`. All arrays are defined on a range, their data can be accessed or iterated over using suitable indices. The array-type actually containing data is called `MArray`. Moreover, there exist array-types that do not contain data, but view the data of other arrays or at least parts of the data. These are called `CSlice` (const view) or `Slice`. +#### Expressions and Operations + +... diff --git a/doc/doxy/Doxyfile b/doc/doxy/Doxyfile index d642b5f..d54e1f3 100644 --- a/doc/doxy/Doxyfile +++ b/doc/doxy/Doxyfile @@ -943,7 +943,7 @@ WARN_LOGFILE = # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # Note: If this tag is empty the current directory is searched. -INPUT = ../../src +INPUT = ../../README.md ../../src # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses @@ -1110,7 +1110,7 @@ FILTER_SOURCE_PATTERNS = # (index.html). This can be useful if you have a project on for instance GitHub # and want to reuse the introduction page also for the doxygen output. -USE_MDFILE_AS_MAINPAGE = +USE_MDFILE_AS_MAINPAGE = README.md # The Fortran standard specifies that for fixed formatted Fortran code all # characters from position 72 are to be considered as comment. A common diff --git a/src/include/cnorxz.h b/src/include/cnorxz.h index c67f97a..21a1b01 100644 --- a/src/include/cnorxz.h +++ b/src/include/cnorxz.h @@ -9,19 +9,6 @@ **/ -/** - @mainpage CNORXZ Documentation - - ## Library organization - - ## Ranges and Indices - - ## Array types - - ## Expressions and Operations - - **/ - #ifndef __cxz_cnorxz_h__ #define __cxz_cnorxz_h__ From 30a6acf903bacd7ffa0fde2af8fadcaa9513114a Mon Sep 17 00:00:00 2001 From: Christian Zimmermann Date: Sat, 30 Dec 2023 00:23:06 +0100 Subject: [PATCH 4/5] readme: include logo --- README.md | 2 ++ cnorxz_logo.png | Bin 0 -> 45556 bytes 2 files changed, 2 insertions(+) create mode 100644 cnorxz_logo.png diff --git a/README.md b/README.md index 5b86dd8..324e643 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # Container with Native Operation Routines by XZ (CNORXZ) +![Image](./cnorxz_logo.png) + ## Description This library provides a framework for handling multi dimensional containers, their meta data, and several kinds of operations on one or more of them. diff --git a/cnorxz_logo.png b/cnorxz_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..757ce6c4e75260d70d91e44c7d568ffe789ef775 GIT binary patch literal 45556 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

BFp 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 w;_@$G*EK@_Qvr?z+u_ofx(lzD2 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 Gg8m0m3QXw$ literal 0 HcmV?d00001 From 671eedf9fe8fc94b69573e8ffe6334e7d8e6e04a Mon Sep 17 00:00:00 2001 From: Christian Zimmermann Date: Sat, 30 Dec 2023 00:27:54 +0100 Subject: [PATCH 5/5] link logo in html docu --- doc/doxy/html/cnorxz_logo.png | 1 + 1 file changed, 1 insertion(+) create mode 120000 doc/doxy/html/cnorxz_logo.png diff --git a/doc/doxy/html/cnorxz_logo.png b/doc/doxy/html/cnorxz_logo.png new file mode 120000 index 0000000..45b8b49 --- /dev/null +++ b/doc/doxy/html/cnorxz_logo.png @@ -0,0 +1 @@ +../../../cnorxz_logo.png \ No newline at end of file