diff --git a/docs/unstable/bc_s.png b/docs/unstable/bc_s.png new file mode 100644 index 0000000..224b29a Binary files /dev/null and b/docs/unstable/bc_s.png differ diff --git a/docs/unstable/bc_sd.png b/docs/unstable/bc_sd.png new file mode 100644 index 0000000..31ca888 Binary files /dev/null and b/docs/unstable/bc_sd.png differ diff --git a/docs/unstable/changelog.html b/docs/unstable/changelog.html new file mode 100644 index 0000000..5498bac --- /dev/null +++ b/docs/unstable/changelog.html @@ -0,0 +1,194 @@ + + + + + + + +TRIQS/itertools: Changelog + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
TRIQS/itertools 1.2.0 +
+
C++ range library
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Changelog
+
+
+

+Version 1.2.0

+

This is Version 1.2.0 of Itertools, a single-header library for adapting C++ ranges.

+

We thank all contributors: Thomas Hahn, Alexander Hampel, Olivier Parcollet, Dylan Simon, Nils Wentzell

+

Find below an itemized list of changes in this release.

+

+General

+
    +
  • Add default constructors to various iterator types
  • +
  • Add default move assign/constructor for transformed_iter
  • +
  • Add size function for itertools::sliced
  • +
  • Use itertools distance in omp_chunk implementation
  • +
  • Change loop order in product such that rightmost range is the fastest
  • +
  • deprecate range default constructor
  • +
  • clang-format all source files
  • +
  • Fix compiler warnings
  • +
+

+cmake

+
    +
  • Add compiler warnings for IntelLLVM (#6)
  • +
  • Synchronize deps/CMakeLists.txt with nda
  • +
  • Remove redundant PythonSupport check
  • +
  • Update Findsanitizer.cmake to include TSAN and MSAN
  • +
  • Do not build documentation as subproject
  • +
+

+fixes

+
    +
  • Fix in transform_iter::operator=
  • +
  • Fix copy assignment for transform_iter
  • +
  • Fix bug in range(...).size() for negative steps + test
  • +
  • Fix bug in itertools::range::size function
  • +
+

+Version 1.1.0

+

This is Version 1.1.0 of Itertools, a single-header library for adapting C++ ranges.

+

We thank all contributors: Daniel Bauernfeind, Alexander Hampel, Dylan Simon, Nils Wentzell

+

Find below an itemized list of changes in this release.

+

+General

+
    +
  • Bugfix: Use sentinel_t for those range adaptors using std::end/cend on the underlying range
  • +
  • Add defaulted operator== to the various range adaptors
  • +
  • Fix make_vector_from_range to work for ranges with mismatching begin and end type
  • +
  • Add benchmarks for range and product_range
  • +
  • Important FIX in range implementation for nontrivial steps + test
  • +
  • Be sure to add initializer for all member of range type
  • +
  • Keep alias range::index_t for backward compatibility
  • +
  • Add range::all_t and associated static member range::all
  • +
  • Merge range implementation of nda, improve range() documentability
  • +
  • Make sure to generate empty ranges in accordance with python ranges
  • +
+

+doc

+
    +
  • Add link to reference doc to README.md
  • +
  • Minor doc cleanups for doxygen generation, add Doxyfile and update .gitignore
  • +
+

+c++20

+
    +
  • Resplace std::result_of by std::invoke_result
  • +
+

+cmake

+
    +
  • Bump Version number to 1.1.0
  • +
  • Set CXX standard using target_compile_features
  • +
  • Remove unused FindPython.cmake file
  • +
+

+Version 1.0.0

+

Itertools Version 1.0.0 is a single-header C++ library that allows, with a simple interface, for the writing of various types of range-based for loops.

+

This is the initial release for this project.

+
+
+
+ + + + diff --git a/docs/unstable/classitertools_1_1range-members.html b/docs/unstable/classitertools_1_1range-members.html new file mode 100644 index 0000000..b65ba04 --- /dev/null +++ b/docs/unstable/classitertools_1_1range-members.html @@ -0,0 +1,138 @@ + + + + + + + +TRIQS/itertools: Member List + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
TRIQS/itertools 1.2.0 +
+
C++ range library
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
range Member List
+
+
+ +

This is the complete list of members for range, including all inherited members.

+ + + + + + + + + + + + + + + + + + +
allrangeinlinestatic
begin() const noexceptrangeinline
cbegin() const noexceptrangeinline
cend() const noexceptrangeinline
end() const noexceptrangeinline
first() constrangeinline
index_t typedefrange
last() constrangeinline
operator+(long shift) constrangeinline
operator<<rangefriend
operator==(range const &) const =defaultrange
range()=defaultrange
range(long first, long last) noexceptrangeinline
range(long first, long last, long step)rangeinline
range(long last)rangeinlineexplicit
size() constrangeinline
step() constrangeinline
+
+ + + + diff --git a/docs/unstable/classitertools_1_1range.html b/docs/unstable/classitertools_1_1range.html new file mode 100644 index 0000000..d0806ac --- /dev/null +++ b/docs/unstable/classitertools_1_1range.html @@ -0,0 +1,746 @@ + + + + + + + +TRIQS/itertools: range + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
TRIQS/itertools 1.2.0 +
+
C++ range library
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ + +
+
+ +

#include <itertools/range.hpp>

+

Detailed Description

+

A lazy range of integers that mimics a Python range.

+

It stores the first value, the last value (excluded) and the step size between two indices. By default, the step size is set to 1. This function returns an iterable lazy object, which can be used in range-based for loops:

+
for (auto i : range(5)) {
+
std::cout << i << " ";
+
}
+
std::cout << "\n";
+
+
for (auto i : range(-2, 1)) {
+
std::cout << i << " ";
+
}
+
std::cout << "\n";
+
+
for (auto i : range(10, 3, -2)) {
+
std::cout << i << " ";
+
}
+
std::cout << "\n";
+
+
for (auto i : range(0, 10, -1)) {
+
std::cout << i << " "; // empty
+
}
+
A lazy range of integers that mimics a Python range.
Definition range.hpp:79
+
range()=default
Default constructor.
+

Output:

+
0 1 2 3 4
+
-2 -1 0
+
10 8 6 4
+

See also std::ranges::views::iota.

+ +

Definition at line 79 of file range.hpp.

+
+ + + + + + + +

+Classes

struct  all_t
 Denote a full range at compile-time. More...
 
struct  const_iterator
 Const iterator type for itertools::range. More...
 
+ + + + +

+Public Types

using index_t = long
 Integer type for backward compatibility.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 range ()=default
 Default constructor.
 
 range (long first, long last) noexcept
 Construct a range with a step size of 1 and a given first and last (excluded) value.
 
 range (long first, long last, long step)
 Construct a range with a given step size and a given first and last (excluded) value.
 
 range (long last)
 Construct a range with a step size of 1, a first value set to 0 and a given last value (excluded).
 
const_iterator begin () const noexcept
 The same as cbegin().
 
const_iterator cbegin () const noexcept
 Beginning of the integer range.
 
const_iterator cend () const noexcept
 End of the range.
 
const_iterator end () const noexcept
 The same as cend().
 
long first () const
 Get first value of the range.
 
long last () const
 Get last value of the range (excluded).
 
range operator+ (long shift) const
 Shift the whole range by a given amount.
 
+bool operator== (range const &) const =default
 Default equal-to operator.
 
long size () const
 Get number of elements in the range.
 
long step () const
 Get step size between two elements of the range.
 
+ + + + +

+Static Public Attributes

static constexpr all_t all = {}
 See range::all_t.
 
+ + + + +

+Friends

std::ostream & operator<< (std::ostream &os, const range &rg)
 Write the range details to std::ostream.
 
+

Member Typedef Documentation

+ +

◆ index_t

+ +
+
+ + + + +
using index_t = long
+
+ +

Integer type for backward compatibility.

+ +

Definition at line 101 of file range.hpp.

+ +
+
+

Constructor & Destructor Documentation

+ +

◆ range() [1/4]

+ +
+
+ + + + + +
+ + + + + + + +
range ()
+
+default
+
+ +

Default constructor.

+
Deprecated
Use range::range(long, long) or range::range(long, long, long) instead.
+ +
+
+ +

◆ range() [2/4]

+ +
+
+ + + + + +
+ + + + + + + + + + + +
range (long first,
long last )
+
+inlinenoexcept
+
+ +

Construct a range with a step size of 1 and a given first and last (excluded) value.

+
Parameters
+ + + +
firstFirst value of the range.
lastLast value of the range (excluded).
+
+
+ +

Definition at line 115 of file range.hpp.

+ +
+
+ +

◆ range() [3/4]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + +
range (long first,
long last,
long step )
+
+inline
+
+ +

Construct a range with a given step size and a given first and last (excluded) value.

+

Throws an exception if the step size is zero.

+
Parameters
+ + + + +
firstFirst value of the range.
lastLast value of the range (excluded).
stepNumber of integers between two elements of the range.
+
+
+ +

Definition at line 126 of file range.hpp.

+ +
+
+ +

◆ range() [4/4]

+ +
+
+ + + + + +
+ + + + + + + +
range (long last)
+
+inlineexplicit
+
+ +

Construct a range with a step size of 1, a first value set to 0 and a given last value (excluded).

+
Parameters
+ + +
lastLast value of the range (excluded).
+
+
+ +

Definition at line 134 of file range.hpp.

+ +
+
+

Member Function Documentation

+ +

◆ begin()

+ +
+
+ + + + + +
+ + + + + + + +
const_iterator begin () const
+
+inlinenoexcept
+
+ +

The same as cbegin().

+ +

Definition at line 264 of file range.hpp.

+ +
+
+ +

◆ cbegin()

+ +
+
+ + + + + +
+ + + + + + + +
const_iterator cbegin () const
+
+inlinenoexcept
+
+ +

Beginning of the integer range.

+
Returns
Iterator with its current value set to the first value of the range.
+ +

Definition at line 261 of file range.hpp.

+ +
+
+ +

◆ cend()

+ +
+
+ + + + + +
+ + + + + + + +
const_iterator cend () const
+
+inlinenoexcept
+
+ +

End of the range.

+
Returns
Iterator with its current value set to the excluded last value of the range.
+ +

Definition at line 270 of file range.hpp.

+ +
+
+ +

◆ end()

+ +
+
+ + + + + +
+ + + + + + + +
const_iterator end () const
+
+inlinenoexcept
+
+ +

The same as cend().

+ +

Definition at line 273 of file range.hpp.

+ +
+
+ +

◆ first()

+ +
+
+ + + + + +
+ + + + + + + +
long first () const
+
+inline
+
+ +

Get first value of the range.

+ +

Definition at line 140 of file range.hpp.

+ +
+
+ +

◆ last()

+ +
+
+ + + + + +
+ + + + + + + +
long last () const
+
+inline
+
+ +

Get last value of the range (excluded).

+ +

Definition at line 143 of file range.hpp.

+ +
+
+ +

◆ operator+()

+ +
+
+ + + + + +
+ + + + + + + +
range operator+ (long shift) const
+
+inline
+
+ +

Shift the whole range by a given amount.

+

Simply adds the given shift to the first and last value of the range, while keeping the same step size.

+
Parameters
+ + +
shiftAmount to shift the range by.
+
+
+
Returns
Shifted range.
+ +

Definition at line 160 of file range.hpp.

+ +
+
+ +

◆ size()

+ +
+
+ + + + + +
+ + + + + + + +
long size () const
+
+inline
+
+ +

Get number of elements in the range.

+ +

Definition at line 149 of file range.hpp.

+ +
+
+ +

◆ step()

+ +
+
+ + + + + +
+ + + + + + + +
long step () const
+
+inline
+
+ +

Get step size between two elements of the range.

+ +

Definition at line 146 of file range.hpp.

+ +
+
+

Friends And Related Symbol Documentation

+ +

◆ operator<<

+ +
+
+ + + + + +
+ + + + + + + + + + + +
std::ostream & operator<< (std::ostream & os,
const range & rg )
+
+friend
+
+ +

Write the range details to std::ostream.

+
Parameters
+ + + +
osstd::ostream object.
rgrange object.
+
+
+
Returns
Reference to os.
+ +

Definition at line 169 of file range.hpp.

+ +
+
+

Member Data Documentation

+ +

◆ all

+ +
+
+ + + + + +
+ + + + +
constexpr all_t all = {}
+
+inlinestaticconstexpr
+
+ +

See range::all_t.

+ +

Definition at line 98 of file range.hpp.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/docs/unstable/clipboard.js b/docs/unstable/clipboard.js new file mode 100644 index 0000000..42c1fb0 --- /dev/null +++ b/docs/unstable/clipboard.js @@ -0,0 +1,61 @@ +/** + +The code below is based on the Doxygen Awesome project, see +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2022 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +let clipboard_title = "Copy to clipboard" +let clipboard_icon = `` +let clipboard_successIcon = `` +let clipboard_successDuration = 1000 + +$(function() { + if(navigator.clipboard) { + const fragments = document.getElementsByClassName("fragment") + for(const fragment of fragments) { + const clipboard_div = document.createElement("div") + clipboard_div.classList.add("clipboard") + clipboard_div.innerHTML = clipboard_icon + clipboard_div.title = clipboard_title + $(clipboard_div).click(function() { + const content = this.parentNode.cloneNode(true) + // filter out line number and folded fragments from file listings + content.querySelectorAll(".lineno, .ttc, .foldclosed").forEach((node) => { node.remove() }) + let text = content.textContent + // remove trailing newlines and trailing spaces from empty lines + text = text.replace(/^\s*\n/gm,'\n').replace(/\n*$/,'') + navigator.clipboard.writeText(text); + this.classList.add("success") + this.innerHTML = clipboard_successIcon + window.setTimeout(() => { // switch back to normal icon after timeout + this.classList.remove("success") + this.innerHTML = clipboard_icon + }, clipboard_successDuration); + }) + fragment.insertBefore(clipboard_div, fragment.firstChild) + } + } +}) diff --git a/docs/unstable/closed.png b/docs/unstable/closed.png new file mode 100644 index 0000000..98cc2c9 Binary files /dev/null and b/docs/unstable/closed.png differ diff --git a/docs/unstable/cookie.js b/docs/unstable/cookie.js new file mode 100644 index 0000000..53ad21d --- /dev/null +++ b/docs/unstable/cookie.js @@ -0,0 +1,58 @@ +/*! + Cookie helper functions + Copyright (c) 2023 Dimitri van Heesch + Released under MIT license. +*/ +let Cookie = { + cookie_namespace: 'doxygen_', + + readSetting(cookie,defVal) { + if (window.chrome) { + const val = localStorage.getItem(this.cookie_namespace+cookie) || + sessionStorage.getItem(this.cookie_namespace+cookie); + if (val) return val; + } else { + let myCookie = this.cookie_namespace+cookie+"="; + if (document.cookie) { + const index = document.cookie.indexOf(myCookie); + if (index != -1) { + const valStart = index + myCookie.length; + let valEnd = document.cookie.indexOf(";", valStart); + if (valEnd == -1) { + valEnd = document.cookie.length; + } + return document.cookie.substring(valStart, valEnd); + } + } + } + return defVal; + }, + + writeSetting(cookie,val,days=10*365) { // default days='forever', 0=session cookie, -1=delete + if (window.chrome) { + if (days==0) { + sessionStorage.setItem(this.cookie_namespace+cookie,val); + } else { + localStorage.setItem(this.cookie_namespace+cookie,val); + } + } else { + let date = new Date(); + date.setTime(date.getTime()+(days*24*60*60*1000)); + const expiration = days!=0 ? "expires="+date.toGMTString()+";" : ""; + document.cookie = this.cookie_namespace + cookie + "=" + + val + "; SameSite=Lax;" + expiration + "path=/"; + } + }, + + eraseSetting(cookie) { + if (window.chrome) { + if (localStorage.getItem(this.cookie_namespace+cookie)) { + localStorage.removeItem(this.cookie_namespace+cookie); + } else if (sessionStorage.getItem(this.cookie_namespace+cookie)) { + sessionStorage.removeItem(this.cookie_namespace+cookie); + } + } else { + this.writeSetting(cookie,'',-1); + } + }, +} diff --git a/docs/unstable/deprecated.html b/docs/unstable/deprecated.html new file mode 100644 index 0000000..11a457b --- /dev/null +++ b/docs/unstable/deprecated.html @@ -0,0 +1,123 @@ + + + + + + + +TRIQS/itertools: Deprecated List + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
TRIQS/itertools 1.2.0 +
+
C++ range library
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Deprecated List
+
+
+
+
+
+ + + + diff --git a/docs/unstable/dir_4fef79e7177ba769987a8da36c892c5f.html b/docs/unstable/dir_4fef79e7177ba769987a8da36c892c5f.html new file mode 100644 index 0000000..6d32d66 --- /dev/null +++ b/docs/unstable/dir_4fef79e7177ba769987a8da36c892c5f.html @@ -0,0 +1,119 @@ + + + + + + + +TRIQS/itertools: /home/runner/work/itertools/itertools/build Directory Reference + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
TRIQS/itertools 1.2.0 +
+
C++ range library
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
build Directory Reference
+
+
+
+
+ + + + diff --git a/docs/unstable/dir_6c89d1ed406002b4e6ebce07fb51a507.html b/docs/unstable/dir_6c89d1ed406002b4e6ebce07fb51a507.html new file mode 100644 index 0000000..9fe21af --- /dev/null +++ b/docs/unstable/dir_6c89d1ed406002b4e6ebce07fb51a507.html @@ -0,0 +1,119 @@ + + + + + + + +TRIQS/itertools: /home/runner/work/itertools/itertools/build/doc Directory Reference + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
TRIQS/itertools 1.2.0 +
+
C++ range library
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
doc Directory Reference
+
+
+
+
+ + + + diff --git a/docs/unstable/dir_e6396aa9aeb50fc06708f48ec9beacf2.html b/docs/unstable/dir_e6396aa9aeb50fc06708f48ec9beacf2.html new file mode 100644 index 0000000..e9a676a --- /dev/null +++ b/docs/unstable/dir_e6396aa9aeb50fc06708f48ec9beacf2.html @@ -0,0 +1,159 @@ + + + + + + + +TRIQS/itertools: itertools Directory Reference + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
TRIQS/itertools 1.2.0 +
+
C++ range library
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
itertools Directory Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

 enumerate.hpp
 Provides a range adapting function for enumerating a given range/view.
 
 iterator_facade.hpp
 Provides a CRTP base class for various iterator types in itertools.
 
 itertools.hpp
 Provides a small subset of the ranges and views from std::ranges.
 
 omp_chunk.hpp
 Provides utilities to distribute a range across OMP threads.
 
 product.hpp
 Provides a range adapting function for multiplying a given number of ranges/views (cartesian product).
 
 range.hpp
 Provides an integer range similar to Python's range.
 
 sentinel.hpp
 Provides a generic sentinel type for various iterator types in itertools.
 
 slice.hpp
 Provides a range adapting function for slicing a given range/view.
 
 stride.hpp
 Provides a range adapting function for striding through a given range/view.
 
 transform.hpp
 Provides a range adapting function for transforming a given range/view.
 
 utils.hpp
 Provides some utility functions for itertools.
 
 zip.hpp
 Provides a range adapting function for zipping a given number of ranges/views.
 
+
+
+ + + + diff --git a/docs/unstable/dir_e6396aa9aeb50fc06708f48ec9beacf2.js b/docs/unstable/dir_e6396aa9aeb50fc06708f48ec9beacf2.js new file mode 100644 index 0000000..d5fe2d6 --- /dev/null +++ b/docs/unstable/dir_e6396aa9aeb50fc06708f48ec9beacf2.js @@ -0,0 +1,15 @@ +var dir_e6396aa9aeb50fc06708f48ec9beacf2 = +[ + [ "enumerate.hpp", "enumerate_8hpp.html", "enumerate_8hpp" ], + [ "iterator_facade.hpp", "iterator__facade_8hpp.html", null ], + [ "itertools.hpp", "itertools_8hpp.html", null ], + [ "omp_chunk.hpp", "omp__chunk_8hpp.html", "omp__chunk_8hpp" ], + [ "product.hpp", "product_8hpp.html", "product_8hpp" ], + [ "range.hpp", "range_8hpp.html", "range_8hpp" ], + [ "sentinel.hpp", "sentinel_8hpp.html", "sentinel_8hpp" ], + [ "slice.hpp", "slice_8hpp.html", "slice_8hpp" ], + [ "stride.hpp", "stride_8hpp.html", "stride_8hpp" ], + [ "transform.hpp", "transform_8hpp.html", "transform_8hpp" ], + [ "utils.hpp", "utils_8hpp.html", "utils_8hpp" ], + [ "zip.hpp", "zip_8hpp.html", "zip_8hpp" ] +]; \ No newline at end of file diff --git a/docs/unstable/dir_e68e8157741866f444e17edd764ebbae.html b/docs/unstable/dir_e68e8157741866f444e17edd764ebbae.html new file mode 100644 index 0000000..23ee4b1 --- /dev/null +++ b/docs/unstable/dir_e68e8157741866f444e17edd764ebbae.html @@ -0,0 +1,119 @@ + + + + + + + +TRIQS/itertools: /home/runner/work/itertools/itertools/doc Directory Reference + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
TRIQS/itertools 1.2.0 +
+
C++ range library
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
doc Directory Reference
+
+
+
+
+ + + + diff --git a/docs/unstable/doc.svg b/docs/unstable/doc.svg new file mode 100644 index 0000000..0b928a5 --- /dev/null +++ b/docs/unstable/doc.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/docs/unstable/docd.svg b/docs/unstable/docd.svg new file mode 100644 index 0000000..ac18b27 --- /dev/null +++ b/docs/unstable/docd.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/docs/unstable/documentation.html b/docs/unstable/documentation.html new file mode 100644 index 0000000..774c154 --- /dev/null +++ b/docs/unstable/documentation.html @@ -0,0 +1,196 @@ + + + + + + + +TRIQS/itertools: API Documentation + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
TRIQS/itertools 1.2.0 +
+
C++ range library
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
API Documentation
+
+
+ +

The following provides a detailed reference documentation grouped into logical units.

+

For most users of the library it should be sufficient to either use one of the Range adapting functions or an Integer range.

+

If you are looking for a specific function, class, etc., try using the search bar in the top left corner.

+

+Range adapting functions

+

Range adapting functions take one or more existing ranges and return lazy Adapted ranges that can be iterated over. Lazy means that new elements are produced on the fly whenever they are needed instead of being precomputed when the range is created.

+

The following range adpating functions are available in itertools:

+ +

+Adapted ranges

+

Adapted ranges are returned by the range adapting functions and can be iterated over using one of the Range iterators. In most cases, the user will never have to create or modify an adapted range directly. Instead, it is recommended to simply use the provided Range adapting functions.

+

The following adapted ranges are defined in itertools:

+ +

+Range iterators

+

Range iterators are internally used by the library to iterate over Adapted ranges. In general, there should be no need for users to deal with range iterators directly. Instead, it is recommended to use range-based for loops, e.g.

for (auto [idx, val] : itertools::enumerate(some_range)) {
+
// do something with the index and the value of the range
+
}
+

vs. the traditional for loops, e.g.

auto enum_range = itertools::enumerate(some_range);
+
for (auto it = enum_range.begin(); it != enum_range.end(); ++it) {
+
// do something with the iterator
+
}
+
detail::enumerated< R > enumerate(R &&rg)
Lazy-enumerate a given range (similar to Python's enumerate).
+

The following range iterators are defined in itertools:

+ +

+Integer range

+

An Integer range is similar to a Python range. It is defined by a start value, an end value and a step size such that the i-th value of the range is given by start + i * step.

+

The following classes and functions related to integer ranges are defined in itertools:

+ +

+Utilities

+

Utilities are mostly internal implementation details and should not concern everyday users. The only functions the might be intersting to some users are: chunk_range, make_vector_from_range and omp_chunk.

+

The following utilities are defined in itertools:

+ +
+
+
+ + + + diff --git a/docs/unstable/doxygen-awesome-sidebar-only.css b/docs/unstable/doxygen-awesome-sidebar-only.css new file mode 100644 index 0000000..853f6d6 --- /dev/null +++ b/docs/unstable/doxygen-awesome-sidebar-only.css @@ -0,0 +1,116 @@ +/** + +Doxygen Awesome +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2023 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + */ + +html { + /* side nav width. MUST be = `TREEVIEW_WIDTH`. + * Make sure it is wide enough to contain the page title (logo + title + version) + */ + --side-nav-fixed-width: 335px; + --menu-display: none; + + --top-height: 120px; + --toc-sticky-top: -25px; + --toc-max-height: calc(100vh - 2 * var(--spacing-medium) - 25px); +} + +#projectname { + white-space: nowrap; +} + + +@media screen and (min-width: 768px) { + html { + --searchbar-background: var(--page-background-color); + } + + #side-nav { + min-width: var(--side-nav-fixed-width); + max-width: var(--side-nav-fixed-width); + top: var(--top-height); + overflow: visible; + } + + #nav-tree, #side-nav { + height: calc(100vh - var(--top-height)) !important; + } + + #nav-tree { + padding: 0; + } + + #top { + display: block; + border-bottom: none; + height: var(--top-height); + margin-bottom: calc(0px - var(--top-height)); + max-width: var(--side-nav-fixed-width); + overflow: hidden; + background: var(--side-nav-background); + } + #main-nav { + float: left; + padding-right: 0; + } + + .ui-resizable-handle { + cursor: default; + width: 1px !important; + background: var(--separator-color); + box-shadow: 0 calc(-2 * var(--top-height)) 0 0 var(--separator-color); + } + + #nav-path { + position: fixed; + right: 0; + left: var(--side-nav-fixed-width); + bottom: 0; + width: auto; + } + + #doc-content { + height: calc(100vh - 31px) !important; + padding-bottom: calc(3 * var(--spacing-large)); + padding-top: calc(var(--top-height) - 80px); + box-sizing: border-box; + margin-left: var(--side-nav-fixed-width) !important; + } + + #MSearchBox { + width: calc(var(--side-nav-fixed-width) - calc(2 * var(--spacing-medium))); + } + + #MSearchField { + width: calc(var(--side-nav-fixed-width) - calc(2 * var(--spacing-medium)) - 65px); + } + + #MSearchResultsWindow { + left: var(--spacing-medium) !important; + right: auto; + } +} diff --git a/docs/unstable/doxygen-awesome.css b/docs/unstable/doxygen-awesome.css new file mode 100644 index 0000000..a44945b --- /dev/null +++ b/docs/unstable/doxygen-awesome.css @@ -0,0 +1,2675 @@ +/** + +Doxygen Awesome +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2023 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +html { + /* primary theme color. This will affect the entire websites color scheme: links, arrows, labels, ... */ + --primary-color: #1779c4; + --primary-dark-color: #335c80; + --primary-light-color: #70b1e9; + + /* page base colors */ + --page-background-color: #ffffff; + --page-foreground-color: #2f4153; + --page-secondary-foreground-color: #6f7e8e; + + /* color for all separators on the website: hr, borders, ... */ + --separator-color: #dedede; + + /* border radius for all rounded components. Will affect many components, like dropdowns, memitems, codeblocks, ... */ + --border-radius-large: 8px; + --border-radius-small: 4px; + --border-radius-medium: 6px; + + /* default spacings. Most components reference these values for spacing, to provide uniform spacing on the page. */ + --spacing-small: 5px; + --spacing-medium: 10px; + --spacing-large: 16px; + + /* default box shadow used for raising an element above the normal content. Used in dropdowns, search result, ... */ + --box-shadow: 0 2px 8px 0 rgba(0,0,0,.075); + + --odd-color: rgba(0,0,0,.028); + + /* font-families. will affect all text on the website + * font-family: the normal font for text, headlines, menus + * font-family-monospace: used for preformatted text in memtitle, code, fragments + */ + --font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif; + --font-family-monospace: ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; + + /* font sizes */ + --page-font-size: 15.6px; + --navigation-font-size: 14.4px; + --toc-font-size: 13.4px; + --code-font-size: 14px; /* affects code, fragment */ + --title-font-size: 22px; + + /* content text properties. These only affect the page content, not the navigation or any other ui elements */ + --content-line-height: 27px; + /* The content is centered and constraint in it's width. To make the content fill the whole page, set the variable to auto.*/ + --content-maxwidth: 1050px; + --table-line-height: 24px; + --toc-sticky-top: var(--spacing-medium); + --toc-width: 200px; + --toc-max-height: calc(100vh - 2 * var(--spacing-medium) - 85px); + + /* colors for various content boxes: @warning, @note, @deprecated @bug */ + --warning-color: #faf3d8; + --warning-color-dark: #f3a600; + --warning-color-darker: #5f4204; + --note-color: #e4f3ff; + --note-color-dark: #1879C4; + --note-color-darker: #274a5c; + --todo-color: #e4dafd; + --todo-color-dark: #5b2bdd; + --todo-color-darker: #2a0d72; + --deprecated-color: #ecf0f3; + --deprecated-color-dark: #5b6269; + --deprecated-color-darker: #43454a; + --bug-color: #f8d1cc; + --bug-color-dark: #b61825; + --bug-color-darker: #75070f; + --invariant-color: #d8f1e3; + --invariant-color-dark: #44b86f; + --invariant-color-darker: #265532; + + /* blockquote colors */ + --blockquote-background: #f8f9fa; + --blockquote-foreground: #636568; + + /* table colors */ + --tablehead-background: #f1f1f1; + --tablehead-foreground: var(--page-foreground-color); + + /* menu-display: block | none + * Visibility of the top navigation on screens >= 768px. On smaller screen the menu is always visible. + * `GENERATE_TREEVIEW` MUST be enabled! + */ + --menu-display: block; + + --menu-focus-foreground: var(--page-background-color); + --menu-focus-background: var(--primary-color); + --menu-selected-background: rgba(0,0,0,.05); + + + --header-background: var(--page-background-color); + --header-foreground: var(--page-foreground-color); + + /* searchbar colors */ + --searchbar-background: var(--side-nav-background); + --searchbar-foreground: var(--page-foreground-color); + + /* searchbar size + * (`searchbar-width` is only applied on screens >= 768px. + * on smaller screens the searchbar will always fill the entire screen width) */ + --searchbar-height: 33px; + --searchbar-width: 210px; + --searchbar-border-radius: var(--searchbar-height); + + /* code block colors */ + --code-background: #f5f5f5; + --code-foreground: var(--page-foreground-color); + + /* fragment colors */ + --fragment-background: #F8F9FA; + --fragment-foreground: #37474F; + --fragment-keyword: #bb6bb2; + --fragment-keywordtype: #8258b3; + --fragment-keywordflow: #d67c3b; + --fragment-token: #438a59; + --fragment-comment: #969696; + --fragment-link: #5383d6; + --fragment-preprocessor: #46aaa5; + --fragment-linenumber-color: #797979; + --fragment-linenumber-background: #f4f4f5; + --fragment-linenumber-border: #e3e5e7; + --fragment-lineheight: 20px; + + /* sidebar navigation (treeview) colors */ + --side-nav-background: #fbfbfb; + --side-nav-foreground: var(--page-foreground-color); + --side-nav-arrow-opacity: 0; + --side-nav-arrow-hover-opacity: 0.9; + + --toc-background: var(--side-nav-background); + --toc-foreground: var(--side-nav-foreground); + + /* height of an item in any tree / collapsible table */ + --tree-item-height: 30px; + + --memname-font-size: var(--code-font-size); + --memtitle-font-size: 18px; + + --webkit-scrollbar-size: 7px; + --webkit-scrollbar-padding: 4px; + --webkit-scrollbar-color: var(--separator-color); + + --animation-duration: .12s +} + +@media screen and (max-width: 767px) { + html { + --page-font-size: 16px; + --navigation-font-size: 16px; + --toc-font-size: 15px; + --code-font-size: 15px; /* affects code, fragment */ + --title-font-size: 22px; + } +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) { + color-scheme: dark; + + --primary-color: #1982d2; + --primary-dark-color: #86a9c4; + --primary-light-color: #4779ac; + + --box-shadow: 0 2px 8px 0 rgba(0,0,0,.35); + + --odd-color: rgba(100,100,100,.06); + + --menu-selected-background: rgba(0,0,0,.4); + + --page-background-color: #1C1D1F; + --page-foreground-color: #d2dbde; + --page-secondary-foreground-color: #859399; + --separator-color: #38393b; + --side-nav-background: #252628; + + --code-background: #2a2c2f; + + --tablehead-background: #2a2c2f; + + --blockquote-background: #222325; + --blockquote-foreground: #7e8c92; + + --warning-color: #3b2e04; + --warning-color-dark: #f1b602; + --warning-color-darker: #ceb670; + --note-color: #163750; + --note-color-dark: #1982D2; + --note-color-darker: #dcf0fa; + --todo-color: #2a2536; + --todo-color-dark: #7661b3; + --todo-color-darker: #ae9ed6; + --deprecated-color: #2e323b; + --deprecated-color-dark: #738396; + --deprecated-color-darker: #abb0bd; + --bug-color: #2e1917; + --bug-color-dark: #ad2617; + --bug-color-darker: #f5b1aa; + --invariant-color: #303a35; + --invariant-color-dark: #76ce96; + --invariant-color-darker: #cceed5; + + --fragment-background: #282c34; + --fragment-foreground: #dbe4eb; + --fragment-keyword: #cc99cd; + --fragment-keywordtype: #ab99cd; + --fragment-keywordflow: #e08000; + --fragment-token: #7ec699; + --fragment-comment: #999999; + --fragment-link: #98c0e3; + --fragment-preprocessor: #65cabe; + --fragment-linenumber-color: #cccccc; + --fragment-linenumber-background: #35393c; + --fragment-linenumber-border: #1f1f1f; + } +} + +/* dark mode variables are defined twice, to support both the dark-mode without and with doxygen-awesome-darkmode-toggle.js */ +html.dark-mode { + color-scheme: dark; + + --primary-color: #1982d2; + --primary-dark-color: #86a9c4; + --primary-light-color: #4779ac; + + --box-shadow: 0 2px 8px 0 rgba(0,0,0,.30); + + --odd-color: rgba(100,100,100,.06); + + --menu-selected-background: rgba(0,0,0,.4); + + --page-background-color: #1C1D1F; + --page-foreground-color: #d2dbde; + --page-secondary-foreground-color: #859399; + --separator-color: #38393b; + --side-nav-background: #252628; + + --code-background: #2a2c2f; + + --tablehead-background: #2a2c2f; + + --blockquote-background: #222325; + --blockquote-foreground: #7e8c92; + + --warning-color: #3b2e04; + --warning-color-dark: #f1b602; + --warning-color-darker: #ceb670; + --note-color: #163750; + --note-color-dark: #1982D2; + --note-color-darker: #dcf0fa; + --todo-color: #2a2536; + --todo-color-dark: #7661b3; + --todo-color-darker: #ae9ed6; + --deprecated-color: #2e323b; + --deprecated-color-dark: #738396; + --deprecated-color-darker: #abb0bd; + --bug-color: #2e1917; + --bug-color-dark: #ad2617; + --bug-color-darker: #f5b1aa; + --invariant-color: #303a35; + --invariant-color-dark: #76ce96; + --invariant-color-darker: #cceed5; + + --fragment-background: #282c34; + --fragment-foreground: #dbe4eb; + --fragment-keyword: #cc99cd; + --fragment-keywordtype: #ab99cd; + --fragment-keywordflow: #e08000; + --fragment-token: #7ec699; + --fragment-comment: #999999; + --fragment-link: #98c0e3; + --fragment-preprocessor: #65cabe; + --fragment-linenumber-color: #cccccc; + --fragment-linenumber-background: #35393c; + --fragment-linenumber-border: #1f1f1f; +} + +body { + color: var(--page-foreground-color); + background-color: var(--page-background-color); + font-size: var(--page-font-size); +} + +body, table, div, p, dl, #nav-tree .label, .title, +.sm-dox a, .sm-dox a:hover, .sm-dox a:focus, #projectname, +.SelectItem, #MSearchField, .navpath li.navelem a, +.navpath li.navelem a:hover, p.reference, p.definition, div.toc li, div.toc h3 { + font-family: var(--font-family); +} + +h1, h2, h3, h4, h5 { + margin-top: 1em; + font-weight: 600; + line-height: initial; +} + +p, div, table, dl, p.reference, p.definition { + font-size: var(--page-font-size); +} + +p.reference, p.definition { + color: var(--page-secondary-foreground-color); +} + +a:link, a:visited, a:hover, a:focus, a:active { + color: var(--primary-color) !important; + font-weight: 500; + background: none; +} + +a.anchor { + scroll-margin-top: var(--spacing-large); + display: block; +} + +/* + Title and top navigation + */ + +#top { + background: var(--header-background); + border-bottom: 1px solid var(--separator-color); +} + +@media screen and (min-width: 768px) { + #top { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + align-items: center; + } +} + +#main-nav { + flex-grow: 5; + padding: var(--spacing-small) var(--spacing-medium); +} + +#titlearea { + width: auto; + padding: var(--spacing-medium) var(--spacing-large); + background: none; + color: var(--header-foreground); + border-bottom: none; +} + +@media screen and (max-width: 767px) { + #titlearea { + padding-bottom: var(--spacing-small); + } +} + +#titlearea table tbody tr { + height: auto !important; +} + +#projectname { + font-size: var(--title-font-size); + font-weight: 600; +} + +#projectnumber { + font-family: inherit; + font-size: 60%; +} + +#projectbrief { + font-family: inherit; + font-size: 80%; +} + +#projectlogo { + vertical-align: middle; +} + +#projectlogo img { + max-height: calc(var(--title-font-size) * 2); + margin-right: var(--spacing-small); +} + +.sm-dox, .tabs, .tabs2, .tabs3 { + background: none; + padding: 0; +} + +.tabs, .tabs2, .tabs3 { + border-bottom: 1px solid var(--separator-color); + margin-bottom: -1px; +} + +.main-menu-btn-icon, .main-menu-btn-icon:before, .main-menu-btn-icon:after { + background: var(--page-secondary-foreground-color); +} + +@media screen and (max-width: 767px) { + .sm-dox a span.sub-arrow { + background: var(--code-background); + } + + #main-menu a.has-submenu span.sub-arrow { + color: var(--page-secondary-foreground-color); + border-radius: var(--border-radius-medium); + } + + #main-menu a.has-submenu:hover span.sub-arrow { + color: var(--page-foreground-color); + } +} + +@media screen and (min-width: 768px) { + .sm-dox li, .tablist li { + display: var(--menu-display); + } + + .sm-dox a span.sub-arrow { + border-color: var(--header-foreground) transparent transparent transparent; + } + + .sm-dox a:hover span.sub-arrow { + border-color: var(--menu-focus-foreground) transparent transparent transparent; + } + + .sm-dox ul a span.sub-arrow { + border-color: transparent transparent transparent var(--page-foreground-color); + } + + .sm-dox ul a:hover span.sub-arrow { + border-color: transparent transparent transparent var(--menu-focus-foreground); + } +} + +.sm-dox ul { + background: var(--page-background-color); + box-shadow: var(--box-shadow); + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium) !important; + padding: var(--spacing-small); + animation: ease-out 150ms slideInMenu; +} + +@keyframes slideInMenu { + from { + opacity: 0; + transform: translate(0px, -2px); + } + + to { + opacity: 1; + transform: translate(0px, 0px); + } +} + +.sm-dox ul a { + color: var(--page-foreground-color) !important; + background: var(--page-background-color); + font-size: var(--navigation-font-size); +} + +.sm-dox>li>ul:after { + border-bottom-color: var(--page-background-color) !important; +} + +.sm-dox>li>ul:before { + border-bottom-color: var(--separator-color) !important; +} + +.sm-dox ul a:hover, .sm-dox ul a:active, .sm-dox ul a:focus { + font-size: var(--navigation-font-size) !important; + color: var(--menu-focus-foreground) !important; + text-shadow: none; + background-color: var(--menu-focus-background); + border-radius: var(--border-radius-small) !important; +} + +.sm-dox a, .sm-dox a:focus, .tablist li, .tablist li a, .tablist li.current a { + text-shadow: none; + background: transparent; + background-image: none !important; + color: var(--header-foreground) !important; + font-weight: normal; + font-size: var(--navigation-font-size); + border-radius: var(--border-radius-small) !important; +} + +.sm-dox a:focus { + outline: auto; +} + +.sm-dox a:hover, .sm-dox a:active, .tablist li a:hover { + text-shadow: none; + font-weight: normal; + background: var(--menu-focus-background); + color: var(--menu-focus-foreground) !important; + border-radius: var(--border-radius-small) !important; + font-size: var(--navigation-font-size); +} + +.tablist li.current { + border-radius: var(--border-radius-small); + background: var(--menu-selected-background); +} + +.tablist li { + margin: var(--spacing-small) 0 var(--spacing-small) var(--spacing-small); +} + +.tablist a { + padding: 0 var(--spacing-large); +} + + +/* + Search box + */ + +#MSearchBox { + height: var(--searchbar-height); + background: var(--searchbar-background); + border-radius: var(--searchbar-border-radius); + border: 1px solid var(--separator-color); + overflow: hidden; + width: var(--searchbar-width); + position: relative; + box-shadow: none; + display: block; + margin-top: 0; +} + +/* until Doxygen 1.9.4 */ +.left img#MSearchSelect { + left: 0; + user-select: none; + padding-left: 8px; +} + +/* Doxygen 1.9.5 */ +.left span#MSearchSelect { + left: 0; + user-select: none; + margin-left: 8px; + padding: 0; +} + +.left #MSearchSelect[src$=".png"] { + padding-left: 0 +} + +.SelectionMark { + user-select: none; +} + +.tabs .left #MSearchSelect { + padding-left: 0; +} + +.tabs #MSearchBox { + position: absolute; + right: var(--spacing-medium); +} + +@media screen and (max-width: 767px) { + .tabs #MSearchBox { + position: relative; + right: 0; + margin-left: var(--spacing-medium); + margin-top: 0; + } +} + +#MSearchSelectWindow, #MSearchResultsWindow { + z-index: 9999; +} + +#MSearchBox.MSearchBoxActive { + border-color: var(--primary-color); + box-shadow: inset 0 0 0 1px var(--primary-color); +} + +#main-menu > li:last-child { + margin-right: 0; +} + +@media screen and (max-width: 767px) { + #main-menu > li:last-child { + height: 50px; + } +} + +#MSearchField { + font-size: var(--navigation-font-size); + height: calc(var(--searchbar-height) - 2px); + background: transparent; + width: calc(var(--searchbar-width) - 64px); +} + +.MSearchBoxActive #MSearchField { + color: var(--searchbar-foreground); +} + +#MSearchSelect { + top: calc(calc(var(--searchbar-height) / 2) - 11px); +} + +#MSearchBox span.left, #MSearchBox span.right { + background: none; + background-image: none; +} + +#MSearchBox span.right { + padding-top: calc(calc(var(--searchbar-height) / 2) - 12px); + position: absolute; + right: var(--spacing-small); +} + +.tabs #MSearchBox span.right { + top: calc(calc(var(--searchbar-height) / 2) - 12px); +} + +@keyframes slideInSearchResults { + from { + opacity: 0; + transform: translate(0, 15px); + } + + to { + opacity: 1; + transform: translate(0, 20px); + } +} + +#MSearchResultsWindow { + left: auto !important; + right: var(--spacing-medium); + border-radius: var(--border-radius-large); + border: 1px solid var(--separator-color); + transform: translate(0, 20px); + box-shadow: var(--box-shadow); + animation: ease-out 280ms slideInSearchResults; + background: var(--page-background-color); +} + +iframe#MSearchResults { + margin: 4px; +} + +iframe { + color-scheme: normal; +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) iframe#MSearchResults { + filter: invert() hue-rotate(180deg); + } +} + +html.dark-mode iframe#MSearchResults { + filter: invert() hue-rotate(180deg); +} + +#MSearchResults .SRPage { + background-color: transparent; +} + +#MSearchResults .SRPage .SREntry { + font-size: 10pt; + padding: var(--spacing-small) var(--spacing-medium); +} + +#MSearchSelectWindow { + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium); + box-shadow: var(--box-shadow); + background: var(--page-background-color); + padding-top: var(--spacing-small); + padding-bottom: var(--spacing-small); +} + +#MSearchSelectWindow a.SelectItem { + font-size: var(--navigation-font-size); + line-height: var(--content-line-height); + margin: 0 var(--spacing-small); + border-radius: var(--border-radius-small); + color: var(--page-foreground-color) !important; + font-weight: normal; +} + +#MSearchSelectWindow a.SelectItem:hover { + background: var(--menu-focus-background); + color: var(--menu-focus-foreground) !important; +} + +@media screen and (max-width: 767px) { + #MSearchBox { + margin-top: var(--spacing-medium); + margin-bottom: var(--spacing-medium); + width: calc(100vw - 30px); + } + + #main-menu > li:last-child { + float: none !important; + } + + #MSearchField { + width: calc(100vw - 110px); + } + + @keyframes slideInSearchResultsMobile { + from { + opacity: 0; + transform: translate(0, 15px); + } + + to { + opacity: 1; + transform: translate(0, 20px); + } + } + + #MSearchResultsWindow { + left: var(--spacing-medium) !important; + right: var(--spacing-medium); + overflow: auto; + transform: translate(0, 20px); + animation: ease-out 280ms slideInSearchResultsMobile; + width: auto !important; + } + + /* + * Overwrites for fixing the searchbox on mobile in doxygen 1.9.2 + */ + label.main-menu-btn ~ #searchBoxPos1 { + top: 3px !important; + right: 6px !important; + left: 45px; + display: flex; + } + + label.main-menu-btn ~ #searchBoxPos1 > #MSearchBox { + margin-top: 0; + margin-bottom: 0; + flex-grow: 2; + float: left; + } +} + +/* + Tree view + */ + +#side-nav { + padding: 0 !important; + background: var(--side-nav-background); + min-width: 8px; + max-width: 50vw; +} + +@media screen and (max-width: 767px) { + #side-nav { + display: none; + } + + #doc-content { + margin-left: 0 !important; + } +} + +#nav-tree { + background: transparent; + margin-right: 1px; +} + +#nav-tree .label { + font-size: var(--navigation-font-size); +} + +#nav-tree .item { + height: var(--tree-item-height); + line-height: var(--tree-item-height); +} + +#nav-tree .item > a:focus { + outline: none; +} + +#nav-sync { + bottom: 12px; + right: 12px; + top: auto !important; + user-select: none; +} + +#nav-tree .selected { + text-shadow: none; + background-image: none; + background-color: transparent; + position: relative; +} + +#nav-tree .selected::after { + content: ""; + position: absolute; + top: 1px; + bottom: 1px; + left: 0; + width: 4px; + border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0; + background: var(--primary-color); +} + + +#nav-tree a { + color: var(--side-nav-foreground) !important; + font-weight: normal; +} + +#nav-tree a:focus { + outline-style: auto; +} + +#nav-tree .arrow { + opacity: var(--side-nav-arrow-opacity); + background: none; +} + +.arrow { + color: inherit; + cursor: pointer; + font-size: 45%; + vertical-align: middle; + margin-right: 2px; + font-family: serif; + height: auto; + text-align: right; +} + +#nav-tree div.item:hover .arrow, #nav-tree a:focus .arrow { + opacity: var(--side-nav-arrow-hover-opacity); +} + +#nav-tree .selected a { + color: var(--primary-color) !important; + font-weight: bolder; + font-weight: 600; +} + +.ui-resizable-e { + width: 4px; + background: transparent; + box-shadow: inset -1px 0 0 0 var(--separator-color); +} + +/* + Contents + */ + +div.header { + border-bottom: 1px solid var(--separator-color); + background-color: var(--page-background-color); + background-image: none; +} + +@media screen and (min-width: 1000px) { + #doc-content > div > div.contents, + .PageDoc > div.contents { + display: flex; + flex-direction: row-reverse; + flex-wrap: nowrap; + align-items: flex-start; + } + + div.contents .textblock { + min-width: 200px; + flex-grow: 1; + } +} + +div.contents, div.header .title, div.header .summary { + max-width: var(--content-maxwidth); +} + +div.contents, div.header .title { + line-height: initial; + margin: calc(var(--spacing-medium) + .2em) auto var(--spacing-medium) auto; +} + +div.header .summary { + margin: var(--spacing-medium) auto 0 auto; +} + +div.headertitle { + padding: 0; +} + +div.header .title { + font-weight: 600; + font-size: 225%; + padding: var(--spacing-medium) var(--spacing-large); + word-break: break-word; +} + +div.header .summary { + width: auto; + display: block; + float: none; + padding: 0 var(--spacing-large); +} + +td.memSeparator { + border-color: var(--separator-color); +} + +span.mlabel { + background: var(--primary-color); + border: none; + padding: 4px 9px; + border-radius: 12px; + margin-right: var(--spacing-medium); +} + +span.mlabel:last-of-type { + margin-right: 2px; +} + +div.contents { + padding: 0 var(--spacing-large); +} + +div.contents p, div.contents li { + line-height: var(--content-line-height); +} + +div.contents div.dyncontent { + margin: var(--spacing-medium) 0; +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) div.contents div.dyncontent img, + html:not(.light-mode) div.contents center img, + html:not(.light-mode) div.contents > table img, + html:not(.light-mode) div.contents div.dyncontent iframe, + html:not(.light-mode) div.contents center iframe, + html:not(.light-mode) div.contents table iframe, + html:not(.light-mode) div.contents .dotgraph iframe { + filter: brightness(89%) hue-rotate(180deg) invert(); + } +} + +html.dark-mode div.contents div.dyncontent img, +html.dark-mode div.contents center img, +html.dark-mode div.contents > table img, +html.dark-mode div.contents div.dyncontent iframe, +html.dark-mode div.contents center iframe, +html.dark-mode div.contents table iframe, +html.dark-mode div.contents .dotgraph iframe + { + filter: brightness(89%) hue-rotate(180deg) invert(); +} + +h2.groupheader { + border-bottom: 0px; + color: var(--page-foreground-color); + box-shadow: + 100px 0 var(--page-background-color), + -100px 0 var(--page-background-color), + 100px 0.75px var(--separator-color), + -100px 0.75px var(--separator-color), + 500px 0 var(--page-background-color), + -500px 0 var(--page-background-color), + 500px 0.75px var(--separator-color), + -500px 0.75px var(--separator-color), + 900px 0 var(--page-background-color), + -900px 0 var(--page-background-color), + 900px 0.75px var(--separator-color), + -900px 0.75px var(--separator-color), + 1400px 0 var(--page-background-color), + -1400px 0 var(--page-background-color), + 1400px 0.75px var(--separator-color), + -1400px 0.75px var(--separator-color), + 1900px 0 var(--page-background-color), + -1900px 0 var(--page-background-color), + 1900px 0.75px var(--separator-color), + -1900px 0.75px var(--separator-color); +} + +blockquote { + margin: 0 var(--spacing-medium) 0 var(--spacing-medium); + padding: var(--spacing-small) var(--spacing-large); + background: var(--blockquote-background); + color: var(--blockquote-foreground); + border-left: 0; + overflow: visible; + border-radius: var(--border-radius-medium); + overflow: visible; + position: relative; +} + +blockquote::before, blockquote::after { + font-weight: bold; + font-family: serif; + font-size: 360%; + opacity: .15; + position: absolute; +} + +blockquote::before { + content: "“"; + left: -10px; + top: 4px; +} + +blockquote::after { + content: "”"; + right: -8px; + bottom: -25px; +} + +blockquote p { + margin: var(--spacing-small) 0 var(--spacing-medium) 0; +} +.paramname { + font-weight: 600; + color: var(--primary-dark-color); +} + +.paramname > code { + border: 0; +} + +table.params .paramname { + font-weight: 600; + font-family: var(--font-family-monospace); + font-size: var(--code-font-size); + padding-right: var(--spacing-small); + line-height: var(--table-line-height); +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px var(--primary-light-color); +} + +.alphachar a { + color: var(--page-foreground-color); +} + +.dotgraph { + max-width: 100%; + overflow-x: scroll; +} + +.dotgraph .caption { + position: sticky; + left: 0; +} + +/* Wrap Graphviz graphs with the `interactive_dotgraph` class if `INTERACTIVE_SVG = YES` */ +.interactive_dotgraph .dotgraph iframe { + max-width: 100%; +} + +/* + Table of Contents + */ + +div.contents .toc { + max-height: var(--toc-max-height); + min-width: var(--toc-width); + border: 0; + border-left: 1px solid var(--separator-color); + border-radius: 0; + background-color: transparent; + box-shadow: none; + position: sticky; + top: var(--toc-sticky-top); + padding: 0 var(--spacing-large); + margin: var(--spacing-small) 0 var(--spacing-large) var(--spacing-large); +} + +div.toc h3 { + color: var(--toc-foreground); + font-size: var(--navigation-font-size); + margin: var(--spacing-large) 0 var(--spacing-medium) 0; +} + +div.toc li { + padding: 0; + background: none; + line-height: var(--toc-font-size); + margin: var(--toc-font-size) 0 0 0; +} + +div.toc li::before { + display: none; +} + +div.toc ul { + margin-top: 0 +} + +div.toc li a { + font-size: var(--toc-font-size); + color: var(--page-foreground-color) !important; + text-decoration: none; +} + +div.toc li a:hover, div.toc li a.active { + color: var(--primary-color) !important; +} + +div.toc li a.aboveActive { + color: var(--page-secondary-foreground-color) !important; +} + + +@media screen and (max-width: 999px) { + div.contents .toc { + max-height: 45vh; + float: none; + width: auto; + margin: 0 0 var(--spacing-medium) 0; + position: relative; + top: 0; + position: relative; + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium); + background-color: var(--toc-background); + box-shadow: var(--box-shadow); + } + + div.contents .toc.interactive { + max-height: calc(var(--navigation-font-size) + 2 * var(--spacing-large)); + overflow: hidden; + } + + div.contents .toc > h3 { + -webkit-tap-highlight-color: transparent; + cursor: pointer; + position: sticky; + top: 0; + background-color: var(--toc-background); + margin: 0; + padding: var(--spacing-large) 0; + display: block; + } + + div.contents .toc.interactive > h3::before { + content: ""; + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 5px solid var(--primary-color); + display: inline-block; + margin-right: var(--spacing-small); + margin-bottom: calc(var(--navigation-font-size) / 4); + transform: rotate(-90deg); + transition: transform var(--animation-duration) ease-out; + } + + div.contents .toc.interactive.open > h3::before { + transform: rotate(0deg); + } + + div.contents .toc.interactive.open { + max-height: 45vh; + overflow: auto; + transition: max-height 0.2s ease-in-out; + } + + div.contents .toc a, div.contents .toc a.active { + color: var(--primary-color) !important; + } + + div.contents .toc a:hover { + text-decoration: underline; + } +} + +/* + Code & Fragments + */ + +code, div.fragment, pre.fragment { + border-radius: var(--border-radius-small); + border: 1px solid var(--separator-color); + overflow: hidden; +} + +code { + display: inline; + background: var(--code-background); + color: var(--code-foreground); + padding: 2px 6px; +} + +div.fragment, pre.fragment { + margin: var(--spacing-medium) 0; + padding: calc(var(--spacing-large) - (var(--spacing-large) / 6)) var(--spacing-large); + background: var(--fragment-background); + color: var(--fragment-foreground); + overflow-x: auto; +} + +@media screen and (max-width: 767px) { + div.fragment, pre.fragment { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-right: 0; + } + + .contents > div.fragment, + .textblock > div.fragment, + .textblock > pre.fragment, + .textblock > .tabbed > ul > li > div.fragment, + .textblock > .tabbed > ul > li > pre.fragment, + .contents > .doxygen-awesome-fragment-wrapper > div.fragment, + .textblock > .doxygen-awesome-fragment-wrapper > div.fragment, + .textblock > .doxygen-awesome-fragment-wrapper > pre.fragment, + .textblock > .tabbed > ul > li > .doxygen-awesome-fragment-wrapper > div.fragment, + .textblock > .tabbed > ul > li > .doxygen-awesome-fragment-wrapper > pre.fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-large)); + border-radius: 0; + border-left: 0; + } + + .textblock li > .fragment, + .textblock li > .doxygen-awesome-fragment-wrapper > .fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-large)); + } + + .memdoc li > .fragment, + .memdoc li > .doxygen-awesome-fragment-wrapper > .fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-medium)); + } + + .textblock ul, .memdoc ul { + overflow: initial; + } + + .memdoc > div.fragment, + .memdoc > pre.fragment, + dl dd > div.fragment, + dl dd pre.fragment, + .memdoc > .doxygen-awesome-fragment-wrapper > div.fragment, + .memdoc > .doxygen-awesome-fragment-wrapper > pre.fragment, + dl dd > .doxygen-awesome-fragment-wrapper > div.fragment, + dl dd .doxygen-awesome-fragment-wrapper > pre.fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-medium)); + border-radius: 0; + border-left: 0; + } +} + +code, code a, pre.fragment, div.fragment, div.fragment .line, div.fragment span, div.fragment .line a, div.fragment .line span { + font-family: var(--font-family-monospace); + font-size: var(--code-font-size) !important; +} + +div.line:after { + margin-right: var(--spacing-medium); +} + +div.fragment .line, pre.fragment { + white-space: pre; + word-wrap: initial; + line-height: var(--fragment-lineheight); +} + +div.fragment span.keyword { + color: var(--fragment-keyword); +} + +div.fragment span.keywordtype { + color: var(--fragment-keywordtype); +} + +div.fragment span.keywordflow { + color: var(--fragment-keywordflow); +} + +div.fragment span.stringliteral { + color: var(--fragment-token) +} + +div.fragment span.comment { + color: var(--fragment-comment); +} + +div.fragment a.code { + color: var(--fragment-link) !important; +} + +div.fragment span.preprocessor { + color: var(--fragment-preprocessor); +} + +div.fragment span.lineno { + display: inline-block; + width: 27px; + border-right: none; + background: var(--fragment-linenumber-background); + color: var(--fragment-linenumber-color); +} + +div.fragment span.lineno a { + background: none; + color: var(--fragment-link) !important; +} + +div.fragment > .line:first-child .lineno { + box-shadow: -999999px 0px 0 999999px var(--fragment-linenumber-background), -999998px 0px 0 999999px var(--fragment-linenumber-border); + background-color: var(--fragment-linenumber-background) !important; +} + +div.line { + border-radius: var(--border-radius-small); +} + +div.line.glow { + background-color: var(--primary-light-color); + box-shadow: none; +} + +/* + dl warning, attention, note, deprecated, bug, ... + */ + +dl.bug dt a, dl.deprecated dt a, dl.todo dt a { + font-weight: bold !important; +} + +dl.warning, dl.attention, dl.note, dl.deprecated, dl.bug, dl.invariant, dl.pre, dl.post, dl.todo, dl.remark { + padding: var(--spacing-medium); + margin: var(--spacing-medium) 0; + color: var(--page-background-color); + overflow: hidden; + margin-left: 0; + border-radius: var(--border-radius-small); +} + +dl.section dd { + margin-bottom: 2px; +} + +dl.warning, dl.attention { + background: var(--warning-color); + border-left: 8px solid var(--warning-color-dark); + color: var(--warning-color-darker); +} + +dl.warning dt, dl.attention dt { + color: var(--warning-color-dark); +} + +dl.note, dl.remark { + background: var(--note-color); + border-left: 8px solid var(--note-color-dark); + color: var(--note-color-darker); +} + +dl.note dt, dl.remark dt { + color: var(--note-color-dark); +} + +dl.todo { + background: var(--todo-color); + border-left: 8px solid var(--todo-color-dark); + color: var(--todo-color-darker); +} + +dl.todo dt a { + color: var(--todo-color-dark) !important; +} + +dl.bug dt a { + color: var(--todo-color-dark) !important; +} + +dl.bug { + background: var(--bug-color); + border-left: 8px solid var(--bug-color-dark); + color: var(--bug-color-darker); +} + +dl.bug dt a { + color: var(--bug-color-dark) !important; +} + +dl.deprecated { + background: var(--deprecated-color); + border-left: 8px solid var(--deprecated-color-dark); + color: var(--deprecated-color-darker); +} + +dl.deprecated dt a { + color: var(--deprecated-color-dark) !important; +} + +dl.section dd, dl.bug dd, dl.deprecated dd, dl.todo dd { + margin-inline-start: 0px; +} + +dl.invariant, dl.pre, dl.post { + background: var(--invariant-color); + border-left: 8px solid var(--invariant-color-dark); + color: var(--invariant-color-darker); +} + +dl.invariant dt, dl.pre dt, dl.post dt { + color: var(--invariant-color-dark); +} + +/* + memitem + */ + +div.memdoc, div.memproto, h2.memtitle { + box-shadow: none; + background-image: none; + border: none; +} + +div.memdoc { + padding: 0 var(--spacing-medium); + background: var(--page-background-color); +} + +h2.memtitle, div.memitem { + border: 1px solid var(--separator-color); + box-shadow: var(--box-shadow); +} + +h2.memtitle { + box-shadow: 0px var(--spacing-medium) 0 -1px var(--fragment-background), var(--box-shadow); +} + +div.memitem { + transition: none; +} + +div.memproto, h2.memtitle { + background: var(--fragment-background); +} + +h2.memtitle { + font-weight: 500; + font-size: var(--memtitle-font-size); + font-family: var(--font-family-monospace); + border-bottom: none; + border-top-left-radius: var(--border-radius-medium); + border-top-right-radius: var(--border-radius-medium); + word-break: break-all; + position: relative; +} + +h2.memtitle:after { + content: ""; + display: block; + background: var(--fragment-background); + height: var(--spacing-medium); + bottom: calc(0px - var(--spacing-medium)); + left: 0; + right: -14px; + position: absolute; + border-top-right-radius: var(--border-radius-medium); +} + +h2.memtitle > span.permalink { + font-size: inherit; +} + +h2.memtitle > span.permalink > a { + text-decoration: none; + padding-left: 3px; + margin-right: -4px; + user-select: none; + display: inline-block; + margin-top: -6px; +} + +h2.memtitle > span.permalink > a:hover { + color: var(--primary-dark-color) !important; +} + +a:target + h2.memtitle, a:target + h2.memtitle + div.memitem { + border-color: var(--primary-light-color); +} + +div.memitem { + border-top-right-radius: var(--border-radius-medium); + border-bottom-right-radius: var(--border-radius-medium); + border-bottom-left-radius: var(--border-radius-medium); + overflow: hidden; + display: block !important; +} + +div.memdoc { + border-radius: 0; +} + +div.memproto { + border-radius: 0 var(--border-radius-small) 0 0; + overflow: auto; + border-bottom: 1px solid var(--separator-color); + padding: var(--spacing-medium); + margin-bottom: -1px; +} + +div.memtitle { + border-top-right-radius: var(--border-radius-medium); + border-top-left-radius: var(--border-radius-medium); +} + +div.memproto table.memname { + font-family: var(--font-family-monospace); + color: var(--page-foreground-color); + font-size: var(--memname-font-size); + text-shadow: none; +} + +div.memproto div.memtemplate { + font-family: var(--font-family-monospace); + color: var(--primary-dark-color); + font-size: var(--memname-font-size); + margin-left: 2px; + text-shadow: none; +} + +table.mlabels, table.mlabels > tbody { + display: block; +} + +td.mlabels-left { + width: auto; +} + +td.mlabels-right { + margin-top: 3px; + position: sticky; + left: 0; +} + +table.mlabels > tbody > tr:first-child { + display: flex; + justify-content: space-between; + flex-wrap: wrap; +} + +.memname, .memitem span.mlabels { + margin: 0 +} + +/* + reflist + */ + +dl.reflist { + box-shadow: var(--box-shadow); + border-radius: var(--border-radius-medium); + border: 1px solid var(--separator-color); + overflow: hidden; + padding: 0; +} + + +dl.reflist dt, dl.reflist dd { + box-shadow: none; + text-shadow: none; + background-image: none; + border: none; + padding: 12px; +} + + +dl.reflist dt { + font-weight: 500; + border-radius: 0; + background: var(--code-background); + border-bottom: 1px solid var(--separator-color); + color: var(--page-foreground-color) +} + + +dl.reflist dd { + background: none; +} + +/* + Table + */ + +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname), +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody { + display: inline-block; + max-width: 100%; +} + +.contents > table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname):not(.classindex) { + margin-left: calc(0px - var(--spacing-large)); + margin-right: calc(0px - var(--spacing-large)); + max-width: calc(100% + 2 * var(--spacing-large)); +} + +table.fieldtable, +table.markdownTable tbody, +table.doxtable tbody { + border: none; + margin: var(--spacing-medium) 0; + box-shadow: 0 0 0 1px var(--separator-color); + border-radius: var(--border-radius-small); +} + +table.markdownTable, table.doxtable, table.fieldtable { + padding: 1px; +} + +table.doxtable caption { + display: block; +} + +table.fieldtable { + border-collapse: collapse; + width: 100%; +} + +th.markdownTableHeadLeft, +th.markdownTableHeadRight, +th.markdownTableHeadCenter, +th.markdownTableHeadNone, +table.doxtable th { + background: var(--tablehead-background); + color: var(--tablehead-foreground); + font-weight: 600; + font-size: var(--page-font-size); +} + +th.markdownTableHeadLeft:first-child, +th.markdownTableHeadRight:first-child, +th.markdownTableHeadCenter:first-child, +th.markdownTableHeadNone:first-child, +table.doxtable tr th:first-child { + border-top-left-radius: var(--border-radius-small); +} + +th.markdownTableHeadLeft:last-child, +th.markdownTableHeadRight:last-child, +th.markdownTableHeadCenter:last-child, +th.markdownTableHeadNone:last-child, +table.doxtable tr th:last-child { + border-top-right-radius: var(--border-radius-small); +} + +table.markdownTable td, +table.markdownTable th, +table.fieldtable td, +table.fieldtable th, +table.doxtable td, +table.doxtable th { + border: 1px solid var(--separator-color); + padding: var(--spacing-small) var(--spacing-medium); +} + +table.markdownTable td:last-child, +table.markdownTable th:last-child, +table.fieldtable td:last-child, +table.fieldtable th:last-child, +table.doxtable td:last-child, +table.doxtable th:last-child { + border-right: none; +} + +table.markdownTable td:first-child, +table.markdownTable th:first-child, +table.fieldtable td:first-child, +table.fieldtable th:first-child, +table.doxtable td:first-child, +table.doxtable th:first-child { + border-left: none; +} + +table.markdownTable tr:first-child td, +table.markdownTable tr:first-child th, +table.fieldtable tr:first-child td, +table.fieldtable tr:first-child th, +table.doxtable tr:first-child td, +table.doxtable tr:first-child th { + border-top: none; +} + +table.markdownTable tr:last-child td, +table.markdownTable tr:last-child th, +table.fieldtable tr:last-child td, +table.fieldtable tr:last-child th, +table.doxtable tr:last-child td, +table.doxtable tr:last-child th { + border-bottom: none; +} + +table.markdownTable tr, table.doxtable tr { + border-bottom: 1px solid var(--separator-color); +} + +table.markdownTable tr:last-child, table.doxtable tr:last-child { + border-bottom: none; +} + +.full_width_table table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) { + display: block; +} + +.full_width_table table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody { + display: table; + width: 100%; +} + +table.fieldtable th { + font-size: var(--page-font-size); + font-weight: 600; + background-image: none; + background-color: var(--tablehead-background); + color: var(--tablehead-foreground); +} + +table.fieldtable td.fieldtype, .fieldtable td.fieldname, .fieldtable td.fielddoc, .fieldtable th { + border-bottom: 1px solid var(--separator-color); + border-right: 1px solid var(--separator-color); +} + +table.fieldtable tr:last-child td:first-child { + border-bottom-left-radius: var(--border-radius-small); +} + +table.fieldtable tr:last-child td:last-child { + border-bottom-right-radius: var(--border-radius-small); +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: var(--primary-light-color); + box-shadow: none; +} + +table.memberdecls { + display: block; + -webkit-tap-highlight-color: transparent; +} + +table.memberdecls tr[class^='memitem'] { + font-family: var(--font-family-monospace); + font-size: var(--code-font-size); +} + +table.memberdecls tr[class^='memitem'] .memTemplParams { + font-family: var(--font-family-monospace); + font-size: var(--code-font-size); + color: var(--primary-dark-color); + white-space: normal; +} + +table.memberdecls .memItemLeft, +table.memberdecls .memItemRight, +table.memberdecls .memTemplItemLeft, +table.memberdecls .memTemplItemRight, +table.memberdecls .memTemplParams { + transition: none; + padding-top: var(--spacing-small); + padding-bottom: var(--spacing-small); + border-top: 1px solid var(--separator-color); + border-bottom: 1px solid var(--separator-color); + background-color: var(--fragment-background); +} + +table.memberdecls .memTemplItemLeft, +table.memberdecls .memTemplItemRight { + padding-top: 2px; +} + +table.memberdecls .memTemplParams { + border-bottom: 0; + border-left: 1px solid var(--separator-color); + border-right: 1px solid var(--separator-color); + border-radius: var(--border-radius-small) var(--border-radius-small) 0 0; + padding-bottom: var(--spacing-small); +} + +table.memberdecls .memTemplItemLeft { + border-radius: 0 0 0 var(--border-radius-small); + border-left: 1px solid var(--separator-color); + border-top: 0; +} + +table.memberdecls .memTemplItemRight { + border-radius: 0 0 var(--border-radius-small) 0; + border-right: 1px solid var(--separator-color); + padding-left: 0; + border-top: 0; +} + +table.memberdecls .memItemLeft { + border-radius: var(--border-radius-small) 0 0 var(--border-radius-small); + border-left: 1px solid var(--separator-color); + padding-left: var(--spacing-medium); + padding-right: 0; +} + +table.memberdecls .memItemRight { + border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0; + border-right: 1px solid var(--separator-color); + padding-right: var(--spacing-medium); + padding-left: 0; + +} + +table.memberdecls .mdescLeft, table.memberdecls .mdescRight { + background: none; + color: var(--page-foreground-color); + padding: var(--spacing-small) 0; +} + +table.memberdecls .memItemLeft, +table.memberdecls .memTemplItemLeft { + padding-right: var(--spacing-medium); +} + +table.memberdecls .memSeparator { + background: var(--page-background-color); + height: var(--spacing-large); + border: 0; + transition: none; +} + +table.memberdecls .groupheader { + margin-bottom: var(--spacing-large); +} + +table.memberdecls .inherit_header td { + padding: 0 0 var(--spacing-medium) 0; + text-indent: -12px; + color: var(--page-secondary-foreground-color); +} + +table.memberdecls img[src="closed.png"], +table.memberdecls img[src="open.png"], +div.dynheader img[src="open.png"], +div.dynheader img[src="closed.png"] { + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 5px solid var(--primary-color); + margin-top: 8px; + display: block; + float: left; + margin-left: -10px; + transition: transform var(--animation-duration) ease-out; +} + +table.memberdecls img { + margin-right: 10px; +} + +table.memberdecls img[src="closed.png"], +div.dynheader img[src="closed.png"] { + transform: rotate(-90deg); + +} + +.compoundTemplParams { + font-family: var(--font-family-monospace); + color: var(--primary-dark-color); + font-size: var(--code-font-size); +} + +@media screen and (max-width: 767px) { + + table.memberdecls .memItemLeft, + table.memberdecls .memItemRight, + table.memberdecls .mdescLeft, + table.memberdecls .mdescRight, + table.memberdecls .memTemplItemLeft, + table.memberdecls .memTemplItemRight, + table.memberdecls .memTemplParams { + display: block; + text-align: left; + padding-left: var(--spacing-large); + margin: 0 calc(0px - var(--spacing-large)) 0 calc(0px - var(--spacing-large)); + border-right: none; + border-left: none; + border-radius: 0; + white-space: normal; + } + + table.memberdecls .memItemLeft, + table.memberdecls .mdescLeft, + table.memberdecls .memTemplItemLeft { + border-bottom: 0; + padding-bottom: 0; + } + + table.memberdecls .memTemplItemLeft { + padding-top: 0; + } + + table.memberdecls .mdescLeft { + margin-bottom: calc(0px - var(--page-font-size)); + } + + table.memberdecls .memItemRight, + table.memberdecls .mdescRight, + table.memberdecls .memTemplItemRight { + border-top: 0; + padding-top: 0; + padding-right: var(--spacing-large); + overflow-x: auto; + } + + table.memberdecls tr[class^='memitem']:not(.inherit) { + display: block; + width: calc(100vw - 2 * var(--spacing-large)); + } + + table.memberdecls .mdescRight { + color: var(--page-foreground-color); + } + + table.memberdecls tr.inherit { + visibility: hidden; + } + + table.memberdecls tr[style="display: table-row;"] { + display: block !important; + visibility: visible; + width: calc(100vw - 2 * var(--spacing-large)); + animation: fade .5s; + } + + @keyframes fade { + 0% { + opacity: 0; + max-height: 0; + } + + 100% { + opacity: 1; + max-height: 200px; + } + } +} + + +/* + Horizontal Rule + */ + +hr { + margin-top: var(--spacing-large); + margin-bottom: var(--spacing-large); + height: 1px; + background-color: var(--separator-color); + border: 0; +} + +.contents hr { + box-shadow: 100px 0 0 var(--separator-color), + -100px 0 0 var(--separator-color), + 500px 0 0 var(--separator-color), + -500px 0 0 var(--separator-color), + 1500px 0 0 var(--separator-color), + -1500px 0 0 var(--separator-color), + 2000px 0 0 var(--separator-color), + -2000px 0 0 var(--separator-color); +} + +.contents img, .contents .center, .contents center, .contents div.image object { + max-width: 100%; + overflow: auto; +} + +@media screen and (max-width: 767px) { + .contents .dyncontent > .center, .contents > center { + margin-left: calc(0px - var(--spacing-large)); + margin-right: calc(0px - var(--spacing-large)); + max-width: calc(100% + 2 * var(--spacing-large)); + } +} + +/* + Directories + */ +div.directory { + border-top: 1px solid var(--separator-color); + border-bottom: 1px solid var(--separator-color); + width: auto; +} + +table.directory { + font-family: var(--font-family); + font-size: var(--page-font-size); + font-weight: normal; + width: 100%; +} + +table.directory td.entry, table.directory td.desc { + padding: calc(var(--spacing-small) / 2) var(--spacing-small); + line-height: var(--table-line-height); +} + +table.directory tr.even td:last-child { + border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0; +} + +table.directory tr.even td:first-child { + border-radius: var(--border-radius-small) 0 0 var(--border-radius-small); +} + +table.directory tr.even:last-child td:last-child { + border-radius: 0 var(--border-radius-small) 0 0; +} + +table.directory tr.even:last-child td:first-child { + border-radius: var(--border-radius-small) 0 0 0; +} + +table.directory td.desc { + min-width: 250px; +} + +table.directory tr.even { + background-color: var(--odd-color); +} + +table.directory tr.odd { + background-color: transparent; +} + +.icona { + width: auto; + height: auto; + margin: 0 var(--spacing-small); +} + +.icon { + background: var(--primary-color); + border-radius: var(--border-radius-small); + font-size: var(--page-font-size); + padding: calc(var(--page-font-size) / 5); + line-height: var(--page-font-size); + transform: scale(0.8); + height: auto; + width: var(--page-font-size); + user-select: none; +} + +.iconfopen, .icondoc, .iconfclosed { + background-position: center; + margin-bottom: 0; + height: var(--table-line-height); +} + +.icondoc { + filter: saturate(0.2); +} + +@media screen and (max-width: 767px) { + div.directory { + margin-left: calc(0px - var(--spacing-large)); + margin-right: calc(0px - var(--spacing-large)); + } +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) .iconfopen, html:not(.light-mode) .iconfclosed { + filter: hue-rotate(180deg) invert(); + } +} + +html.dark-mode .iconfopen, html.dark-mode .iconfclosed { + filter: hue-rotate(180deg) invert(); +} + +/* + Class list + */ + +.classindex dl.odd { + background: var(--odd-color); + border-radius: var(--border-radius-small); +} + +.classindex dl.even { + background-color: transparent; +} + +/* + Class Index Doxygen 1.8 +*/ + +table.classindex { + margin-left: 0; + margin-right: 0; + width: 100%; +} + +table.classindex table div.ah { + background-image: none; + background-color: initial; + border-color: var(--separator-color); + color: var(--page-foreground-color); + box-shadow: var(--box-shadow); + border-radius: var(--border-radius-large); + padding: var(--spacing-small); +} + +div.qindex { + background-color: var(--odd-color); + border-radius: var(--border-radius-small); + border: 1px solid var(--separator-color); + padding: var(--spacing-small) 0; +} + +/* + Footer and nav-path + */ + +#nav-path { + width: 100%; +} + +#nav-path ul { + background-image: none; + background: var(--page-background-color); + border: none; + border-top: 1px solid var(--separator-color); + border-bottom: 1px solid var(--separator-color); + border-bottom: 0; + box-shadow: 0 0.75px 0 var(--separator-color); + font-size: var(--navigation-font-size); +} + +img.footer { + width: 60px; +} + +.navpath li.footer { + color: var(--page-secondary-foreground-color); +} + +address.footer { + color: var(--page-secondary-foreground-color); + margin-bottom: var(--spacing-large); +} + +#nav-path li.navelem { + background-image: none; + display: flex; + align-items: center; +} + +.navpath li.navelem a { + text-shadow: none; + display: inline-block; + color: var(--primary-color) !important; +} + +.navpath li.navelem b { + color: var(--primary-dark-color); + font-weight: 500; +} + +li.navelem { + padding: 0; + margin-left: -8px; +} + +li.navelem:first-child { + margin-left: var(--spacing-large); +} + +li.navelem:first-child:before { + display: none; +} + +#nav-path li.navelem:after { + content: ''; + border: 5px solid var(--page-background-color); + border-bottom-color: transparent; + border-right-color: transparent; + border-top-color: transparent; + transform: translateY(-1px) scaleY(4.2); + z-index: 10; + margin-left: 6px; +} + +#nav-path li.navelem:before { + content: ''; + border: 5px solid var(--separator-color); + border-bottom-color: transparent; + border-right-color: transparent; + border-top-color: transparent; + transform: translateY(-1px) scaleY(3.2); + margin-right: var(--spacing-small); +} + +.navpath li.navelem a:hover { + color: var(--primary-color); +} + +/* + Scrollbars for Webkit +*/ + +#nav-tree::-webkit-scrollbar, +div.fragment::-webkit-scrollbar, +pre.fragment::-webkit-scrollbar, +div.memproto::-webkit-scrollbar, +.contents center::-webkit-scrollbar, +.contents .center::-webkit-scrollbar, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar, +div.contents .toc::-webkit-scrollbar, +.contents .dotgraph::-webkit-scrollbar, +.contents .tabs-overview-container::-webkit-scrollbar { + background: transparent; + width: calc(var(--webkit-scrollbar-size) + var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding)); + height: calc(var(--webkit-scrollbar-size) + var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding)); +} + +#nav-tree::-webkit-scrollbar-thumb, +div.fragment::-webkit-scrollbar-thumb, +pre.fragment::-webkit-scrollbar-thumb, +div.memproto::-webkit-scrollbar-thumb, +.contents center::-webkit-scrollbar-thumb, +.contents .center::-webkit-scrollbar-thumb, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar-thumb, +div.contents .toc::-webkit-scrollbar-thumb, +.contents .dotgraph::-webkit-scrollbar-thumb, +.contents .tabs-overview-container::-webkit-scrollbar-thumb { + background-color: transparent; + border: var(--webkit-scrollbar-padding) solid transparent; + border-radius: calc(var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding)); + background-clip: padding-box; +} + +#nav-tree:hover::-webkit-scrollbar-thumb, +div.fragment:hover::-webkit-scrollbar-thumb, +pre.fragment:hover::-webkit-scrollbar-thumb, +div.memproto:hover::-webkit-scrollbar-thumb, +.contents center:hover::-webkit-scrollbar-thumb, +.contents .center:hover::-webkit-scrollbar-thumb, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody:hover::-webkit-scrollbar-thumb, +div.contents .toc:hover::-webkit-scrollbar-thumb, +.contents .dotgraph:hover::-webkit-scrollbar-thumb, +.contents .tabs-overview-container:hover::-webkit-scrollbar-thumb { + background-color: var(--webkit-scrollbar-color); +} + +#nav-tree::-webkit-scrollbar-track, +div.fragment::-webkit-scrollbar-track, +pre.fragment::-webkit-scrollbar-track, +div.memproto::-webkit-scrollbar-track, +.contents center::-webkit-scrollbar-track, +.contents .center::-webkit-scrollbar-track, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar-track, +div.contents .toc::-webkit-scrollbar-track, +.contents .dotgraph::-webkit-scrollbar-track, +.contents .tabs-overview-container::-webkit-scrollbar-track { + background: transparent; +} + +#nav-tree::-webkit-scrollbar-corner { + background-color: var(--side-nav-background); +} + +#nav-tree, +div.fragment, +pre.fragment, +div.memproto, +.contents center, +.contents .center, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody, +div.contents .toc { + overflow-x: auto; + overflow-x: overlay; +} + +#nav-tree { + overflow-x: auto; + overflow-y: auto; + overflow-y: overlay; +} + +/* + Scrollbars for Firefox +*/ + +#nav-tree, +div.fragment, +pre.fragment, +div.memproto, +.contents center, +.contents .center, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody, +div.contents .toc, +.contents .dotgraph, +.contents .tabs-overview-container { + scrollbar-width: thin; +} + +/* + Optional Dark mode toggle button +*/ + +doxygen-awesome-dark-mode-toggle { + display: inline-block; + margin: 0 0 0 var(--spacing-small); + padding: 0; + width: var(--searchbar-height); + height: var(--searchbar-height); + background: none; + border: none; + border-radius: var(--searchbar-height); + vertical-align: middle; + text-align: center; + line-height: var(--searchbar-height); + font-size: 22px; + display: flex; + align-items: center; + justify-content: center; + user-select: none; + cursor: pointer; +} + +doxygen-awesome-dark-mode-toggle > svg { + transition: transform var(--animation-duration) ease-in-out; +} + +doxygen-awesome-dark-mode-toggle:active > svg { + transform: scale(.5); +} + +doxygen-awesome-dark-mode-toggle:hover { + background-color: rgba(0,0,0,.03); +} + +html.dark-mode doxygen-awesome-dark-mode-toggle:hover { + background-color: rgba(0,0,0,.18); +} + +/* + Optional fragment copy button +*/ +.doxygen-awesome-fragment-wrapper { + position: relative; +} + +doxygen-awesome-fragment-copy-button { + opacity: 0; + background: var(--fragment-background); + width: 28px; + height: 28px; + position: absolute; + right: calc(var(--spacing-large) - (var(--spacing-large) / 2.5)); + top: calc(var(--spacing-large) - (var(--spacing-large) / 2.5)); + border: 1px solid var(--fragment-foreground); + cursor: pointer; + border-radius: var(--border-radius-small); + display: flex; + justify-content: center; + align-items: center; +} + +.doxygen-awesome-fragment-wrapper:hover doxygen-awesome-fragment-copy-button, doxygen-awesome-fragment-copy-button.success { + opacity: .28; +} + +doxygen-awesome-fragment-copy-button:hover, doxygen-awesome-fragment-copy-button.success { + opacity: 1 !important; +} + +doxygen-awesome-fragment-copy-button:active:not([class~=success]) svg { + transform: scale(.91); +} + +doxygen-awesome-fragment-copy-button svg { + fill: var(--fragment-foreground); + width: 18px; + height: 18px; +} + +doxygen-awesome-fragment-copy-button.success svg { + fill: rgb(14, 168, 14); +} + +doxygen-awesome-fragment-copy-button.success { + border-color: rgb(14, 168, 14); +} + +@media screen and (max-width: 767px) { + .textblock > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + .textblock li > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + .memdoc li > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + .memdoc > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + dl dd > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button { + right: 0; + } +} + +/* + Optional paragraph link button +*/ + +a.anchorlink { + font-size: 90%; + margin-left: var(--spacing-small); + color: var(--page-foreground-color) !important; + text-decoration: none; + opacity: .15; + display: none; + transition: opacity var(--animation-duration) ease-in-out, color var(--animation-duration) ease-in-out; +} + +a.anchorlink svg { + fill: var(--page-foreground-color); +} + +h3 a.anchorlink svg, h4 a.anchorlink svg { + margin-bottom: -3px; + margin-top: -4px; +} + +a.anchorlink:hover { + opacity: .45; +} + +h2:hover a.anchorlink, h1:hover a.anchorlink, h3:hover a.anchorlink, h4:hover a.anchorlink { + display: inline-block; +} + +/* + Optional tab feature +*/ + +.tabbed > ul { + padding-inline-start: 0px; + margin: 0; + padding: var(--spacing-small) 0; +} + +.tabbed > ul > li { + display: none; +} + +.tabbed > ul > li.selected { + display: block; +} + +.tabs-overview-container { + overflow-x: auto; + display: block; + overflow-y: visible; +} + +.tabs-overview { + border-bottom: 1px solid var(--separator-color); + display: flex; + flex-direction: row; +} + +@media screen and (max-width: 767px) { + .tabs-overview-container { + margin: 0 calc(0px - var(--spacing-large)); + } + .tabs-overview { + padding: 0 var(--spacing-large) + } +} + +.tabs-overview button.tab-button { + color: var(--page-foreground-color); + margin: 0; + border: none; + background: transparent; + padding: calc(var(--spacing-large) / 2) 0; + display: inline-block; + font-size: var(--page-font-size); + cursor: pointer; + box-shadow: 0 1px 0 0 var(--separator-color); + position: relative; + + -webkit-tap-highlight-color: transparent; +} + +.tabs-overview button.tab-button .tab-title::before { + display: block; + content: attr(title); + font-weight: 600; + height: 0; + overflow: hidden; + visibility: hidden; +} + +.tabs-overview button.tab-button .tab-title { + float: left; + white-space: nowrap; + font-weight: normal; + padding: calc(var(--spacing-large) / 2) var(--spacing-large); + border-radius: var(--border-radius-medium); + transition: background-color var(--animation-duration) ease-in-out, font-weight var(--animation-duration) ease-in-out; +} + +.tabs-overview button.tab-button:not(:last-child) .tab-title { + box-shadow: 8px 0 0 -7px var(--separator-color); +} + +.tabs-overview button.tab-button:hover .tab-title { + background: var(--separator-color); + box-shadow: none; +} + +.tabs-overview button.tab-button.active .tab-title { + font-weight: 600; +} + +.tabs-overview button.tab-button::after { + content: ''; + display: block; + position: absolute; + left: 0; + bottom: 0; + right: 0; + height: 0; + width: 0%; + margin: 0 auto; + border-radius: var(--border-radius-small) var(--border-radius-small) 0 0; + background-color: var(--primary-color); + transition: width var(--animation-duration) ease-in-out, height var(--animation-duration) ease-in-out; +} + +.tabs-overview button.tab-button.active::after { + width: 100%; + box-sizing: border-box; + height: 3px; +} + + +/* + Navigation Buttons +*/ + +.section_buttons:not(:empty) { + margin-top: calc(var(--spacing-large) * 3); +} + +.section_buttons table.markdownTable { + display: block; + width: 100%; +} + +.section_buttons table.markdownTable tbody { + display: table !important; + width: 100%; + box-shadow: none; + border-spacing: 10px; +} + +.section_buttons table.markdownTable td { + padding: 0; +} + +.section_buttons table.markdownTable th { + display: none; +} + +.section_buttons table.markdownTable tr.markdownTableHead { + border: none; +} + +.section_buttons tr th, .section_buttons tr td { + background: none; + border: none; + padding: var(--spacing-large) 0 var(--spacing-small); +} + +.section_buttons a { + display: inline-block; + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium); + color: var(--page-secondary-foreground-color) !important; + text-decoration: none; + transition: color var(--animation-duration) ease-in-out, background-color var(--animation-duration) ease-in-out; +} + +.section_buttons a:hover { + color: var(--page-foreground-color) !important; + background-color: var(--odd-color); +} + +.section_buttons tr td.markdownTableBodyLeft a { + padding: var(--spacing-medium) var(--spacing-large) var(--spacing-medium) calc(var(--spacing-large) / 2); +} + +.section_buttons tr td.markdownTableBodyRight a { + padding: var(--spacing-medium) calc(var(--spacing-large) / 2) var(--spacing-medium) var(--spacing-large); +} + +.section_buttons tr td.markdownTableBodyLeft a::before, +.section_buttons tr td.markdownTableBodyRight a::after { + color: var(--page-secondary-foreground-color) !important; + display: inline-block; + transition: color .08s ease-in-out, transform .09s ease-in-out; +} + +.section_buttons tr td.markdownTableBodyLeft a::before { + content: '〈'; + padding-right: var(--spacing-large); +} + + +.section_buttons tr td.markdownTableBodyRight a::after { + content: '〉'; + padding-left: var(--spacing-large); +} + + +.section_buttons tr td.markdownTableBodyLeft a:hover::before { + color: var(--page-foreground-color) !important; + transform: translateX(-3px); +} + +.section_buttons tr td.markdownTableBodyRight a:hover::after { + color: var(--page-foreground-color) !important; + transform: translateX(3px); +} + +@media screen and (max-width: 450px) { + .section_buttons a { + width: 100%; + box-sizing: border-box; + } + + .section_buttons tr td:nth-of-type(1).markdownTableBodyLeft a { + border-radius: var(--border-radius-medium) 0 0 var(--border-radius-medium); + border-right: none; + } + + .section_buttons tr td:nth-of-type(2).markdownTableBodyRight a { + border-radius: 0 var(--border-radius-medium) var(--border-radius-medium) 0; + } +} diff --git a/docs/unstable/doxygen.css b/docs/unstable/doxygen.css new file mode 100644 index 0000000..b4fc124 --- /dev/null +++ b/docs/unstable/doxygen.css @@ -0,0 +1,1819 @@ +/* The standard CSS for doxygen 1.10.0*/ + +body { + background-color: white; + color: black; +} + +body, table, div, p, dl { + font-weight: 400; + font-size: 14px; + font-family: Roboto,sans-serif; + line-height: 22px; +} + +/* @group Heading Levels */ + +.title { + font-family: Roboto,sans-serif; + line-height: 28px; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h1.groupheader { + font-size: 150%; +} + +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +th p.starttd, th p.intertd, th p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.navtab { + padding-right: 15px; + text-align: right; + line-height: 110%; +} + +div.navtab table { + border-spacing: 0; +} + +td.navtab { + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL a, td.navtabHL a:visited { + color: white; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +a.navtab { + font-weight: bold; +} + +div.qindex{ + text-align: center; + width: 100%; + line-height: 140%; + font-size: 130%; + color: #A0A0A0; +} + +#main-menu a:focus { + outline: auto; + z-index: 10; + position: relative; +} + +dt.alphachar{ + font-size: 180%; + font-weight: bold; +} + +.alphachar a{ + color: black; +} + +.alphachar a:hover, .alphachar a:visited{ + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count:1 +} + +.classindex dd { + display:inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.even { + background-color: white; +} + +.classindex dl.odd { + background-color: #F8F9FC; +} + +@media(min-width: 1120px) { + .classindex dl { + column-count:2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count:3 + } +} + + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: none; + background: linear-gradient(to bottom, transparent 0,transparent calc(100% - 1px), currentColor 100%); +} + +a:hover > span.arrow { + text-decoration: none; + background : #F9FAFC; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #4665A2; +} + +a.code.hl_class { /* style for links to class names in code snippets */ } +a.code.hl_struct { /* style for links to struct names in code snippets */ } +a.code.hl_union { /* style for links to union names in code snippets */ } +a.code.hl_interface { /* style for links to interface names in code snippets */ } +a.code.hl_protocol { /* style for links to protocol names in code snippets */ } +a.code.hl_category { /* style for links to category names in code snippets */ } +a.code.hl_exception { /* style for links to exception names in code snippets */ } +a.code.hl_service { /* style for links to service names in code snippets */ } +a.code.hl_singleton { /* style for links to singleton names in code snippets */ } +a.code.hl_concept { /* style for links to concept names in code snippets */ } +a.code.hl_namespace { /* style for links to namespace names in code snippets */ } +a.code.hl_package { /* style for links to package names in code snippets */ } +a.code.hl_define { /* style for links to macro names in code snippets */ } +a.code.hl_function { /* style for links to function names in code snippets */ } +a.code.hl_variable { /* style for links to variable names in code snippets */ } +a.code.hl_typedef { /* style for links to typedef names in code snippets */ } +a.code.hl_enumvalue { /* style for links to enum value names in code snippets */ } +a.code.hl_enumeration { /* style for links to enumeration names in code snippets */ } +a.code.hl_signal { /* style for links to Qt signal names in code snippets */ } +a.code.hl_slot { /* style for links to Qt slot names in code snippets */ } +a.code.hl_friend { /* style for links to friend names in code snippets */ } +a.code.hl_dcop { /* style for links to KDE3 DCOP names in code snippets */ } +a.code.hl_property { /* style for links to property names in code snippets */ } +a.code.hl_event { /* style for links to event names in code snippets */ } +a.code.hl_sequence { /* style for links to sequence names in code snippets */ } +a.code.hl_dictionary { /* style for links to dictionary names in code snippets */ } + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul { + overflow: visible; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; + list-style-type: none; +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; + overflow-y: hidden; + position: relative; + min-height: 12px; + margin: 10px 0px; + padding: 10px 10px; + border: 1px solid #C4CFE5; + border-radius: 4px; + background-color: #FBFCFD; + color: black; +} + +pre.fragment { + word-wrap: break-word; + font-size: 10pt; + line-height: 125%; + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +} + +.clipboard { + width: 24px; + height: 24px; + right: 5px; + top: 5px; + opacity: 0; + position: absolute; + display: inline; + overflow: auto; + fill: black; + justify-content: center; + align-items: center; + cursor: pointer; +} + +.clipboard.success { + border: 1px solid black; + border-radius: 4px; +} + +.fragment:hover .clipboard, .clipboard.success { + opacity: .28; +} + +.clipboard:hover, .clipboard.success { + opacity: 1 !important; +} + +.clipboard:active:not([class~=success]) svg { + transform: scale(.91); +} + +.clipboard.success svg { + fill: #2EC82E; +} + +.clipboard.success { + border-color: #2EC82E; +} + +div.line { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.2; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + +span.fold { + margin-left: 5px; + margin-right: 1px; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; + display: inline-block; + width: 12px; + height: 12px; + background-repeat:no-repeat; + background-position:center; +} + +span.lineno { + padding-right: 4px; + margin-right: 9px; + text-align: right; + border-right: 2px solid #00FF00; + color: black; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a, span.lineno a:visited { + color: #4665A2; + background-color: #D8D8D8; +} + +span.lineno a:hover { + color: #4665A2; + background-color: #C8C8C8; +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +p.formulaDsp { + text-align: center; +} + +img.dark-mode-visible { + display: none; +} +img.light-mode-visible { + display: none; +} + +img.formulaInl, img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; + width: 104px; +} + +.compoundTemplParams { + color: #4665A2; + font-size: 80%; + line-height: 120%; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000; +} + +span.keywordtype { + color: #604020; +} + +span.keywordflow { + color: #E08000; +} + +span.comment { + color: #800000; +} + +span.preprocessor { + color: #806020; +} + +span.stringliteral { + color: #002080; +} + +span.charliteral { + color: #008080; +} + +span.xmlcdata { + color: black; +} + +span.vhdldigit { + color: #FF00FF; +} + +span.vhdlchar { + color: #000000; +} + +span.vhdlkeyword { + color: #700070; +} + +span.vhdllogic { + color: #FF0000; +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #2D4068; +} + +th.dirtab { + background-color: #374F7F; + color: #FFFFFF; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight, .memTemplItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: url('nav_f.png'); + background-repeat: repeat-x; + background-color: #E2E8F2; + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-color: #DFE5F1; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; +} + +.overload { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: white; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; + padding: 0px; + padding-bottom: 1px; +} + +.paramname { + white-space: nowrap; + padding: 0px; + padding-bottom: 1px; + margin-left: 2px; +} + +.paramname em { + color: #602020; + font-style: normal; + margin-right: 1px; +} + +.paramname .paramdefval { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #9CAFD4; + border-bottom: 1px solid #9CAFD4; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.odd { + padding-left: 6px; + background-color: #F8F9FC; +} + +.directory tr.even { + padding-left: 6px; + background-color: white; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +.arrow { + color: #9CAFD4; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: Arial,Helvetica; + line-height: normal; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: #728DC1; + color: white; + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderopen.svg'); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderclosed.svg'); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('doc.svg'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + border-radius: 4px; + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image: url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image: url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#283A5D; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color: #364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color: white; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color: #2A3D61; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image: url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; +} + +dl { + padding: 0 0 0 0; +} + +/* + +dl.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +*/ + +dl.bug dt a, dl.deprecated dt a, dl.todo dt a, dl.test a { + font-weight: bold !important; +} + +dl.warning, dl.attention, dl.note, dl.deprecated, dl.bug, +dl.invariant, dl.pre, dl.post, dl.todo, dl.test, dl.remark { + padding: 10px; + margin: 10px 0px; + overflow: hidden; + margin-left: 0; + border-radius: 4px; +} + +dl.section dd { + margin-bottom: 2px; +} + +dl.warning, dl.attention { + background: #f8d1cc; + border-left: 8px solid #b61825; + color: #75070f; +} + +dl.warning dt, dl.attention dt { + color: #b61825; +} + +dl.note, dl.remark { + background: #faf3d8; + border-left: 8px solid #f3a600; + color: #5f4204; +} + +dl.note dt, dl.remark dt { + color: #f3a600; +} + +dl.todo { + background: #e4f3ff; + border-left: 8px solid #1879C4; + color: #274a5c; +} + +dl.todo dt { + color: #1879C4; +} + +dl.test { + background: #e8e8ff; + border-left: 8px solid #3939C4; + color: #1a1a5c; +} + +dl.test dt { + color: #3939C4; +} + +dl.bug dt a { + color: #5b2bdd !important; +} + +dl.bug { + background: #e4dafd; + border-left: 8px solid #5b2bdd; + color: #2a0d72; +} + +dl.bug dt a { + color: #5b2bdd !important; +} + +dl.deprecated { + background: #ecf0f3; + border-left: 8px solid #5b6269; + color: #43454a; +} + +dl.deprecated dt a { + color: #5b6269 !important; +} + +dl.section dd, dl.bug dd, dl.deprecated dd, dl.todo dd, dl.test dd { + margin-inline-start: 0px; +} + +dl.invariant, dl.pre, dl.post { + background: #d8f1e3; + border-left: 8px solid #44b86f; + color: #265532; +} + +dl.invariant dt, dl.pre dt, dl.post dt { + color: #44b86f; +} + + +#projectrow +{ + height: 56px; +} + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; + padding-left: 0.5em; +} + +#projectname +{ + font-size: 200%; + font-family: Tahoma,Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font-size: 90%; + font-family: Tahoma,Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font-size: 50%; + font-family: 50% Tahoma,Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; + background-color: white; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; + text-align:right; + width:52px; +} + +dl.citelist dd { + margin:2px 0 2px 72px; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +div.toc li { + background: url("data:image/svg+xml;utf8,&%238595;") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,'DejaVu Sans',Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 Verdana,'DejaVu Sans',Geneva,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 15px; +} + +div.toc li.level4 { + margin-left: 15px; +} + +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + +span.obfuscator { + display: none; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + /*white-space: nowrap;*/ + color: black; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip a { + color: #4665A2; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font-size: 12px; + font-family: Roboto,sans-serif; + line-height: 16px; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: white; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before, #powerTip.ne:before, #powerTip.nw:before { + border-top-color: gray; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: white; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: gray; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: gray; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: gray; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: gray; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: gray; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +tt, code, kbd, samp +{ + display: inline-block; +} +/* @end */ + +u { + text-decoration: underline; +} + +details>summary { + list-style-type: none; +} + +details > summary::-webkit-details-marker { + display: none; +} + +details>summary::before { + content: "\25ba"; + padding-right:4px; + font-size: 80%; +} + +details[open]>summary::before { + content: "\25bc"; + padding-right:4px; + font-size: 80%; +} + diff --git a/docs/unstable/doxygen.svg b/docs/unstable/doxygen.svg new file mode 100644 index 0000000..79a7635 --- /dev/null +++ b/docs/unstable/doxygen.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/unstable/doxygen_crawl.html b/docs/unstable/doxygen_crawl.html new file mode 100644 index 0000000..f406d9f --- /dev/null +++ b/docs/unstable/doxygen_crawl.html @@ -0,0 +1,87 @@ + + + +Validator / crawler helper + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/unstable/dynsections.js b/docs/unstable/dynsections.js new file mode 100644 index 0000000..bdb71d4 --- /dev/null +++ b/docs/unstable/dynsections.js @@ -0,0 +1,201 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +let dynsection = { + + // helper function + updateStripes : function() { + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); + $('table.directory tr'). + removeClass('odd').filter(':visible:odd').addClass('odd'); + }, + + toggleVisibility : function(linkObj) { + const base = $(linkObj).attr('id'); + const summary = $('#'+base+'-summary'); + const content = $('#'+base+'-content'); + const trigger = $('#'+base+'-trigger'); + const src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; + }, + + toggleLevel : function(level) { + $('table.directory tr').each(function() { + const l = this.id.split('_').length-1; + const i = $('#img'+this.id.substring(3)); + const a = $('#arr'+this.id.substring(3)); + if (l'); + // add vertical lines to other rows + $('span[class=lineno]').not(':eq(0)').append(''); + // add toggle controls to lines with fold divs + $('div[class=foldopen]').each(function() { + // extract specific id to use + const id = $(this).attr('id').replace('foldopen',''); + // extract start and end foldable fragment attributes + const start = $(this).attr('data-start'); + const end = $(this).attr('data-end'); + // replace normal fold span with controls for the first line of a foldable fragment + $(this).find('span[class=fold]:first').replaceWith(''); + // append div for folded (closed) representation + $(this).after(''); + // extract the first line from the "open" section to represent closed content + const line = $(this).children().first().clone(); + // remove any glow that might still be active on the original line + $(line).removeClass('glow'); + if (start) { + // if line already ends with a start marker (e.g. trailing {), remove it + $(line).html($(line).html().replace(new RegExp('\\s*'+start+'\\s*$','g'),'')); + } + // replace minus with plus symbol + $(line).find('span[class=fold]').css('background-image',codefold.plusImg[relPath]); + // append ellipsis + $(line).append(' '+start+''+end); + // insert constructed line into closed div + $('#foldclosed'+id).html(line); + }); + }, +}; +/* @license-end */ +$(function() { + $('.code,.codeRef').each(function() { + $(this).data('powertip',$('#a'+$(this).attr('href').replace(/.*\//,'').replace(/[^a-z_A-Z0-9]/g,'_')).html()); + $.fn.powerTip.smartPlacementLists.s = [ 's', 'n', 'ne', 'se' ]; + $(this).powerTip({ placement: 's', smartPlacement: true, mouseOnToPopup: true }); + }); +}); diff --git a/docs/unstable/enumerate_8hpp.html b/docs/unstable/enumerate_8hpp.html new file mode 100644 index 0000000..71dc1d6 --- /dev/null +++ b/docs/unstable/enumerate_8hpp.html @@ -0,0 +1,150 @@ + + + + + + + +TRIQS/itertools: itertools/enumerate.hpp File Reference + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
TRIQS/itertools 1.2.0 +
+
C++ range library
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
enumerate.hpp File Reference
+
+
+
#include "./iterator_facade.hpp"
+#include "./sentinel.hpp"
+#include <iterator>
+#include <tuple>
+#include <utility>
+

Detailed Description

+

Provides a range adapting function for enumerating a given range/view.

+ +

Definition in file enumerate.hpp.

+
+

Go to the source code of this file.

+ + + + + + + + +

+Classes

struct  enum_iter< Iter >
 Iterator for a detail::enumerated range. More...
 
struct  enumerated< R >
 Represents an enumerated range. More...
 
+ + + + + +

+Functions

template<typename R >
detail::enumerated< R > enumerate (R &&rg)
 Lazy-enumerate a given range (similar to Python's enumerate).
 
+
+
+ + + + diff --git a/docs/unstable/enumerate_8hpp.js b/docs/unstable/enumerate_8hpp.js new file mode 100644 index 0000000..73e58bd --- /dev/null +++ b/docs/unstable/enumerate_8hpp.js @@ -0,0 +1,4 @@ +var enumerate_8hpp = +[ + [ "enumerate", "enumerate_8hpp.html#ga2fb6627d7acfb88befe857406a77fa41", null ] +]; \ No newline at end of file diff --git a/docs/unstable/enumerate_8hpp_source.html b/docs/unstable/enumerate_8hpp_source.html new file mode 100644 index 0000000..2f5afef --- /dev/null +++ b/docs/unstable/enumerate_8hpp_source.html @@ -0,0 +1,320 @@ + + + + + + + +TRIQS/itertools: itertools/enumerate.hpp Source File + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
TRIQS/itertools 1.2.0 +
+
C++ range library
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
enumerate.hpp
+
+
+Go to the documentation of this file.
1// Copyright (c) 2019-2022 Simons Foundation
+
2//
+
3// Licensed under the Apache License, Version 2.0 (the "License");
+
4// you may not use this file except in compliance with the License.
+
5// You may obtain a copy of the License at
+
6//
+
7// http://www.apache.org/licenses/LICENSE-2.0.txt
+
8//
+
9// Unless required by applicable law or agreed to in writing, software
+
10// distributed under the License is distributed on an "AS IS" BASIS,
+
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
12// See the License for the specific language governing permissions and
+
13// limitations under the License.
+
14//
+
15// Authors: Olivier Parcollet, Nils Wentzell, chuffa
+
16
+
17/**
+
18 * @file
+
19 * @brief Provides a range adapting function for enumerating a given range/view.
+
20 */
+
21
+
22#ifndef _ITERTOOLS_ENUMERATE_HPP
+
23#define _ITERTOOLS_ENUMERATE_HPP
+
24
+
25#include "./iterator_facade.hpp"
+
26#include "./sentinel.hpp"
+
27
+
28#include <iterator>
+
29#include <tuple>
+
30#include <utility>
+
31
+
32namespace itertools {
+
33
+
34 namespace detail {
+
35
+
36 /**
+
37 * @ingroup range_iterators
+
38 * @brief Iterator for a detail::enumerated range.
+
39 *
+
40 * @details It stores an iterator of the original range and an index. Incrementing advances the iterator
+
41 * and the index by 1. Dereferencing returns a std::pair consisting of the current index and the current
+
42 * dereferenced value of the original iterator.
+
43 *
+
44 * See itertools::enumerate(R &&) for more details.
+
45 *
+
46 * @tparam Iter Iterator type.
+
47 */
+
48 template <typename Iter> struct enum_iter : iterator_facade<enum_iter<Iter>, std::pair<long, typename std::iterator_traits<Iter>::value_type>> {
+
49 /// Iterator of the original range.
+
50 Iter it;
+
51
+
52 /// Index for enumerating.
+
53 long i = 0;
+
54
+
55 /// Default constructor sets the index to zero and default constructs the original iterator.
+
56 enum_iter() = default;
+
57
+
58 /**
+
59 * @brief Construct an enumerated iterator from a given iterator and set the index to zero.
+
60 * @param it Iterator of the original range.
+
61 */
+
62 enum_iter(Iter it) : it(std::move(it)) {}
+
63
+
64 /// Increment the iterator by incrementing the original iterator and the index.
+
65 void increment() {
+
66 ++it;
+
67 ++i;
+
68 }
+
69
+
70 /**
+
71 * @brief Equal-to operator for two detail::enum_iter objects.
+
72 *
+
73 * @param other detail::enum_iter to compare with.
+
74 * @return True, if the original iterators are equal.
+
75 */
+
76 [[nodiscard]] bool operator==(enum_iter const &other) const { return it == other.it; }
+
77
+
78 /**
+
79 * @brief Equal-to operator for a detail::enum_iter and an itertools::sentinel_t.
+
80 *
+
81 * @tparam SentinelIter Iterator type of the sentinel.
+
82 * @param s itertools::sentinel_t to compare with.
+
83 * @return True, if the original iterator is equal to the iterator stored in the sentinel.
+
84 */
+
85 template <typename SentinelIter> [[nodiscard]] bool operator==(sentinel_t<SentinelIter> const &s) const { return it == s.it; }
+
86
+
87 /**
+
88 * @brief Dereference the iterator.
+
89 * @return Tuple consisting of the current index and the current dereferenced value of the original iterator.
+
90 */
+
91 [[nodiscard]] decltype(auto) dereference() const { return std::tuple<long, decltype(*it)>{i, *it}; }
+
92 };
+
93
+
94 /**
+
95 * @ingroup adapted_ranges
+
96 * @brief Represents an enumerated range.
+
97 *
+
98 * @details See itertools::enumerate(R &&) for more details.
+
99 *
+
100 * @tparam R Range type.
+
101 */
+
102 template <typename R> struct enumerated {
+
103 /// Original range.
+
104 R rg;
+
105
+
106 /// Iterator type of the enumerated range.
+
107 using iterator = enum_iter<decltype(std::begin(rg))>;
+
108
+
109 /// Const iterator type of the enumerated range.
+
110 using const_iterator = enum_iter<decltype(std::cbegin(rg))>;
+
111
+
112 /// Default equal-to operator.
+
113 [[nodiscard]] bool operator==(enumerated const &) const = default;
+
114
+
115 /**
+
116 * @brief Beginning of the enumerated range.
+
117 * @return detail::enum_iter constructed from the beginning of the original range with the index set to zero.
+
118 */
+
119 [[nodiscard]] iterator begin() noexcept { return std::begin(rg); }
+
120
+
121 /// Const version of begin().
+
122 [[nodiscard]] const_iterator cbegin() const noexcept { return std::cbegin(rg); }
+
123
+
124 /// Const overload of begin().
+
125 [[nodiscard]] const_iterator begin() const noexcept { return cbegin(); }
+
126
+
127 /**
+
128 * @brief End of the enumerated range.
+
129 * @return itertools::sentinel_t containing the end iterator of the original range.
+
130 */
+
131 [[nodiscard]] auto end() noexcept { return make_sentinel(std::end(rg)); }
+
132
+
133 /// Const version of end().
+
134 [[nodiscard]] auto cend() const noexcept { return make_sentinel(std::cend(rg)); }
+
135
+
136 /// Const overload of end().
+
137 [[nodiscard]] auto end() const noexcept { return cend(); }
+
138 };
+
139
+
140 } // namespace detail
+
141
+
142 /**
+
143 * @ingroup range_adapting_functions
+
144 * @brief Lazy-enumerate a given range (similar to Python's enumerate).
+
145 *
+
146 * @details Each element in the original range is assigned an index, starting from zero. This function
+
147 * returns an iterable lazy object (a detail::enumerated range), which iterates over tuples consisting of the
+
148 * index and the value of the dereferenced iterator of the original range:
+
149 *
+
150 * @code{.cpp}
+
151 * std::vector<char> vec { 'a', 'b', 'c' };
+
152 *
+
153 * for (auto [idx, val] : enumerate(vec)) {
+
154 * std::cout << "(" << idx << ", " << val << ")\n";
+
155 * }
+
156 * @endcode
+
157 *
+
158 * Output:
+
159 *
+
160 * ```
+
161 * (0, a)
+
162 * (1, b)
+
163 * (2, c)
+
164 * ```
+
165 *
+
166 * See also <a href="https://en.cppreference.com/w/cpp/ranges/enumerate_view">std::ranges::views::enumerate</a>.
+
167 *
+
168 * @tparam R Range type.
+
169 * @param rg Range to enumerate.
+
170 * @return A detail::enumerated range.
+
171 */
+
172 template <typename R> [[nodiscard]] detail::enumerated<R> enumerate(R &&rg) { return {std::forward<R>(rg)}; }
+
173
+
174} // namespace itertools
+
175
+
176#endif // _ITERTOOLS_ENUMERATE_HPP
+
detail::enumerated< R > enumerate(R &&rg)
Lazy-enumerate a given range (similar to Python's enumerate).
+
Iterator for a detail::enumerated range.
Definition enumerate.hpp:48
+
bool operator==(enum_iter const &other) const
Equal-to operator for two detail::enum_iter objects.
Definition enumerate.hpp:76
+
long i
Index for enumerating.
Definition enumerate.hpp:53
+
enum_iter(Iter it)
Construct an enumerated iterator from a given iterator and set the index to zero.
Definition enumerate.hpp:62
+
bool operator==(sentinel_t< SentinelIter > const &s) const
Equal-to operator for a detail::enum_iter and an itertools::sentinel_t.
Definition enumerate.hpp:85
+
decltype(auto) dereference() const
Dereference the iterator.
Definition enumerate.hpp:91
+
Iter it
Iterator of the original range.
Definition enumerate.hpp:50
+
void increment()
Increment the iterator by incrementing the original iterator and the index.
Definition enumerate.hpp:65
+
enum_iter()=default
Default constructor sets the index to zero and default constructs the original iterator.
+
Represents an enumerated range.
+
bool operator==(enumerated const &) const =default
Default equal-to operator.
+
auto end() const noexcept
Const overload of end().
+ +
const_iterator begin() const noexcept
Const overload of begin().
+
auto cend() const noexcept
Const version of end().
+
iterator begin() noexcept
Beginning of the enumerated range.
+
auto end() noexcept
End of the enumerated range.
+
const_iterator cbegin() const noexcept
Const version of begin().
+
Generic sentinel type that can be used to mark the end of a range.
Definition sentinel.hpp:38
+
+
+ + + + diff --git a/docs/unstable/ex1.html b/docs/unstable/ex1.html new file mode 100644 index 0000000..10e8ae1 --- /dev/null +++ b/docs/unstable/ex1.html @@ -0,0 +1,184 @@ + + + + + + + +TRIQS/itertools: Example 1: Comparison with std::ranges + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
TRIQS/itertools 1.2.0 +
+
C++ range library
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Example 1: Comparison with std::ranges
+
+
+

In this example, we compare itertools's adapted ranges with their counterparts from std::ranges.

+
#include "./print.hpp"
+
+ +
#include <array>
+
#include <ranges>
+
#include <vector>
+
+
int main() {
+
// we use the following vector and array as our base ranges for the examples
+
std::vector<int> vec {1, 2, 3, 4, 5, 6};
+
std::array<char, 2> arr {'a', 'b'};
+
+
// compare itertools::enumerate with std::views::enumerate (only available in c++23 with gcc>=13)
+
print_tuple_range(itertools::enumerate(arr));
+
print_tuple_range(std::views::enumerate(arr));
+
+
// compare itertools::transform with std::views::transform
+
auto square = [](int i) { return i * i; };
+
print_simple_range(itertools::transform(vec, square));
+
print_simple_range(std::views::transform(vec, square));
+
+
// compare itertools::zip with std::views::zip
+
print_tuple_range(itertools::zip(vec, arr));
+
print_tuple_range(std::views::zip(vec, arr));
+
+
// compare itertools::product with std::views::cartesian_product (only available in c++23 with gcc>=13)
+
print_tuple_range(itertools::product(vec, arr));
+
print_tuple_range(std::views::cartesian_product(vec, arr));
+
+
// compare itertools::stride with std::views::stride (only available in c++23 with gcc>=13)
+
print_simple_range(itertools::stride(vec, 2));
+
print_simple_range(std::views::stride(vec, 2));
+
+
// compare itertools::slice with std::views::counted
+
print_simple_range(itertools::slice(vec, 1, 5));
+
print_simple_range(std::views::counted(vec.begin() + 1, 4));
+
+
// compare itertools::range with std::views::iota (only available in c++23 with gcc>=13)
+
print_simple_range(itertools::range(10, 20, 2));
+
print_simple_range(std::views::iota(10, 20) | std::views::stride(2));
+
}
+
A lazy range of integers that mimics a Python range.
Definition range.hpp:79
+
detail::sliced< R > slice(R &&rg, std::ptrdiff_t start_idx, std::ptrdiff_t end_idx)
Lazy-slice a given range.
Definition slice.hpp:140
+
detail::enumerated< R > enumerate(R &&rg)
Lazy-enumerate a given range (similar to Python's enumerate).
+
auto transform(R &&rg, F lambda)
Lazy-transform a given range by applying a unary callable object to every element of the original ran...
+
detail::strided< R > stride(R &&rg, std::ptrdiff_t stride)
Lazy-stride through a given range.
Definition stride.hpp:180
+
detail::zipped< Rs... > zip(Rs &&...rgs)
Lazy-zip ranges together (similar to Python's zip).
Definition zip.hpp:221
+
detail::multiplied< Rs... > product(Rs &&...rgs)
Lazy-multiply a given number of ranges by forming their cartesian product.
Definition product.hpp:258
+
Provides a small subset of the ranges and views from std::ranges.
+

Output:

+
(0, a) (1, b)
+
(0, a) (1, b)
+
1 4 9 16 25 36
+
1 4 9 16 25 36
+
(1, a) (2, b)
+
(1, a) (2, b)
+
(1, a) (1, b) (2, a) (2, b) (3, a) (3, b) (4, a) (4, b) (5, a) (5, b) (6, a) (6, b)
+
(1, a) (1, b) (2, a) (2, b) (3, a) (3, b) (4, a) (4, b) (5, a) (5, b) (6, a) (6, b)
+
1 3 5
+
1 3 5
+
2 3 4 5
+
2 3 4 5
+
10 12 14 16 18
+
10 12 14 16 18
+
+
+
+ + + + diff --git a/docs/unstable/examples.html b/docs/unstable/examples.html new file mode 100644 index 0000000..e3c8073 --- /dev/null +++ b/docs/unstable/examples.html @@ -0,0 +1,192 @@ + + + + + + + +TRIQS/itertools: Examples + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
TRIQS/itertools 1.2.0 +
+
C++ range library
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Examples
+
+
+

Table of Contents

+ +
+
+

+Compiling the examples

+

All examples have been compiled on a MacBook Pro with an Apple M2 Max chip. At the point of writing this documentation only gcc-13 has implemented the required std::ranges for some of the examples. We therefore used gcc 13.2.0 together with cmake 3.27.2.

+

Assuming that the actual example code is in a file main.cpp and that the print.hpp (see below) is in the same directory, the following generic CMakeLists.txt should work for all examples:

+
cmake_minimum_required(VERSION 3.20)
+
project(example CXX)
+
+
# set required standard (needed for some std::ranges)
+
set(CMAKE_BUILD_TYPE Release)
+
set(CMAKE_CXX_STANDARD 23)
+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
+
+
# fetch itertools from github
+
set(Build_Tests OFF CACHE BOOL "" FORCE)
+
include (FetchContent)
+
FetchContent_Declare(
+
itertools
+
GIT_REPOSITORY https://github.com/TRIQS/itertools.git
+
GIT_TAG 1.2.x
+
)
+
FetchContent_MakeAvailable(itertools)
+
+
# build the example
+
add_executable(ex main.cpp)
+
target_link_libraries(ex itertools::itertools_c)
+

+print.hpp

+

To print the elements of a range to stdout, we used the following header:

+
#include <iostream>
+
#include <tuple>
+
#include <utility>
+
+
// helper function to pretty-print a tuple/array
+
template <typename T, size_t... I>
+
void print_impl(const T& tup, std::index_sequence<I...>) {
+
std::cout << "(";
+
(..., (std::cout << (I == 0? "" : ", ") << std::get<I>(tup)));
+
std::cout << ")";
+
}
+
+
// print a tuple/array to std::cout
+
template <typename T>
+
void print_tuple(const T& tup) {
+
print_impl(tup, std::make_index_sequence<std::tuple_size_v<T>>());
+
}
+
+
// print a range of tuple elements to std::cout
+
template <typename R>
+
void print_tuple_range(R&& rg) {
+
for (auto&& x : rg) {
+
print_tuple(x);
+
std::cout << " ";
+
}
+
std::cout << std::endl;
+
}
+
+
// print a range of simple elements to std::cout
+
template <typename R>
+
void print_simple_range(R&& rg) {
+
for (auto&& x : rg) {
+
std::cout << x << " ";
+
}
+
std::cout << std::endl;
+
}
+
+
+
+ + + + diff --git a/docs/unstable/files.html b/docs/unstable/files.html new file mode 100644 index 0000000..edc0e4e --- /dev/null +++ b/docs/unstable/files.html @@ -0,0 +1,135 @@ + + + + + + + +TRIQS/itertools: File List + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
TRIQS/itertools 1.2.0 +
+
C++ range library
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
File List
+
+
+
Here is a list of all documented files with brief descriptions:
+
[detail level 12]
+ + + + + + + + + + + + + +
  itertools
 enumerate.hppProvides a range adapting function for enumerating a given range/view
 iterator_facade.hppProvides a CRTP base class for various iterator types in itertools
 itertools.hppProvides a small subset of the ranges and views from std::ranges
 omp_chunk.hppProvides utilities to distribute a range across OMP threads
 product.hppProvides a range adapting function for multiplying a given number of ranges/views (cartesian product)
 range.hppProvides an integer range similar to Python's range
 sentinel.hppProvides a generic sentinel type for various iterator types in itertools
 slice.hppProvides a range adapting function for slicing a given range/view
 stride.hppProvides a range adapting function for striding through a given range/view
 transform.hppProvides a range adapting function for transforming a given range/view
 utils.hppProvides some utility functions for itertools
 zip.hppProvides a range adapting function for zipping a given number of ranges/views
+
+
+
+ + + + diff --git a/docs/unstable/files.js b/docs/unstable/files.js new file mode 100644 index 0000000..c5e46e0 --- /dev/null +++ b/docs/unstable/files.js @@ -0,0 +1,4 @@ +var files = +[ + [ "itertools", "dir_e6396aa9aeb50fc06708f48ec9beacf2.html", "dir_e6396aa9aeb50fc06708f48ec9beacf2" ] +]; \ No newline at end of file diff --git a/docs/unstable/folderclosed.svg b/docs/unstable/folderclosed.svg new file mode 100644 index 0000000..b04bed2 --- /dev/null +++ b/docs/unstable/folderclosed.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/docs/unstable/folderclosedd.svg b/docs/unstable/folderclosedd.svg new file mode 100644 index 0000000..52f0166 --- /dev/null +++ b/docs/unstable/folderclosedd.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/docs/unstable/folderopen.svg b/docs/unstable/folderopen.svg new file mode 100644 index 0000000..f6896dd --- /dev/null +++ b/docs/unstable/folderopen.svg @@ -0,0 +1,17 @@ + + + + + + + + + + diff --git a/docs/unstable/folderopend.svg b/docs/unstable/folderopend.svg new file mode 100644 index 0000000..2d1f06e --- /dev/null +++ b/docs/unstable/folderopend.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/docs/unstable/group__adapted__ranges.html b/docs/unstable/group__adapted__ranges.html new file mode 100644 index 0000000..dab07a8 --- /dev/null +++ b/docs/unstable/group__adapted__ranges.html @@ -0,0 +1,145 @@ + + + + + + + +TRIQS/itertools: Adapted ranges + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
TRIQS/itertools 1.2.0 +
+
C++ range library
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Adapted ranges
+
+
+

Detailed Description

+

Adapted ranges are returned by the range adapting functions and can be iterated over using one of the Range iterators.

+

In most cases, the user will never have to create or modify an adapted range directly. Instead, it is recommended to simply use the provided Range adapting functions.

+ + + + + + + + + + + + + + + + + + + + +

+Classes

struct  enumerated< R >
 Represents an enumerated range. More...
 
struct  multiplied< Rs >
 Represents a cartesian product of ranges. More...
 
struct  sliced< R >
 Represents a sliced range. More...
 
struct  strided< R >
 Represents a strided range. More...
 
struct  transformed< R, F >
 Represents a transformed range. More...
 
struct  zipped< Rs >
 Represents a zipped range. More...
 
+
+
+ + + + diff --git a/docs/unstable/group__integer__range.html b/docs/unstable/group__integer__range.html new file mode 100644 index 0000000..1b90168 --- /dev/null +++ b/docs/unstable/group__integer__range.html @@ -0,0 +1,356 @@ + + + + + + + +TRIQS/itertools: Integer range + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
TRIQS/itertools 1.2.0 +
+
C++ range library
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Integer range
+
+
+

Detailed Description

+

An integer range is similar to a Python range.

+

It is defined by a start value, an end value and a step size such that the i-th value of the range is given by start + i * step.

+ + + + + + + + + + + +

+Classes

class  range
 A lazy range of integers that mimics a Python range. More...
 
struct  range::all_t
 Denote a full range at compile-time. More...
 
struct  range::const_iterator
 Const iterator type for itertools::range. More...
 
+ + + + + + + + + + + + + + + + + +

+Functions

template<typename F >
void foreach (range const &rg, F &&f)
 Apply a function to every element of an integer itertools::range.
 
template<typename... Is, typename EnableIf = std::enable_if_t<(std::is_integral_v<Is> and ...), int>>
auto product_range (Is... is)
 Create a cartesian product range of integer ranges from given integers.
 
template<typename I , size_t N, typename EnableIf = std::enable_if_t<std::is_integral_v<I>, int>>
auto product_range (std::array< I, N > const &idx_arr)
 Create a cartesian product range of integer ranges from an array of integers.
 
template<typename... Is, typename EnableIf = std::enable_if_t<(std::is_integral_v<Is> and ...), int>>
auto product_range (std::tuple< Is... > const &idx_tpl)
 Create a cartesian product range of integer ranges from a tuple of integers.
 
+

Function Documentation

+ +

◆ foreach()

+ +
+
+
+template<typename F >
+ + + + + + + + + + + +
void foreach (range const & rg,
F && f )
+
+ +

#include <itertools/range.hpp>

+ +

Apply a function to every element of an integer itertools::range.

+
// print out the first 10 squares
+ +
std::cout << i * i << " ";
+
});
+
A lazy range of integers that mimics a Python range.
Definition range.hpp:79
+
void foreach(range const &rg, F &&f)
Apply a function to every element of an integer itertools::range.
Definition range.hpp:403
+

Output:

+
1 4 9 16 25 36 49 64 81 100
+
Template Parameters
+ + +
FCallable type.
+
+
+
Parameters
+ + + +
rgitertools::range object.
fCallable object to be applied to each element.
+
+
+ +

Definition at line 403 of file range.hpp.

+ +
+
+ +

◆ product_range() [1/3]

+ +
+
+
+template<typename... Is, typename EnableIf = std::enable_if_t<(std::is_integral_v<Is> and ...), int>>
+ + + + + + + +
auto product_range (Is... is)
+
+ +

#include <itertools/range.hpp>

+ +

Create a cartesian product range of integer ranges from given integers.

+

The given integers specify the excluded last values of the individual itertools::range objects. Each range starts at 0 and has a step size of 1.

+
for (auto [i1, i2] : product_range(2, 3)) {
+
std::cout << "(" << i1 << ", " << i2 << ")\n";
+
}
+
auto product_range(Is... is)
Create a cartesian product range of integer ranges from given integers.
Definition range.hpp:303
+

Output:

+
(0, 0)
+
(0, 1)
+
(0, 2)
+
(1, 0)
+
(1, 1)
+
(1, 2)
+
Template Parameters
+ + +
IsInteger types.
+
+
+
Parameters
+ + +
isLast values of the integer ranges (excluded).
+
+
+
Returns
Product (detail::multiplied) range of integer ranges. See itertools::product and itertools::range.
+ +

Definition at line 303 of file range.hpp.

+ +
+
+ +

◆ product_range() [2/3]

+ +
+
+
+template<typename I , size_t N, typename EnableIf = std::enable_if_t<std::is_integral_v<I>, int>>
+ + + + + + + +
auto product_range (std::array< I, N > const & idx_arr)
+
+ +

#include <itertools/range.hpp>

+ +

Create a cartesian product range of integer ranges from an array of integers.

+

The integers in the given array specify the excluded last values of the individual itertools::range objects. Each range starts at 0 and has a step size of 1.

+
for (auto [i1, i2] : product_range(std::array{2, 3})) {
+
std::cout << "(" << i1 << ", " << i2 << ")\n";
+
}
+

Output:

+
(0, 0)
+
(0, 1)
+
(0, 2)
+
(1, 0)
+
(1, 1)
+
(1, 2)
+
Template Parameters
+ + + +
IInteger type.
NNumber of elements in the array.
+
+
+
Parameters
+ + +
idx_arrArray containing the excluded last values of the integer ranges.
+
+
+
Returns
Product (detail::multiplied) range of integer ranges. See itertools::product and itertools::range.
+ +

Definition at line 379 of file range.hpp.

+ +
+
+ +

◆ product_range() [3/3]

+ +
+
+
+template<typename... Is, typename EnableIf = std::enable_if_t<(std::is_integral_v<Is> and ...), int>>
+ + + + + + + +
auto product_range (std::tuple< Is... > const & idx_tpl)
+
+ +

#include <itertools/range.hpp>

+ +

Create a cartesian product range of integer ranges from a tuple of integers.

+

The integers in the given tuple specify the excluded last values of the individual itertools::range objects. Each range starts at 0 and has a step size of 1.

+
for (auto [i1, i2] : product_range(std::make_tuple(2, 3))) {
+
std::cout << "(" << i1 << ", " << i2 << ")\n";
+
}
+

Output:

+
(0, 0)
+
(0, 1)
+
(0, 2)
+
(1, 0)
+
(1, 1)
+
(1, 2)
+
Template Parameters
+ + +
IsInteger types.
+
+
+
Parameters
+ + +
idx_tplTuple containing the excluded last values of the integer ranges.
+
+
+
Returns
Product (detail::multiplied) range of integer ranges. See itertools::product and itertools::range.
+ +

Definition at line 346 of file range.hpp.

+ +
+
+
+
+ + + + diff --git a/docs/unstable/group__range__adapting__functions.html b/docs/unstable/group__range__adapting__functions.html new file mode 100644 index 0000000..e68cead --- /dev/null +++ b/docs/unstable/group__range__adapting__functions.html @@ -0,0 +1,564 @@ + + + + + + + +TRIQS/itertools: Range adapting functions + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
TRIQS/itertools 1.2.0 +
+
C++ range library
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Range adapting functions
+
+
+

Detailed Description

+

Range adapting functions take one or more existing ranges and return lazy Adapted ranges that can be iterated over.

+

Lazy means that new elements are produced on the fly whenever they are needed instead of being precomputed when the range is created.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

template<typename R >
detail::enumerated< R > enumerate (R &&rg)
 Lazy-enumerate a given range (similar to Python's enumerate).
 
template<typename R , size_t N>
auto make_product (std::array< R, N > &arr)
 Create a cartesian product range from an array of ranges.
 
template<typename R , size_t N>
auto make_product (std::array< R, N > const &arr)
 Const overload of make_product(std::array<R, N> &).
 
template<typename... Rs>
detail::multiplied< Rs... > product (Rs &&...rgs)
 Lazy-multiply a given number of ranges by forming their cartesian product.
 
template<typename R >
detail::sliced< R > slice (R &&rg, std::ptrdiff_t start_idx, std::ptrdiff_t end_idx)
 Lazy-slice a given range.
 
template<typename R >
detail::strided< R > stride (R &&rg, std::ptrdiff_t stride)
 Lazy-stride through a given range.
 
template<typename R , typename F >
auto transform (R &&rg, F lambda)
 Lazy-transform a given range by applying a unary callable object to every element of the original range.
 
template<typename... Rs>
detail::zipped< Rs... > zip (Rs &&...rgs)
 Lazy-zip ranges together (similar to Python's zip).
 
+

Function Documentation

+ +

◆ enumerate()

+ +
+
+
+template<typename R >
+ + + + + + + +
detail::enumerated< R > enumerate (R && rg)
+
+ +

#include <itertools/enumerate.hpp>

+ +

Lazy-enumerate a given range (similar to Python's enumerate).

+

Each element in the original range is assigned an index, starting from zero. This function returns an iterable lazy object (a detail::enumerated range), which iterates over tuples consisting of the index and the value of the dereferenced iterator of the original range:

+
std::vector<char> vec { 'a', 'b', 'c' };
+
+
for (auto [idx, val] : enumerate(vec)) {
+
std::cout << "(" << idx << ", " << val << ")\n";
+
}
+
detail::enumerated< R > enumerate(R &&rg)
Lazy-enumerate a given range (similar to Python's enumerate).
+

Output:

+
(0, a)
+
(1, b)
+
(2, c)
+

See also std::ranges::views::enumerate.

+
Template Parameters
+ + +
RRange type.
+
+
+
Parameters
+ + +
rgRange to enumerate.
+
+
+
Returns
A detail::enumerated range.
+ +

Definition at line 172 of file enumerate.hpp.

+ +
+
+ +

◆ make_product() [1/2]

+ +
+
+
+template<typename R , size_t N>
+ + + + + + + +
auto make_product (std::array< R, N > & arr)
+
+ +

#include <itertools/product.hpp>

+ +

Create a cartesian product range from an array of ranges.

+
Template Parameters
+ + + +
RRange type.
NNumber of ranges.
+
+
+
Parameters
+ + +
arrArray of ranges.
+
+
+
Returns
A product (detail::multiplied) range from the ranges in the array.
+ +

Definition at line 268 of file product.hpp.

+ +
+
+ +

◆ make_product() [2/2]

+ +
+
+
+template<typename R , size_t N>
+ + + + + + + +
auto make_product (std::array< R, N > const & arr)
+
+ +

#include <itertools/product.hpp>

+ +

Const overload of make_product(std::array<R, N> &).

+ +

Definition at line 273 of file product.hpp.

+ +
+
+ +

◆ product()

+ +
+
+
+template<typename... Rs>
+ + + + + + + +
detail::multiplied< Rs... > product (Rs &&... rgs)
+
+ +

#include <itertools/product.hpp>

+ +

Lazy-multiply a given number of ranges by forming their cartesian product.

+

An arbitrary number of ranges are multiplied together into a cartesian product range. They are traversed such that the last range is traversed the fastest (see the example below). The number of elements in a product range is equal to the product of the sizes of the given ranges. This function returns an iterable lazy object, which can be used in range-based for loops:

+
std::vector<int> v1 { 1, 2, 3 };
+
std::vector<char> v2 { 'a', 'b' };
+
+
for (auto [i, c] : product(v1, v2)) {
+
std::cout << "(" << i << ", " << c << ")\n";
+
}
+
detail::multiplied< Rs... > product(Rs &&...rgs)
Lazy-multiply a given number of ranges by forming their cartesian product.
Definition product.hpp:258
+

Output:

+
(1, a)
+
(1, b)
+
(2, a)
+
(2, b)
+
(3, a)
+
(3, b)
+

See also std::ranges::views::cartesian_product.

+
Template Parameters
+ + +
RsRange types.
+
+
+
Parameters
+ + +
rgsRanges to be used.
+
+
+
Returns
A product (detail::multiplied) range.
+ +

Definition at line 258 of file product.hpp.

+ +
+
+ +

◆ slice()

+ +
+
+
+template<typename R >
+ + + + + + + + + + + + + + + + +
detail::sliced< R > slice (R && rg,
std::ptrdiff_t start_idx,
std::ptrdiff_t end_idx )
+
+ +

#include <itertools/slice.hpp>

+ +

Lazy-slice a given range.

+

Only the part of the given range between the start_idx and the end_idx is taken into account. If end_idx is bigger than the size of the original range, the slice ends at the end of the original range. If end_idx is smaller than start_idx, the slice is empty. Note that the behaviour is undefined if start_idx is smaller than zero. This function returns an iterable lazy object, which can be used in range-based for loops:

+
std::array<int, 5> arr { 1, 2, 3, 4, 5 };
+
+
for (auto i : slice(arr, 1, 3)) {
+
std::cout << i << " ";
+
}
+
std::cout << "\n";
+
+
for (auto i : slice(arr, 3, 7)) {
+
std::cout << i << " ";
+
}
+
std::cout << "\n";
+
+
for (auto i : slice(arr, 4, 3)) {
+
std::cout << i << " "; // empty slice
+
}
+
detail::sliced< R > slice(R &&rg, std::ptrdiff_t start_idx, std::ptrdiff_t end_idx)
Lazy-slice a given range.
Definition slice.hpp:140
+

Output:

+
2 3
+
4 5
+
Template Parameters
+ + +
RRange type.
+
+
+
Parameters
+ + + + +
rgRange to be sliced.
start_idxIndex where the slice starts.
end_idxIndex of the first element past the end of the sliced range (excluded).
+
+
+
Returns
A detail::sliced range.
+ +

Definition at line 140 of file slice.hpp.

+ +
+
+ +

◆ stride()

+ +
+
+
+template<typename R >
+ + + + + + + + + + + +
detail::strided< R > stride (R && rg,
std::ptrdiff_t stride )
+
+ +

#include <itertools/stride.hpp>

+ +

Lazy-stride through a given range.

+

Only every Nth element of the original range is taken into account. If the given stride (N) is <= 0, an exception is thrown. This function returns an iterable lazy object, which can be used in range-based for loops:

+
std::vector<int> vec { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
+
+
for (auto i : stride(vec, 3)) {
+
std::cout << i << " ";
+
}
+
std::cout << "\n";
+
+
for (auto i : stride(vec, 10)) {
+
std::cout << i << " ";
+
}
+
detail::strided< R > stride(R &&rg, std::ptrdiff_t stride)
Lazy-stride through a given range.
Definition stride.hpp:180
+

Output:

+
1 4 7 10
+
1
+

See also See also std::ranges::views::stride.

+
Template Parameters
+ + +
RRange type.
+
+
+
Parameters
+ + + +
rgOriginal range.
strideNumber of elements to skip when incrementing.
+
+
+
Returns
A detail::strided range.
+ +

Definition at line 180 of file stride.hpp.

+ +
+
+ +

◆ transform()

+ +
+
+
+template<typename R , typename F >
+ + + + + + + + + + + +
auto transform (R && rg,
F lambda )
+
+ +

#include <itertools/transform.hpp>

+ +

Lazy-transform a given range by applying a unary callable object to every element of the original range.

+

The value type of the transformed range depends on the return type of the callable. This function returns an iterable lazy object (a detail::transformed range), which can be used in range-based for loops:

+
std::list<int> list { 1, 2, 3, 4, 5 };
+
+
for (auto i : itertools::transform(list, [](int i) { return i * i; })) {
+
std::cout << i << " ";
+
}
+
auto transform(R &&rg, F lambda)
Lazy-transform a given range by applying a unary callable object to every element of the original ran...
+

Output:

+
1 4 9 16 25
+

See also std::ranges::views::transform.

+
Template Parameters
+ + + +
RRange type.
FCallable type.
+
+
+
Parameters
+ + + +
rgRange to transform.
lambdaCallable to be applied to the given range.
+
+
+
Returns
A detail::transformed range.
+ +

Definition at line 191 of file transform.hpp.

+ +
+
+ +

◆ zip()

+ +
+
+
+template<typename... Rs>
+ + + + + + + +
detail::zipped< Rs... > zip (Rs &&... rgs)
+
+ +

#include <itertools/zip.hpp>

+ +

Lazy-zip ranges together (similar to Python's zip).

+

An arbitrary number of ranges are zipped together into a tuple. The zipped range will have as many elements as the shortest given range. This function returns an iterable lazy object, which can be used in range-based for loops:

+
std::vector<int> v1 { 1, 2, 3 };
+
std::vector<char> v2 { 'a', 'b', 'c', 'd', 'e' };
+
+
for (auto [i1, i2] : zip(v1, v1)) {
+
std::cout << "(" << i1 << ", " << i2 << ") ";
+
}
+
+
for (auto [i1, i2, c3] : zip(v1, v1, v2)) {
+
std::cout << "(" << i1 << ", " << i2 << ", " << c3 << ") ";
+
}
+
detail::zipped< Rs... > zip(Rs &&...rgs)
Lazy-zip ranges together (similar to Python's zip).
Definition zip.hpp:221
+

Output:

+
(1, 1) (2, 2) (3, 3)
+
(1, 1, a) (2, 2, b) (3, 3, c)
+

See also std::ranges::views::zip.

+
Template Parameters
+ + +
RsRange types.
+
+
+
Parameters
+ + +
rgsRanges to zip.
+
+
+
Returns
A detail::zipped range.
+ +

Definition at line 221 of file zip.hpp.

+ +
+
+
+
+ + + + diff --git a/docs/unstable/group__range__iterators.html b/docs/unstable/group__range__iterators.html new file mode 100644 index 0000000..3239de3 --- /dev/null +++ b/docs/unstable/group__range__iterators.html @@ -0,0 +1,149 @@ + + + + + + + +TRIQS/itertools: Range iterators + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
TRIQS/itertools 1.2.0 +
+
C++ range library
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Range iterators
+
+
+

Detailed Description

+

Range iterators are internally used by the library to iterate over Adapted ranges.

+

In general, there should be no need for users to deal with range iterators directly. Instead, it is recommended to use range-based for loops, e.g.

for (auto [idx, val] : itertools::enumerate(some_range)) {
+
// do something with the index and the value of the range
+
}
+

vs. the traditional for loops, e.g.

auto enum_range = itertools::enumerate(some_range);
+
for (auto it = enum_range.begin(); it != enum_range.end(); ++it) {
+
// do something with the iterator
+
}
+
detail::enumerated< R > enumerate(R &&rg)
Lazy-enumerate a given range (similar to Python's enumerate).
+
+ + + + + + + + + + + + + + + + +

+Classes

struct  enum_iter< Iter >
 Iterator for a detail::enumerated range. More...
 
struct  prod_iter< EndIters, Iters >
 Iterator for a detail::multiplied (cartesian product) range. More...
 
struct  stride_iter< Iter >
 Iterator for a detail::strided range. More...
 
struct  transform_iter< Iter, F, Value >
 Iterator for a detail::transformed range. More...
 
struct  zip_iter< Iters >
 Iterator for a detail::zipped range. More...
 
+
+
+ + + + diff --git a/docs/unstable/group__utilities.html b/docs/unstable/group__utilities.html new file mode 100644 index 0000000..cb83f1b --- /dev/null +++ b/docs/unstable/group__utilities.html @@ -0,0 +1,381 @@ + + + + + + + +TRIQS/itertools: Utilities + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
TRIQS/itertools 1.2.0 +
+
C++ range library
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Utilities
+
+
+

Detailed Description

+

Utilities are mostly internal implementation details and should not concern everyday users.

+

The only functions the might be intersting to some users are: chunk_range, make_vector_from_range and omp_chunk.

+ + + + + + + + +

+Classes

struct  iterator_facade< Iter, Value, std::forward_iterator_tag, Reference, Difference >
 CRTP base class for various iterator types in itertools. More...
 
struct  sentinel_t< Iter >
 Generic sentinel type that can be used to mark the end of a range. More...
 
+ + + + + + + + + + + + + + + + + + + + +

+Functions

std::pair< std::ptrdiff_t, std::ptrdiff_t > chunk_range (std::ptrdiff_t first, std::ptrdiff_t last, long n_chunks, long rank)
 Given an integer range [first, last), divide it as equally as possible into N chunks.
 
template<typename Iter1 , typename Iter2 >
std::iterator_traits< Iter1 >::difference_type distance (Iter1 first, Iter2 last)
 Calculate the distance between two iterators.
 
template<typename Iter >
sentinel_t< Iter > make_sentinel (Iter it)
 Create an itertools::sentinel_t from an iterator using template type deduction.
 
template<typename R >
auto make_vector_from_range (R const &rg)
 Create a vector from a range.
 
template<typename R >
auto omp_chunk (R &&rg)
 Distribute a range as evenly as possible across all OMP threads.
 
+

Function Documentation

+ +

◆ chunk_range()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
std::pair< std::ptrdiff_t, std::ptrdiff_t > chunk_range (std::ptrdiff_t first,
std::ptrdiff_t last,
long n_chunks,
long rank )
+
+inline
+
+ +

#include <itertools/utils.hpp>

+ +

Given an integer range [first, last), divide it as equally as possible into N chunks.

+

It is intended to divide a range among different processes. If the size of the range is not divisible by N without a remainder, i.e. r = (last - first) % N, then the first r chunks have one more element.

+
Parameters
+ + + + + +
firstFirst value of the range.
lastLast value of the range (excluded).
n_chunksNumber of chunks to divide the range into.
rankRank of the calling process.
+
+
+
Returns
Pair of indices specifying the first and last (excluded) value of the chunk assigned to the calling process.
+ +

Definition at line 92 of file utils.hpp.

+ +
+
+ +

◆ distance()

+ +
+
+
+template<typename Iter1 , typename Iter2 >
+ + + + + +
+ + + + + + + + + + + +
std::iterator_traits< Iter1 >::difference_type distance (Iter1 first,
Iter2 last )
+
+inline
+
+ +

#include <itertools/utils.hpp>

+ +

Calculate the distance between two iterators.

+

It is similar to std::distance, except that it can be used for two different iterator types, e.g. in case one of them is a const iterator.

+
Template Parameters
+ + + +
Iter1Iterator type #1.
Iter2Iterator type #2.
+
+
+
Parameters
+ + + +
firstIterator #1.
lastIterator #2.
+
+
+
Returns
Number of elements between the two iterators.
+ +

Definition at line 51 of file utils.hpp.

+ +
+
+ +

◆ make_sentinel()

+ +
+
+
+template<typename Iter >
+ + + + + + + +
sentinel_t< Iter > make_sentinel (Iter it)
+
+ +

#include <itertools/sentinel.hpp>

+ +

Create an itertools::sentinel_t from an iterator using template type deduction.

+
Template Parameters
+ + +
IterIterator type.
+
+
+
Parameters
+ + +
itIterator to be turned into an itertools::sentinel_t.
+
+
+
Returns
Sentinel object.
+ +

Definition at line 50 of file sentinel.hpp.

+ +
+
+ +

◆ make_vector_from_range()

+ +
+
+
+template<typename R >
+ + + + + + + +
auto make_vector_from_range (R const & rg)
+
+ +

#include <itertools/utils.hpp>

+ +

Create a vector from a range.

+
Template Parameters
+ + +
RRange type.
+
+
+
Parameters
+ + +
rgRange.
+
+
+
Returns
std::vector<T> containing the elements of the range, where T denotes the value type of the range.
+ +

Definition at line 69 of file utils.hpp.

+ +
+
+ +

◆ omp_chunk()

+ +
+
+
+template<typename R >
+ + + + + + + +
auto omp_chunk (R && rg)
+
+ +

#include <itertools/omp_chunk.hpp>

+ +

Distribute a range as evenly as possible across all OMP threads.

+

See chunk_range(std::ptrdiff_t, std::ptrdiff_t, long, long) and slice(R &&, std::ptrdiff_t, std::ptrdiff_t) for more details.

+
Template Parameters
+ + +
RRange type.
+
+
+
Parameters
+ + +
rgRange to chunk.
+
+
+
Returns
A detail::sliced range, containing the chunk of the original range that belongs to the current thread.
+ +

Definition at line 40 of file omp_chunk.hpp.

+ +
+
+
+
+ + + + diff --git a/docs/unstable/index.html b/docs/unstable/index.html new file mode 100644 index 0000000..d72a00e --- /dev/null +++ b/docs/unstable/index.html @@ -0,0 +1,201 @@ + + + + + + + +TRIQS/itertools: Overview + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
TRIQS/itertools 1.2.0 +
+
C++ range library
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Overview
+
+
+

Table of Contents

+ +
+

build

+
+

‍This is the homepage of TRIQS/itertools 1.2.0. The source code can be found on GitHub.

+
+
+
#include <vector>
+
+
using namespace itertools;
+
+
int main() {
+
+
// ===== Integer ranges =====
+
+
for(int i: range(10)) { /* 0, 1, .., 9 */ }
+
+
for(int i: range(2, 10, 2)) { /* 2, 4, 6, 8 */ }
+
+
for (auto [i, j] : product_range(5, 5)) {
+
/* (0, 0), (0, 1), .. (0, 4),
+
(1, 0), (1, 2), .. (1, 4),
+
...
+
(4, 0), (4, 2), .. (4, 4) */
+
}
+
+
// ===== Adapted ranges =====
+
+
std::vector<char> Vc{'a', 'b', 'c'};
+
+
for (auto [i, c] : enumerate(Vc)) {
+
/* (0, 'a'), (1, 'b'), (2, 'c') */
+
}
+
+
std::vector<double> Vd{2.0, 4.0, 1.0};
+
+
for (auto [c, d] : zip(Vc, Vd)) {
+
/* ('a', 2.0), ('b', 4.0), ('c', 1.0) */
+
}
+
+
for (auto [c, d] : product(Vc, Vd)) {
+
/* ('a', 2.0), ('a', 4.0), ('a', 1.0),
+
('b', 2.0), ('b', 4.0), ('b', 1.0),
+
('c', 2.0), ('c', 4.0), ('c', 1.0) */
+
}
+
+
for (auto x : transform(Vd, [](auto d){ return d * d; })) {
+
/* 4.0, 16.0, 1.0 */
+
}
+
+
}
+
A lazy range of integers that mimics a Python range.
Definition range.hpp:79
+
auto product_range(Is... is)
Create a cartesian product range of integer ranges from given integers.
Definition range.hpp:303
+
detail::enumerated< R > enumerate(R &&rg)
Lazy-enumerate a given range (similar to Python's enumerate).
+
auto transform(R &&rg, F lambda)
Lazy-transform a given range by applying a unary callable object to every element of the original ran...
+
detail::zipped< Rs... > zip(Rs &&...rgs)
Lazy-zip ranges together (similar to Python's zip).
Definition zip.hpp:221
+
detail::multiplied< Rs... > product(Rs &&...rgs)
Lazy-multiply a given number of ranges by forming their cartesian product.
Definition product.hpp:258
+
Provides a small subset of the ranges and views from std::ranges.
+

itertools defines a small subset of the ranges and views from std::ranges. The main purpose of the library is to provide lazy ranges

    +
  • that can be iterated over in range-based for loops (see example above) and
  • +
  • that can be used to make lazy views of multidimensional arrays
    #include <nda/nda.hpp>
    +
    +
    int main() {
    +
    // create a 10 x 10 matrix
    +
    auto A = nda::matrix<int>::rand(10, 10);
    +
    +
    // create a view on the 5 x 10 submatrix consisting of every other row
    +
    auto sub_A = A(nda::range(0, 10, 2), nda::range::all);
    +
    }
    +
    Visit TRIQS/nda for more details.
  • +
+

Note that nearly all of the functionality (and much more) of itertools is also provided by std::ranges or Eric Niebler's range-v3 library. We therefore recommend to use one of those, if you have a choice.

+

+Where to start?

+

The Installation section tells you how to get the library and make it available on your system.

+

Integration in C++ projects explains how to integrate itertools in your own C++ code.

+

Then, you can start with the Examples section to get an overview of the library's features and how it compares with std::ranges.

+

Furthermore, we provide a detailed reference API Documentation to answer your questions.

+

If you experience any problem with the library, you can post an Issue on GitHub.

+
+ +
+
+ + + + diff --git a/docs/unstable/index.js b/docs/unstable/index.js new file mode 100644 index 0000000..d6cb420 --- /dev/null +++ b/docs/unstable/index.js @@ -0,0 +1,4 @@ +var index = +[ + [ "Where to start?", "index.html#start", null ] +]; \ No newline at end of file diff --git a/docs/unstable/installation.html b/docs/unstable/installation.html new file mode 100644 index 0000000..936f840 --- /dev/null +++ b/docs/unstable/installation.html @@ -0,0 +1,183 @@ + + + + + + + +TRIQS/itertools: Installation + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
TRIQS/itertools 1.2.0 +
+
C++ range library
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Installation
+
+
+ +

itertools is a header only library and installation is not necessary. However, it still supports the usual installation procedure using CMake.

+

If you want to skip the installation step, you can go directly to Integration in C++ projects to see how you can integrate itertools into your own C++ project.

+
+

Note: To guarantee reproducibility in scientific calculations, we strongly recommend the use of a stable release version.

+
+

+Dependencies

+

The dependencies of itertools are as follows:

+
    +
  • gcc version 12 or later OR clang version 15 or later OR IntelLLVM (icx) 2023.1.0 or later
  • +
  • CMake version 3.20 or later (for installation or integration into an existing project via CMake)
  • +
+

+Installation steps

+
    +
  1. Download the source code of the latest stable version by cloning the TRIQS/itertools repository from GitHub:

    +
    $ git clone https://github.com/TRIQS/itertools itertools.src
    +
  2. +
  3. Create and move to a new directory where you will compile the code:

    +
    $ mkdir itertools.build && cd itertools.build
    +
  4. +
  5. In the build directory call cmake, including any additional custom CMake options (see below):

    +
    $ cmake -DCMAKE_INSTALL_PREFIX=path_to_install_dir ../itertools.src
    +

    Note that it is required to specify CMAKE_INSTALL_PREFIX, otherwise CMake will stop with an error.

    +
  6. +
  7. Compile the code, run the tests and install the application:

    +
    $ make -j N
    +
    $ make test
    +
    $ make install
    +

    Replace N with the number of cores you want to use to build the library.

    +
  8. +
+

+Versions

+

To use a particular version, go into the directory with the sources, and look at all available versions:

+
$ cd itertools.src && git tag
+

Checkout the version of the code that you want:

+
$ git checkout 1.2.0
+

and follow steps 2 to 4 to compile the code.

+

+Custom CMake options

+

The compilation of itertools can be configured using CMake options

+
$ cmake ../itertools.src -DOPTION1=value1 -DOPTION2=value2 ...
+
+ + + + + + + + + + + + +
Options Syntax
Specify an installation path -DCMAKE_INSTALL_PREFIX=path_to_install_dir
Build in Debugging Mode -DCMAKE_BUILD_TYPE=Debug
Disable testing (not recommended) -DBuild_Tests=OFF
Build the documentation -DBuild_Documentation=ON
Build benchmarks -DBuild_Benchs=ON
+
+
+
+ + + + diff --git a/docs/unstable/integration.html b/docs/unstable/integration.html new file mode 100644 index 0000000..797e472 --- /dev/null +++ b/docs/unstable/integration.html @@ -0,0 +1,186 @@ + + + + + + + +TRIQS/itertools: Integration in C++ projects + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
TRIQS/itertools 1.2.0 +
+
C++ range library
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Integration in C++ projects
+
+
+ +

itertools is a header only library. To use it in your own C++ code, you simply have to include the following header

+
+
+
// use itertools
+
Provides a small subset of the ranges and views from std::ranges.
+

and tell your compiler/build system where it can find the necessary files. In the following, we describe some common ways to achieve this (with special focus on CMake).

+

+CMake

+

+FetchContent

+

If you use CMake to build your source code, it is recommended to fetch the source code directly from the Github repository using CMake's FetchContent module:

+
cmake_minimum_required(VERSION 3.20)
+
project(my_project CXX)
+
+
# fetch from github
+
include (FetchContent)
+
FetchContent_Declare(
+
itertools
+
GIT_REPOSITORY https://github.com/TRIQS/itertools.git
+
GIT_TAG 1.2.x
+
)
+
FetchContent_MakeAvailable(itertools)
+
+
# declare a target and link to itertools
+
add_executable(my_executable main.cpp)
+
target_link_libraries(my_executable itertools::itertools_c)
+

Note that the above will also build goolgetest and the unit tests for itertools. To disable this, you can put set(Build_Tests OFF CACHE BOOL "" FORCE) before fetching the content.

+

+find_package

+

If you have already installed itertools on your system by following the instructions from the Installation page, you can also make use of CMake's find_package command. This has the advantage that you don't need to download anything, i.e. no internet connection is required.

+

Let's assume that itertools has been installed to path_to_install_dir. Then linking your project to itertools with CMake is as easy as

+
cmake_minimum_required(VERSION 3.20)
+
project(my_project CXX)
+
+
# find itertools
+
find_package(itertools REQUIRED)
+
+
# declare a target and link to itertools
+
add_executable(my_executable main.cpp)
+
target_link_libraries(my_executable itertools::itertools_c)
+

In case, CMake cannot find the package, you might have to tell it where to look for the itertools-config.cmake file by setting the variable itertools_DIR to path_to_install_dir/lib/cmake/itertools or by sourcing the provided itertoolsvars.sh before running CMake:

+
$ source path_to_install_dir/share/itertools/itertoolsvars.sh
+

+add_subdirectory

+

You can also integrate itertools into our CMake project by placing the entire source tree in a subdirectory and call add_subdirectory():

+
cmake_minimum_required(VERSION 3.20)
+
project(my_project CXX)
+
+
# add itertools subdirectory
+
add_subdirectory(deps/itertools)
+
+
# declare a target and link to itertools
+
add_executable(my_executable main.cpp)
+
target_link_libraries(my_executable itertools::itertools_c)
+

Here, it is assumed that the itertools source tree is in a subdirectory deps/itertools relative to your CMakeLists.txt file.

+

+Other

+

Since itertools is header-only, you can also simply copy the relevant files directly into our project. For example, you could place the c++/itertools directory from the itertools source tree into the include path of your project. You can then build or compile it with any available method.

+
+
+
+ + + + diff --git a/docs/unstable/issues.html b/docs/unstable/issues.html new file mode 100644 index 0000000..98b6346 --- /dev/null +++ b/docs/unstable/issues.html @@ -0,0 +1,126 @@ + + + + + + + +TRIQS/itertools: Issues + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
TRIQS/itertools 1.2.0 +
+
C++ range library
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Issues
+
+
+

Please report all problems and bugs directly at the GitHub issues page. In order to make it easier for us to solve the issue please follow these guidelines:

+
    +
  1. In all cases specify which version of the application you are using. You can find the version number in the file CMakeLists.txt at the root of the application sources.
  2. +
  3. If you have a problem during the installation, give us information about your operating system and the compiler you are using. Include the outputs of the cmake and make commands as well as the CMakeCache.txt file which is in the build directory. Please include these outputs in a gist file referenced in the issue.
  4. +
  5. If you are experiencing a problem during the execution of the application, provide a script which allows to quickly reproduce the problem.
  6. +
+

Thanks!

+
+
+
+ + + + diff --git a/docs/unstable/iterator__facade_8hpp.html b/docs/unstable/iterator__facade_8hpp.html new file mode 100644 index 0000000..a2edddb --- /dev/null +++ b/docs/unstable/iterator__facade_8hpp.html @@ -0,0 +1,136 @@ + + + + + + + +TRIQS/itertools: itertools/iterator_facade.hpp File Reference + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
TRIQS/itertools 1.2.0 +
+
C++ range library
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
iterator_facade.hpp File Reference
+
+
+
#include <cstddef>
+#include <iterator>
+

Detailed Description

+

Provides a CRTP base class for various iterator types in itertools.

+ +

Definition in file iterator_facade.hpp.

+
+

Go to the source code of this file.

+ + + + + +

+Classes

struct  iterator_facade< Iter, Value, std::forward_iterator_tag, Reference, Difference >
 CRTP base class for various iterator types in itertools. More...
 
+
+
+ + + + diff --git a/docs/unstable/iterator__facade_8hpp_source.html b/docs/unstable/iterator__facade_8hpp_source.html new file mode 100644 index 0000000..55420da --- /dev/null +++ b/docs/unstable/iterator__facade_8hpp_source.html @@ -0,0 +1,247 @@ + + + + + + + +TRIQS/itertools: itertools/iterator_facade.hpp Source File + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
TRIQS/itertools 1.2.0 +
+
C++ range library
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
iterator_facade.hpp
+
+
+Go to the documentation of this file.
1// Copyright (c) 2019-2022 Simons Foundation
+
2//
+
3// Licensed under the Apache License, Version 2.0 (the "License");
+
4// you may not use this file except in compliance with the License.
+
5// You may obtain a copy of the License at
+
6//
+
7// http://www.apache.org/licenses/LICENSE-2.0.txt
+
8//
+
9// Unless required by applicable law or agreed to in writing, software
+
10// distributed under the License is distributed on an "AS IS" BASIS,
+
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
12// See the License for the specific language governing permissions and
+
13// limitations under the License.
+
14//
+
15// Authors: Olivier Parcollet, Nils Wentzell, chuffa
+
16
+
17/**
+
18 * @file
+
19 * @brief Provides a CRTP base class for various iterator types in itertools.
+
20 */
+
21
+
22#ifndef _ITERTOOLS_ITERATOR_FACADE_HPP
+
23#define _ITERTOOLS_ITERATOR_FACADE_HPP
+
24
+
25#include <cstddef>
+
26#include <iterator>
+
27
+
28namespace itertools {
+
29
+
30 /// @cond
+
31 // Forward declaration.
+
32 template <typename Iter, typename Value, typename Tag = std::forward_iterator_tag, typename Reference = Value &,
+
33 typename Difference = std::ptrdiff_t>
+
34 struct iterator_facade;
+
35 /// @endcond
+
36
+
37 /**
+
38 * @ingroup utilities
+
39 * @brief CRTP base class for various iterator types in itertools.
+
40 *
+
41 * @details All iterator types defined in itertools are derived from this class. It uses the
+
42 * <a href="https://en.cppreference.com/w/cpp/iterator/forward_iterator">forward iterator</a>
+
43 * category. Derived classes are required to implement the following member functions:
+
44 *
+
45 * @code{.cpp}
+
46 * // used by operator++() and operator++(int)
+
47 * void increment();
+
48 *
+
49 * // used by operator*() and operator->()
+
50 * value_type [const] [&] dereference() [const];
+
51 * @endcode
+
52 *
+
53 * The `[..]` are optional and depend on the actual iterator type.
+
54 *
+
55 * @tparam Iter Derived iterator type.
+
56 * @tparam Value Value type of the iterator.
+
57 * @tparam Reference Reference type of the iterator.
+
58 * @tparam Difference Difference type of the iterator.
+
59 */
+
60 template <typename Iter, typename Value, typename Reference, typename Difference>
+
61 struct iterator_facade<Iter, Value, std::forward_iterator_tag, Reference, Difference> {
+
62 private:
+
63 // Get a reference to the derived iterator.
+
64 [[nodiscard]] Iter &self() { return static_cast<Iter &>(*this); }
+
65
+
66 // Get a const reference to the derived iterator.
+
67 [[nodiscard]] Iter const &self() const { return static_cast<const Iter &>(*this); }
+
68
+
69 public:
+
70 /// Value type of the derived iterator.
+
71 using value_type = Value;
+
72
+
73 /// Reference type of the derived iterator.
+
74 using reference = Reference;
+
75
+
76 /// Pointer type of the derived iterator.
+
77 using pointer = Value *;
+
78
+
79 /// Difference type of the derived iterator.
+
80 using difference_type = Difference;
+
81
+
82 /// Iterator category of the derived iterator.
+
83 using iterator_category = std::forward_iterator_tag;
+
84
+
85 /**
+
86 * @brief Pre-increment operator.
+
87 * @return Reference to the derived iterator after calling the derived iterator's `increment()` function.
+
88 */
+
89 Iter &operator++() {
+
90 self().increment();
+
91 return self();
+
92 }
+
93
+
94 /**
+
95 * @brief Post-increment operator.
+
96 * @return Copy of the derived iterator before calling the derived iterator's `increment()` function.
+
97 */
+
98 Iter operator++(int) {
+
99 Iter c = self();
+
100 self().increment();
+
101 return c;
+
102 }
+
103
+
104 /**
+
105 * @brief Dereference operator.
+
106 * @return Result of the derived iterator's `dereference()` function.
+
107 */
+
108 [[nodiscard]] decltype(auto) operator*() const { return self().dereference(); }
+
109
+
110 /**
+
111 * @brief Member access operator.
+
112 * @return Result of the derived iterator's `dereference()` function.
+
113 */
+
114 [[nodiscard]] decltype(auto) operator->() const { return operator*(); }
+
115 };
+
116
+
117} // namespace itertools
+
118
+
119#endif // _ITERTOOLS_ITERATOR_FACADE_HPP
+ + + + +
+
+ + + + diff --git a/docs/unstable/itertools_8hpp.html b/docs/unstable/itertools_8hpp.html new file mode 100644 index 0000000..4ab8e31 --- /dev/null +++ b/docs/unstable/itertools_8hpp.html @@ -0,0 +1,132 @@ + + + + + + + +TRIQS/itertools: itertools/itertools.hpp File Reference + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
TRIQS/itertools 1.2.0 +
+
C++ range library
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
itertools.hpp File Reference
+
+
+
#include "./enumerate.hpp"
+#include "./product.hpp"
+#include "./range.hpp"
+#include "./slice.hpp"
+#include "./stride.hpp"
+#include "./transform.hpp"
+#include "./zip.hpp"
+

Detailed Description

+

Provides a small subset of the ranges and views from std::ranges.

+ +

Definition in file itertools.hpp.

+
+

Go to the source code of this file.

+
+
+ + + + diff --git a/docs/unstable/itertools_8hpp_source.html b/docs/unstable/itertools_8hpp_source.html new file mode 100644 index 0000000..28cb4c5 --- /dev/null +++ b/docs/unstable/itertools_8hpp_source.html @@ -0,0 +1,157 @@ + + + + + + + +TRIQS/itertools: itertools/itertools.hpp Source File + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
TRIQS/itertools 1.2.0 +
+
C++ range library
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
itertools.hpp
+
+
+Go to the documentation of this file.
1// Copyright (c) 2019-2022 Simons Foundation
+
2//
+
3// Licensed under the Apache License, Version 2.0 (the "License");
+
4// you may not use this file except in compliance with the License.
+
5// You may obtain a copy of the License at
+
6//
+
7// http://www.apache.org/licenses/LICENSE-2.0.txt
+
8//
+
9// Unless required by applicable law or agreed to in writing, software
+
10// distributed under the License is distributed on an "AS IS" BASIS,
+
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
12// See the License for the specific language governing permissions and
+
13// limitations under the License.
+
14//
+
15// Authors: Olivier Parcollet, Nils Wentzell, chuffa
+
16
+
17/**
+
18 * @file
+
19 * @brief Provides a small subset of the ranges and views from [std::ranges](https://en.cppreference.com/w/cpp/ranges).
+
20 */
+
21
+
22#ifndef _ITERTOOLS_HPP
+
23#define _ITERTOOLS_HPP
+
24
+
25#include "./enumerate.hpp"
+
26#include "./product.hpp"
+
27#include "./range.hpp"
+
28#include "./slice.hpp"
+
29#include "./stride.hpp"
+
30#include "./transform.hpp"
+
31#include "./zip.hpp"
+
32
+
33#endif // _ITERTOOLS_HPP_
+
+
+ + + + diff --git a/docs/unstable/jquery.js b/docs/unstable/jquery.js new file mode 100644 index 0000000..1dffb65 --- /dev/null +++ b/docs/unstable/jquery.js @@ -0,0 +1,34 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=y(e||this.defaultElement||this)[0],this.element=y(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=y(),this.hoverable=y(),this.focusable=y(),this.classesElementLookup={},e!==this&&(y.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=y(e.style?e.ownerDocument:e.document||e),this.window=y(this.document[0].defaultView||this.document[0].parentWindow)),this.options=y.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:y.noop,_create:y.noop,_init:y.noop,destroy:function(){var i=this;this._destroy(),y.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:y.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return y.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t]=y.widget.extend({},this.options[t]),n=0;n
"),i=e.children()[0];return y("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(D(s),D(n))?o.important="horizontal":o.important="vertical",p.using.call(this,t,o)}),h.offset(y.extend(l,{using:t}))})},y.ui.position={fit:{left:function(t,e){var i=e.within,s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,h=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),y.ui.plugin={add:function(t,e,i){var s,n=y.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&y(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){y(t).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,h=this;if(this.handles=o.handles||(y(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=y(),this._addedHandles=y(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split(","),this.handles={},e=0;e"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=y(this.handles[e]),this._on(this.handles[e],{mousedown:h._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=y(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add(this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){h.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),h.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=y(this.handles[e])[0])!==t.target&&!y.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=y(s.containment).scrollLeft()||0,i+=y(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=y(".ui-resizable-"+this.axis).css("cursor"),y("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),y.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(y.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),y("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),st.width,h=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,r=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),h&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),h&&i&&(t.top=r-e.minHeight),n&&i&&(t.top=r-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){y.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),y.ui.plugin.add("resizable","animate",{stop:function(e){var i=y(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,h=n?0:i.sizeDiff.width,n={width:i.size.width-h,height:i.size.height-o},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(y.extend(n,o&&h?{top:o,left:h}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&y(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),y.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=y(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,h=o instanceof y?o.get(0):/parent/.test(o)?e.parent().get(0):o;h&&(n.containerElement=y(h),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:y(document),left:0,top:0,width:y(document).width(),height:y(document).height()||document.body.parentNode.scrollHeight}):(i=y(h),s=[],y(["Top","Right","Left","Bottom"]).each(function(t,e){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(h,"left")?h.scrollWidth:o,e=n._hasScroll(h)?h.scrollHeight:e,n.parentData={element:h,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=y(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,h={top:0,left:0},a=e.containerElement,t=!0;a[0]!==document&&/static/.test(a.css("position"))&&(h=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-h.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0),i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-h.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-h.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=y(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=y(t.helper),h=o.offset(),a=o.outerWidth()-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o})}}),y.ui.plugin.add("resizable","alsoResize",{start:function(){var t=y(this).resizable("instance").options;y(t.alsoResize).each(function(){var t=y(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=y(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,h={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};y(s.alsoResize).each(function(){var t=y(this),s=y(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];y.each(e,function(t,e){var i=(s[e]||0)+(h[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){y(this).removeData("ui-resizable-alsoresize")}}),y.ui.plugin.add("resizable","ghost",{start:function(){var t=y(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==y.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=y(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=y(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),y.ui.plugin.add("resizable","grid",{resize:function(){var t,e=y(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,h=e.axis,a="number"==typeof i.grid?[i.grid,i.grid]:i.grid,r=a[0]||1,l=a[1]||1,u=Math.round((s.width-n.width)/r)*r,p=Math.round((s.height-n.height)/l)*l,d=n.width+u,c=n.height+p,f=i.maxWidth&&i.maxWidthd,s=i.minHeight&&i.minHeight>c;i.grid=a,m&&(d+=r),s&&(c+=l),f&&(d-=r),g&&(c-=l),/^(se|s|e)$/.test(h)?(e.size.width=d,e.size.height=c):/^(ne)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.top=o.top-p):/^(sw)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.left=o.left-u):((c-l<=0||d-r<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file diff --git a/docs/unstable/menu.js b/docs/unstable/menu.js new file mode 100644 index 0000000..717761d --- /dev/null +++ b/docs/unstable/menu.js @@ -0,0 +1,134 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { + function makeTree(data,relPath) { + let result=''; + if ('children' in data) { + result+='
    '; + for (let i in data.children) { + let url; + const link = data.children[i].url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + } else { + url = relPath+link; + } + result+='
  • '+ + data.children[i].text+''+ + makeTree(data.children[i],relPath)+'
  • '; + } + result+='
'; + } + return result; + } + let searchBoxHtml; + if (searchEnabled) { + if (serverSide) { + searchBoxHtml='
'+ + '
'+ + '
 '+ + ''+ + '
'+ + '
'+ + '
'+ + '
'; + } else { + searchBoxHtml='
'+ + ''+ + ' '+ + ''+ + ''+ + ''+ + ''+ + ''+ + '
'; + } + } + + $('#main-nav').before('
'+ + ''+ + ''+ + '
'); + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchBoxHtml) { + $('#main-menu').append('
  • '); + } + const $mainMenuState = $('#main-menu-state'); + let prevWidth = 0; + if ($mainMenuState.length) { + const initResizableIfExists = function() { + if (typeof initResizable==='function') initResizable(); + } + // animate mobile menu + $mainMenuState.change(function() { + const $menu = $('#main-menu'); + let options = { duration: 250, step: initResizableIfExists }; + if (this.checked) { + options['complete'] = () => $menu.css('display', 'block'); + $menu.hide().slideDown(options); + } else { + options['complete'] = () => $menu.css('display', 'none'); + $menu.show().slideUp(options); + } + }); + // set default menu visibility + const resetState = function() { + const $menu = $('#main-menu'); + const newWidth = $(window).outerWidth(); + if (newWidth!=prevWidth) { + if ($(window).outerWidth()<768) { + $mainMenuState.prop('checked',false); $menu.hide(); + $('#searchBoxPos1').html(searchBoxHtml); + $('#searchBoxPos2').hide(); + } else { + $menu.show(); + $('#searchBoxPos1').empty(); + $('#searchBoxPos2').html(searchBoxHtml); + $('#searchBoxPos2').show(); + } + if (typeof searchBox!=='undefined') { + searchBox.CloseResultsWindow(); + } + prevWidth = newWidth; + } + } + $(window).ready(function() { resetState(); initResizableIfExists(); }); + $(window).resize(resetState); + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/docs/unstable/menudata.js b/docs/unstable/menudata.js new file mode 100644 index 0000000..2649bba --- /dev/null +++ b/docs/unstable/menudata.js @@ -0,0 +1,79 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Installation",url:"installation.html",children:[ +{text:"Dependencies",url:"installation.html#dependencies"}, +{text:"Installation steps",url:"installation.html#install_steps"}, +{text:"Versions",url:"installation.html#versions"}, +{text:"Custom CMake options",url:"installation.html#cmake_options"}]}, +{text:"Integration in C++ projects",url:"integration.html",children:[ +{text:"CMake",url:"integration.html#cmake",children:[ +{text:"FetchContent",url:"integration.html#fetch"}, +{text:"find_package",url:"integration.html#find_package"}, +{text:"add_subdirectory",url:"integration.html#add_sub"}]}, +{text:"Other",url:"integration.html#other"}]}, +{text:"Examples",url:"examples.html",children:[ +{text:"Compiling the examples",url:"examples.html#compiling"}, +{text:"Example 1: Comparison with std ranges",url:"ex1.html"}]}, +{text:"API Documentation",url:"documentation.html",children:[ +{text:"Range adapting functions",url:"group__range__adapting__functions.html",children:[ +{text:"enumerate",url:"group__range__adapting__functions.html#ga2fb6627d7acfb88befe857406a77fa41"}, +{text:"make_product",url:"group__range__adapting__functions.html#gada42b52534da5f212adeff038ed19025"}, +{text:"product",url:"group__range__adapting__functions.html#gaf96111e6c12335ab924bc9a337f96954"}, +{text:"slice",url:"group__range__adapting__functions.html#ga0fab50176cc3df12cd96bbdf829d7e6f"}, +{text:"stride",url:"group__range__adapting__functions.html#gae0865cb967e162fe889c670bceb76e4f"}, +{text:"transform",url:"group__range__adapting__functions.html#ga7b31d5cff96c3dd4a24cf8a63e4f41a7"}, +{text:"zip",url:"group__range__adapting__functions.html#gaf7196a84296d770614fc47322e4ae8cd"}]}, +{text:"Adapted ranges",url:"group__adapted__ranges.html",children:[ +{text:"enumerated",url:"structitertools_1_1detail_1_1enumerated.html"}, +{text:"multiplied",url:"structitertools_1_1detail_1_1multiplied.html"}, +{text:"sliced",url:"structitertools_1_1detail_1_1sliced.html"}, +{text:"strided",url:"structitertools_1_1detail_1_1strided.html"}, +{text:"transformed",url:"structitertools_1_1detail_1_1transformed.html"}, +{text:"zipped",url:"structitertools_1_1detail_1_1zipped.html"}]}, +{text:"Range iterators",url:"group__range__iterators.html",children:[ +{text:"enum_iter",url:"structitertools_1_1detail_1_1enum__iter.html"}, +{text:"prod_iter",url:"structitertools_1_1detail_1_1prod__iter.html"}, +{text:"stride_iter",url:"structitertools_1_1detail_1_1stride__iter.html"}, +{text:"transform_iter",url:"structitertools_1_1detail_1_1transform__iter.html"}, +{text:"zip_iter",url:"structitertools_1_1detail_1_1zip__iter.html"}]}, +{text:"Integer range",url:"group__integer__range.html",children:[ +{text:"foreach",url:"group__integer__range.html#ga6ca936493fdef081fcc8d718a1951124"}, +{text:"range",url:"classitertools_1_1range.html",children:[ +{text:"all_t",url:"structitertools_1_1range_1_1all__t.html"}, +{text:"const_iterator",url:"structitertools_1_1range_1_1const__iterator.html"}]}, +{text:"product_range",url:"group__integer__range.html#ga54acf549a00cac8dc2a4bbeb6f7b13ad"}]}, +{text:"Utilities",url:"group__utilities.html",children:[ +{text:"chunk_range",url:"group__utilities.html#gaaab750a8b80fe5326464d04ade5f072c"}, +{text:"distance",url:"group__utilities.html#gac0fa2fb9ac9b6525d934afa733f1104e"}, +{text:"iterator_facade",url:"structitertools_1_1iterator__facade_3_01Iter_00_01Value_00_01std_1_1forward__iterator__tag_00_01Reference_00_01Difference_01_4.html"}, +{text:"make_sentinel",url:"group__utilities.html#ga90e665b48c5bfe5f1b7590b20efdacb1"}, +{text:"make_vector_from_range",url:"group__utilities.html#ga8aa90a982e5cb521f6cdfbb11e6cb459"}, +{text:"omp_chunk",url:"group__utilities.html#ga1ddd62d4c0005b280ac89edc54ece3f4"}, +{text:"sentinel_t",url:"structitertools_1_1sentinel__t.html"}]}, +{text:"File List",url:"files.html"}]}, +{text:"Changelog",url:"changelog.html"}, +{text:"Issues",url:"issues.html"}]} diff --git a/docs/unstable/minus.svg b/docs/unstable/minus.svg new file mode 100644 index 0000000..f70d0c1 --- /dev/null +++ b/docs/unstable/minus.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/docs/unstable/minusd.svg b/docs/unstable/minusd.svg new file mode 100644 index 0000000..5f8e879 --- /dev/null +++ b/docs/unstable/minusd.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/docs/unstable/nav_f.png b/docs/unstable/nav_f.png new file mode 100644 index 0000000..72a58a5 Binary files /dev/null and b/docs/unstable/nav_f.png differ diff --git a/docs/unstable/nav_fd.png b/docs/unstable/nav_fd.png new file mode 100644 index 0000000..032fbdd Binary files /dev/null and b/docs/unstable/nav_fd.png differ diff --git a/docs/unstable/nav_g.png b/docs/unstable/nav_g.png new file mode 100644 index 0000000..2093a23 Binary files /dev/null and b/docs/unstable/nav_g.png differ diff --git a/docs/unstable/nav_h.png b/docs/unstable/nav_h.png new file mode 100644 index 0000000..33389b1 Binary files /dev/null and b/docs/unstable/nav_h.png differ diff --git a/docs/unstable/nav_hd.png b/docs/unstable/nav_hd.png new file mode 100644 index 0000000..de80f18 Binary files /dev/null and b/docs/unstable/nav_hd.png differ diff --git a/docs/unstable/navtree.css b/docs/unstable/navtree.css new file mode 100644 index 0000000..6b1e5e4 --- /dev/null +++ b/docs/unstable/navtree.css @@ -0,0 +1,149 @@ +#nav-tree .children_ul { + margin:0; + padding:4px; +} + +#nav-tree ul { + list-style:none outside none; + margin:0px; + padding:0px; +} + +#nav-tree li { + white-space:nowrap; + margin:0px; + padding:0px; +} + +#nav-tree .plus { + margin:0px; +} + +#nav-tree .selected { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: white; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +#nav-tree .selected .arrow { + color: #9CAFD4; + text-shadow: none; +} + +#nav-tree img { + margin:0px; + padding:0px; + border:0px; + vertical-align: middle; +} + +#nav-tree a { + text-decoration:none; + padding:0px; + margin:0px; +} + +#nav-tree .label { + margin:0px; + padding:0px; + font: 12px 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +} + +#nav-tree .label a { + padding:2px; +} + +#nav-tree .selected a { + text-decoration:none; + color:white; +} + +#nav-tree .children_ul { + margin:0px; + padding:0px; +} + +#nav-tree .item { + margin:0px; + padding:0px; +} + +#nav-tree { + padding: 0px 0px; + font-size:14px; + overflow:auto; +} + +#doc-content { + overflow:auto; + display:block; + padding:0px; + margin:0px; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#side-nav { + padding:0 6px 0 0; + margin: 0px; + display:block; + position: absolute; + left: 0px; + width: $width; + overflow : hidden; +} + +.ui-resizable .ui-resizable-handle { + display:block; +} + +.ui-resizable-e { + background-image:url('splitbar.png'); + background-size:100%; + background-repeat:repeat-y; + background-attachment: scroll; + cursor:ew-resize; + height:100%; + right:0; + top:0; + width:6px; +} + +.ui-resizable-handle { + display:none; + font-size:0.1px; + position:absolute; + z-index:1; +} + +#nav-tree-contents { + margin: 6px 0px 0px 0px; +} + +#nav-tree { + background-repeat:repeat-x; + background-color: #F9FAFC; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#nav-sync { + position:absolute; + top:5px; + right:24px; + z-index:0; +} + +#nav-sync img { + opacity:0.3; +} + +#nav-sync img:hover { + opacity:0.9; +} + +@media print +{ + #nav-tree { display: none; } + div.ui-resizable-handle { display: none; position: relative; } +} + diff --git a/docs/unstable/navtree.js b/docs/unstable/navtree.js new file mode 100644 index 0000000..884b79b --- /dev/null +++ b/docs/unstable/navtree.js @@ -0,0 +1,482 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +function initNavTree(toroot,relpath) { + let navTreeSubIndices = []; + const ARROW_DOWN = '▼'; + const ARROW_RIGHT = '►'; + const NAVPATH_COOKIE_NAME = ''+'navpath'; + + const getData = function(varName) { + const i = varName.lastIndexOf('/'); + const n = i>=0 ? varName.substring(i+1) : varName; + return eval(n.replace(/-/g,'_')); + } + + const stripPath = function(uri) { + return uri.substring(uri.lastIndexOf('/')+1); + } + + const stripPath2 = function(uri) { + const i = uri.lastIndexOf('/'); + const s = uri.substring(i+1); + const m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/); + return m ? uri.substring(i-6) : s; + } + + const hashValue = function() { + return $(location).attr('hash').substring(1).replace(/[^\w-]/g,''); + } + + const hashUrl = function() { + return '#'+hashValue(); + } + + const pathName = function() { + return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;()]/g, ''); + } + + const storeLink = function(link) { + if (!$("#nav-sync").hasClass('sync')) { + Cookie.writeSetting(NAVPATH_COOKIE_NAME,link,0); + } + } + + const deleteLink = function() { + Cookie.eraseSetting(NAVPATH_COOKIE_NAME); + } + + const cachedLink = function() { + return Cookie.readSetting(NAVPATH_COOKIE_NAME,''); + } + + const getScript = function(scriptName,func) { + const head = document.getElementsByTagName("head")[0]; + const script = document.createElement('script'); + script.id = scriptName; + script.type = 'text/javascript'; + script.onload = func; + script.src = scriptName+'.js'; + head.appendChild(script); + } + + const createIndent = function(o,domNode,node) { + let level=-1; + let n = node; + while (n.parentNode) { level++; n=n.parentNode; } + if (node.childrenData) { + const imgNode = document.createElement("span"); + imgNode.className = 'arrow'; + imgNode.style.paddingLeft=(16*level).toString()+'px'; + imgNode.innerHTML=ARROW_RIGHT; + node.plus_img = imgNode; + node.expandToggle = document.createElement("a"); + node.expandToggle.href = "javascript:void(0)"; + node.expandToggle.onclick = function() { + if (node.expanded) { + $(node.getChildrenUL()).slideUp("fast"); + node.plus_img.innerHTML=ARROW_RIGHT; + node.expanded = false; + } else { + expandNode(o, node, false, true); + } + } + node.expandToggle.appendChild(imgNode); + domNode.appendChild(node.expandToggle); + } else { + let span = document.createElement("span"); + span.className = 'arrow'; + span.style.width = 16*(level+1)+'px'; + span.innerHTML = ' '; + domNode.appendChild(span); + } + } + + let animationInProgress = false; + + const gotoAnchor = function(anchor,aname) { + let pos, docContent = $('#doc-content'); + let ancParent = $(anchor.parent()); + if (ancParent.hasClass('memItemLeft') || ancParent.hasClass('memtitle') || + ancParent.hasClass('fieldname') || ancParent.hasClass('fieldtype') || + ancParent.is(':header')) { + pos = ancParent.position().top; + } else if (anchor.position()) { + pos = anchor.position().top; + } + if (pos) { + const dcOffset = docContent.offset().top; + const dcHeight = docContent.height(); + const dcScrHeight = docContent[0].scrollHeight + const dcScrTop = docContent.scrollTop(); + let dist = Math.abs(Math.min(pos-dcOffset,dcScrHeight-dcHeight-dcScrTop)); + animationInProgress = true; + docContent.animate({ + scrollTop: pos + dcScrTop - dcOffset + },Math.max(50,Math.min(500,dist)),function() { + window.location.href=aname; + animationInProgress=false; + }); + } + } + + const newNode = function(o, po, text, link, childrenData, lastNode) { + const node = { + children : [], + childrenData : childrenData, + depth : po.depth + 1, + relpath : po.relpath, + isLast : lastNode, + li : document.createElement("li"), + parentNode : po, + itemDiv : document.createElement("div"), + labelSpan : document.createElement("span"), + label : document.createTextNode(text), + expanded : false, + childrenUL : null, + getChildrenUL : function() { + if (!this.childrenUL) { + this.childrenUL = document.createElement("ul"); + this.childrenUL.className = "children_ul"; + this.childrenUL.style.display = "none"; + this.li.appendChild(node.childrenUL); + } + return node.childrenUL; + }, + }; + + node.itemDiv.className = "item"; + node.labelSpan.className = "label"; + createIndent(o,node.itemDiv,node); + node.itemDiv.appendChild(node.labelSpan); + node.li.appendChild(node.itemDiv); + + const a = document.createElement("a"); + node.labelSpan.appendChild(a); + po.getChildrenUL().appendChild(node.li); + a.appendChild(node.label); + if (link) { + let url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + link = url; + } else { + url = node.relpath+link; + } + a.className = stripPath(link.replace('#',':')); + if (link.indexOf('#')!=-1) { + const aname = '#'+link.split('#')[1]; + const srcPage = stripPath(pathName()); + const targetPage = stripPath(link.split('#')[0]); + a.href = srcPage!=targetPage ? url : aname; + a.onclick = function() { + storeLink(link); + aPPar = $(a).parent().parent(); + if (!aPPar.hasClass('selected')) { + $('.item').removeClass('selected'); + $('.item').removeAttr('id'); + aPPar.addClass('selected'); + aPPar.attr('id','selected'); + } + const anchor = $(aname); + gotoAnchor(anchor,aname); + }; + } else { + a.href = url; + a.onclick = () => storeLink(link); + } + } else if (childrenData != null) { + a.className = "nolink"; + a.href = "javascript:void(0)"; + a.onclick = node.expandToggle.onclick; + } + return node; + } + + const showRoot = function() { + const headerHeight = $("#top").height(); + const footerHeight = $("#nav-path").height(); + const windowHeight = $(window).height() - headerHeight - footerHeight; + (function() { // retry until we can scroll to the selected item + try { + const navtree=$('#nav-tree'); + navtree.scrollTo('#selected',100,{offset:-windowHeight/2}); + } catch (err) { + setTimeout(arguments.callee, 0); + } + })(); + } + + const expandNode = function(o, node, imm, setFocus) { + if (node.childrenData && !node.expanded) { + if (typeof(node.childrenData)==='string') { + const varName = node.childrenData; + getScript(node.relpath+varName,function() { + node.childrenData = getData(varName); + expandNode(o, node, imm, setFocus); + }); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).slideDown("fast"); + node.plus_img.innerHTML = ARROW_DOWN; + node.expanded = true; + if (setFocus) { + $(node.expandToggle).focus(); + } + } + } + } + + const glowEffect = function(n,duration) { + n.addClass('glow').delay(duration).queue(function(next) { + $(this).removeClass('glow');next(); + }); + } + + const highlightAnchor = function() { + const aname = hashUrl(); + const anchor = $(aname); + if (anchor.parent().attr('class')=='memItemLeft') { + let rows = $('.memberdecls tr[class$="'+hashValue()+'"]'); + glowEffect(rows.children(),300); // member without details + } else if (anchor.parent().attr('class')=='fieldname') { + glowEffect(anchor.parent().parent(),1000); // enum value + } else if (anchor.parent().attr('class')=='fieldtype') { + glowEffect(anchor.parent().parent(),1000); // struct field + } else if (anchor.parent().is(":header")) { + glowEffect(anchor.parent(),1000); // section header + } else { + glowEffect(anchor.next(),1000); // normal member + } + gotoAnchor(anchor,aname); + } + + const selectAndHighlight = function(hash,n) { + let a; + if (hash) { + const link=stripPath(pathName())+':'+hash.substring(1); + a=$('.item a[class$="'+link+'"]'); + } + if (a && a.length) { + a.parent().parent().addClass('selected'); + a.parent().parent().attr('id','selected'); + highlightAnchor(); + } else if (n) { + $(n.itemDiv).addClass('selected'); + $(n.itemDiv).attr('id','selected'); + } + let topOffset=5; + if ($('#nav-tree-contents .item:first').hasClass('selected')) { + topOffset+=25; + } + $('#nav-sync').css('top',topOffset+'px'); + showRoot(); + } + + const showNode = function(o, node, index, hash) { + if (node && node.childrenData) { + if (typeof(node.childrenData)==='string') { + const varName = node.childrenData; + getScript(node.relpath+varName,function() { + node.childrenData = getData(varName); + showNode(o,node,index,hash); + }); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).css({'display':'block'}); + node.plus_img.innerHTML = ARROW_DOWN; + node.expanded = true; + const n = node.children[o.breadcrumbs[index]]; + if (index+11 ? '#'+parts[1].replace(/[^\w-]/g,'') : ''; + } + if (hash.match(/^#l\d+$/)) { + const anchor=$('a[name='+hash.substring(1)+']'); + glowEffect(anchor.parent(),1000); // line number + hash=''; // strip line number anchors + } + const url=root+hash; + let i=-1; + while (NAVTREEINDEX[i+1]<=url) i++; + if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath) + } else { + getScript(relpath+'navtreeindex'+i,function() { + navTreeSubIndices[i] = eval('NAVTREEINDEX'+i); + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath); + } + }); + } + } + + const showSyncOff = function(n,relpath) { + n.html(''); + } + + const showSyncOn = function(n,relpath) { + n.html(''); + } + + const o = { + toroot : toroot, + node : { + childrenData : NAVTREE, + children : [], + childrenUL : document.createElement("ul"), + getChildrenUL : function() { return this.childrenUL }, + li : document.getElementById("nav-tree-contents"), + depth : 0, + relpath : relpath, + expanded : false, + isLast : true, + plus_img : document.createElement("span"), + }, + }; + o.node.li.appendChild(o.node.childrenUL); + o.node.plus_img.className = 'arrow'; + o.node.plus_img.innerHTML = ARROW_RIGHT; + + const navSync = $('#nav-sync'); + if (cachedLink()) { + showSyncOff(navSync,relpath); + navSync.removeClass('sync'); + } else { + showSyncOn(navSync,relpath); + } + + navSync.click(() => { + const navSync = $('#nav-sync'); + if (navSync.hasClass('sync')) { + navSync.removeClass('sync'); + showSyncOff(navSync,relpath); + storeLink(stripPath2(pathName())+hashUrl()); + } else { + navSync.addClass('sync'); + showSyncOn(navSync,relpath); + deleteLink(); + } + }); + + navTo(o,toroot,hashUrl(),relpath); + showRoot(); + + $(window).bind('hashchange', () => { + if (window.location.hash && window.location.hash.length>1) { + let a; + if ($(location).attr('hash')) { + const clslink=stripPath(pathName())+':'+hashValue(); + a=$('.item a[class$="'+clslink.replace(/ + + + + + + +TRIQS/itertools: itertools/omp_chunk.hpp File Reference + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    omp_chunk.hpp File Reference
    +
    +
    +
    #include "./itertools.hpp"
    +#include <omp.h>
    +

    Detailed Description

    +

    Provides utilities to distribute a range across OMP threads.

    + +

    Definition in file omp_chunk.hpp.

    +
    +

    Go to the source code of this file.

    + + + + + + +

    +Functions

    template<typename R >
    auto omp_chunk (R &&rg)
     Distribute a range as evenly as possible across all OMP threads.
     
    +
    +
    + + + + diff --git a/docs/unstable/omp__chunk_8hpp.js b/docs/unstable/omp__chunk_8hpp.js new file mode 100644 index 0000000..4226fb7 --- /dev/null +++ b/docs/unstable/omp__chunk_8hpp.js @@ -0,0 +1,4 @@ +var omp__chunk_8hpp = +[ + [ "omp_chunk", "omp__chunk_8hpp.html#ga1ddd62d4c0005b280ac89edc54ece3f4", null ] +]; \ No newline at end of file diff --git a/docs/unstable/omp__chunk_8hpp_source.html b/docs/unstable/omp__chunk_8hpp_source.html new file mode 100644 index 0000000..07508ea --- /dev/null +++ b/docs/unstable/omp__chunk_8hpp_source.html @@ -0,0 +1,171 @@ + + + + + + + +TRIQS/itertools: itertools/omp_chunk.hpp Source File + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    omp_chunk.hpp
    +
    +
    +Go to the documentation of this file.
    1// Copyright (c) 2019-2020 Simons Foundation
    +
    2//
    +
    3// Licensed under the Apache License, Version 2.0 (the "License");
    +
    4// you may not use this file except in compliance with the License.
    +
    5// You may obtain a copy of the License at
    +
    6//
    +
    7// http://www.apache.org/licenses/LICENSE-2.0.txt
    +
    8//
    +
    9// Unless required by applicable law or agreed to in writing, software
    +
    10// distributed under the License is distributed on an "AS IS" BASIS,
    +
    11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +
    12// See the License for the specific language governing permissions and
    +
    13// limitations under the License.
    +
    14//
    +
    15// Authors: Olivier Parcollet, Nils Wentzell
    +
    16
    +
    17/**
    +
    18 * @file
    +
    19 * @brief Provides utilities to distribute a range across OMP threads.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#include "./itertools.hpp"
    +
    25
    +
    26#include <omp.h>
    +
    27
    +
    28namespace itertools {
    +
    29
    +
    30 /**
    +
    31 * @ingroup utilities
    +
    32 * @brief Distribute a range as evenly as possible across all OMP threads.
    +
    33 *
    +
    34 * @details See chunk_range(std::ptrdiff_t, std::ptrdiff_t, long, long) and slice(R &&, std::ptrdiff_t, std::ptrdiff_t) for more details.
    +
    35 *
    +
    36 * @tparam R Range type.
    +
    37 * @param rg Range to chunk.
    +
    38 * @return A detail::sliced range, containing the chunk of the original range that belongs to the current thread.
    +
    39 */
    +
    40 template <typename R> auto omp_chunk(R &&rg) {
    +
    41 auto total_size = itertools::distance(std::cbegin(rg), std::cend(rg));
    +
    42 auto [start_idx, end_idx] = chunk_range(0, total_size, omp_get_num_threads(), omp_get_thread_num());
    +
    43 return itertools::slice(std::forward<R>(rg), start_idx, end_idx);
    +
    44 }
    +
    45
    +
    46} // namespace itertools
    +
    auto omp_chunk(R &&rg)
    Distribute a range as evenly as possible across all OMP threads.
    Definition omp_chunk.hpp:40
    +
    +
    + + + + diff --git a/docs/unstable/open.png b/docs/unstable/open.png new file mode 100644 index 0000000..30f75c7 Binary files /dev/null and b/docs/unstable/open.png differ diff --git a/docs/unstable/plus.svg b/docs/unstable/plus.svg new file mode 100644 index 0000000..0752016 --- /dev/null +++ b/docs/unstable/plus.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/unstable/plusd.svg b/docs/unstable/plusd.svg new file mode 100644 index 0000000..0c65bfe --- /dev/null +++ b/docs/unstable/plusd.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/unstable/product_8hpp.html b/docs/unstable/product_8hpp.html new file mode 100644 index 0000000..9c5a9ba --- /dev/null +++ b/docs/unstable/product_8hpp.html @@ -0,0 +1,159 @@ + + + + + + + +TRIQS/itertools: itertools/product.hpp File Reference + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    product.hpp File Reference
    +
    +
    +
    #include "./iterator_facade.hpp"
    +#include "./sentinel.hpp"
    +#include <cstddef>
    +#include <iterator>
    +#include <tuple>
    +#include <utility>
    +

    Detailed Description

    +

    Provides a range adapting function for multiplying a given number of ranges/views (cartesian product).

    + +

    Definition in file product.hpp.

    +
    +

    Go to the source code of this file.

    + + + + + + + + +

    +Classes

    struct  multiplied< Rs >
     Represents a cartesian product of ranges. More...
     
    struct  prod_iter< EndIters, Iters >
     Iterator for a detail::multiplied (cartesian product) range. More...
     
    + + + + + + + + + + + + + +

    +Functions

    template<typename R , size_t N>
    auto make_product (std::array< R, N > &arr)
     Create a cartesian product range from an array of ranges.
     
    template<typename R , size_t N>
    auto make_product (std::array< R, N > const &arr)
     Const overload of make_product(std::array<R, N> &).
     
    template<typename... Rs>
    detail::multiplied< Rs... > product (Rs &&...rgs)
     Lazy-multiply a given number of ranges by forming their cartesian product.
     
    +
    +
    + + + + diff --git a/docs/unstable/product_8hpp.js b/docs/unstable/product_8hpp.js new file mode 100644 index 0000000..9d9dfa6 --- /dev/null +++ b/docs/unstable/product_8hpp.js @@ -0,0 +1,6 @@ +var product_8hpp = +[ + [ "make_product", "product_8hpp.html#gada42b52534da5f212adeff038ed19025", null ], + [ "make_product", "product_8hpp.html#ga589b528fb3003669ae787d4702aa9165", null ], + [ "product", "product_8hpp.html#gaf96111e6c12335ab924bc9a337f96954", null ] +]; \ No newline at end of file diff --git a/docs/unstable/product_8hpp_source.html b/docs/unstable/product_8hpp_source.html new file mode 100644 index 0000000..832ffc8 --- /dev/null +++ b/docs/unstable/product_8hpp_source.html @@ -0,0 +1,430 @@ + + + + + + + +TRIQS/itertools: itertools/product.hpp Source File + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    product.hpp
    +
    +
    +Go to the documentation of this file.
    1// Copyright (c) 2019-2022 Simons Foundation
    +
    2//
    +
    3// Licensed under the Apache License, Version 2.0 (the "License");
    +
    4// you may not use this file except in compliance with the License.
    +
    5// You may obtain a copy of the License at
    +
    6//
    +
    7// http://www.apache.org/licenses/LICENSE-2.0.txt
    +
    8//
    +
    9// Unless required by applicable law or agreed to in writing, software
    +
    10// distributed under the License is distributed on an "AS IS" BASIS,
    +
    11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +
    12// See the License for the specific language governing permissions and
    +
    13// limitations under the License.
    +
    14//
    +
    15// Authors: Olivier Parcollet, Nils Wentzell, chuffa
    +
    16
    +
    17/**
    +
    18 * @file
    +
    19 * @brief Provides a range adapting function for multiplying a given number of ranges/views (cartesian product).
    +
    20 */
    +
    21
    +
    22#ifndef _ITERTOOLS_PRODUCT_HPP
    +
    23#define _ITERTOOLS_PRODUCT_HPP
    +
    24
    +
    25#include "./iterator_facade.hpp"
    +
    26#include "./sentinel.hpp"
    +
    27
    +
    28#include <cstddef>
    +
    29#include <iterator>
    +
    30#include <tuple>
    +
    31#include <utility>
    +
    32
    +
    33namespace itertools {
    +
    34
    +
    35 /// @cond
    +
    36 // Forward declarations.
    +
    37 namespace detail {
    +
    38 template <typename... Rs> struct multiplied;
    +
    39 }
    +
    40 template <typename... Rs> detail::multiplied<Rs...> product(Rs &&...);
    +
    41 /// @endcond
    +
    42
    +
    43 namespace detail {
    +
    44
    +
    45 /**
    +
    46 * @ingroup range_iterators
    +
    47 * @brief Iterator for a detail::multiplied (cartesian product) range.
    +
    48 *
    +
    49 * @details It stores three tuples of iterators of the original ranges:
    +
    50 * - `its_begin` contains the begin iterators of all ranges
    +
    51 * - `its_end` contains the end iterators of all ranges
    +
    52 * - `its` contains the current iterators of all ranges
    +
    53 *
    +
    54 * Incrementing is done from right to left, i.e. the iterator of the last range is incremented first.
    +
    55 * Once an iterator reaches the end of its range, it is reset to the beginning and the iterator of the
    +
    56 * previous range is incremented once.
    +
    57 * Dereferencing returns a tuple containing the results of dereferencing each iterator.
    +
    58 *
    +
    59 * See itertools::product(Rs &&...rgs) for more details.
    +
    60 *
    +
    61 * @tparam EndIters Tuple type containing the end iterators of all ranges.
    +
    62 * @tparam Iters Iterator types.
    +
    63 */
    +
    64 template <typename EndIters, typename... Iters>
    +
    65 struct prod_iter : iterator_facade<prod_iter<EndIters, Iters...>, std::tuple<typename std::iterator_traits<Iters>::value_type...>> {
    +
    66 /// Tuple containing the begin iterators of the original ranges.
    +
    67 std::tuple<Iters...> its_begin;
    +
    68
    +
    69 /// Tuple containing the end iterators of the original ranges.
    +
    70 EndIters its_end;
    +
    71
    +
    72 /// Tuple containing the current iterators of the original ranges.
    +
    73 std::tuple<Iters...> its = its_begin;
    +
    74
    +
    75 /// Number of original ranges.
    +
    76 static constexpr long Rank = sizeof...(Iters);
    +
    77
    +
    78 /// Default constructor.
    +
    79 prod_iter() = default;
    +
    80
    +
    81 /**
    +
    82 * @brief Construct a product iterator from given begin iterators and end iterators.
    +
    83 *
    +
    84 * @param its_begin Tuple containing begin iterators of the original ranges.
    +
    85 * @param its_end Tuple containing end iterators of the original ranges.
    +
    86 */
    +
    87 prod_iter(std::tuple<Iters...> its_begin, EndIters its_end) : its_begin(std::move(its_begin)), its_end(std::move(its_end)) {}
    +
    88
    +
    89 private:
    +
    90 // Helper function to recursively increment the current iterators.
    +
    91 template <int N> void _increment() {
    +
    92 // increment Nth iterator
    +
    93 ++std::get<N>(its);
    +
    94 // recursively increment previous iterators if necessary
    +
    95 if constexpr (N > 0) {
    +
    96 // if Nth iterator is at its end, reset it to its begin iterator and increment N-1st iterator
    +
    97 if (std::get<N>(its) == std::get<N>(its_end)) {
    +
    98 std::get<N>(its) = std::get<N>(its_begin);
    +
    99 _increment<N - 1>();
    +
    100 }
    +
    101 }
    +
    102 }
    +
    103
    +
    104 public:
    +
    105 /// Increment the iterator by incrementing the current iterators starting with the iterator of the last range.
    +
    106 void increment() { _increment<Rank - 1>(); }
    +
    107
    +
    108 /**
    +
    109 * @brief Equal-to operator for two detail::prod_iter objects.
    +
    110 *
    +
    111 * @param other detail::prod_iter to compare with.
    +
    112 * @return True, if all original iterators are equal.
    +
    113 */
    +
    114 [[nodiscard]] bool operator==(prod_iter const &other) const { return its == other.its; }
    +
    115
    +
    116 /**
    +
    117 * @brief Equal-to operator for a detail::prod_iter and an itertools::sentinel_t.
    +
    118 *
    +
    119 * @details We reach the end of the product range, when the first iterator, i.e. `std::get<0>(its)`, is at its end.
    +
    120 *
    +
    121 * @tparam SentinelIter Iterator type of the sentinel.
    +
    122 * @param s itertools::sentinel_t to compare with.
    +
    123 * @return True, if the first iterator, i.e. `std::get<0>(its)`, is equal to the iterator of the sentinel.
    +
    124 */
    +
    125 template <typename SentinelIter> [[nodiscard]] bool operator==(sentinel_t<SentinelIter> const &s) const { return (s.it == std::get<0>(its)); }
    +
    126
    +
    127 private:
    +
    128 // Helper function to dereference all original iterators.
    +
    129 template <size_t... Is> [[gnu::always_inline]] [[nodiscard]] auto tuple_map_impl(std::index_sequence<Is...>) const {
    +
    130 return std::tuple<decltype(*std::get<Is>(its))...>(*std::get<Is>(its)...);
    +
    131 }
    +
    132
    +
    133 public:
    +
    134 /**
    +
    135 * @brief Dereference the iterator.
    +
    136 * @return Tuple containing the dereferenced values of all original iterators.
    +
    137 */
    +
    138 [[nodiscard]] decltype(auto) dereference() const { return tuple_map_impl(std::index_sequence_for<Iters...>{}); }
    +
    139 };
    +
    140
    +
    141 /**
    +
    142 * @ingroup adapted_ranges
    +
    143 * @brief Represents a cartesian product of ranges.
    +
    144 *
    +
    145 * @details See itertools::product(Rs &&...rgs) for more details.
    +
    146 *
    +
    147 * @tparam Rs Range types.
    +
    148 */
    +
    149 template <typename... Rs> struct multiplied {
    +
    150 /// Tuple containing the original ranges.
    +
    151 std::tuple<Rs...> tu;
    +
    152
    +
    153 /// Iterator type of the product range.
    +
    154 using iterator = prod_iter<std::tuple<decltype(std::end(std::declval<Rs &>()))...>, decltype(std::begin(std::declval<Rs &>()))...>;
    +
    155
    +
    156 /// Const iterator type the product range.
    +
    157 using const_iterator = prod_iter<std::tuple<decltype(std::cend(std::declval<Rs &>()))...>, decltype(std::cbegin(std::declval<Rs &>()))...>;
    +
    158
    +
    159 /**
    +
    160 * @brief Constructs a cartesian product (multiplied) range from the given ranges.
    +
    161 *
    +
    162 * @tparam Us Range types.
    +
    163 * @param rgs Ranges to be multiplied.
    +
    164 */
    +
    165 template <typename... Us> multiplied(Us &&...rgs) : tu{std::forward<Us>(rgs)...} {}
    +
    166
    +
    167 /// Default equal-to operator.
    +
    168 [[nodiscard]] bool operator==(multiplied const &) const = default;
    +
    169
    +
    170 private:
    +
    171 // Helper function to create a detail::prod_iter representing the beginning of the product range.
    +
    172 template <size_t... Is> [[gnu::always_inline]] auto _begin(std::index_sequence<Is...>) {
    +
    173 return iterator{std::make_tuple(std::begin(std::get<Is>(tu))...), std::make_tuple(std::end(std::get<Is>(tu))...)};
    +
    174 }
    +
    175
    +
    176 // Const version of _begin(std::index_sequence<Is...>).
    +
    177 template <size_t... Is> [[gnu::always_inline]] auto _cbegin(std::index_sequence<Is...>) const {
    +
    178 return const_iterator{std::make_tuple(std::cbegin(std::get<Is>(tu))...), std::make_tuple(std::cend(std::get<Is>(tu))...)};
    +
    179 }
    +
    180
    +
    181 public:
    +
    182 /**
    +
    183 * @brief Beginning of the product range.
    +
    184 * @return detail::prod_iter representing the beginning of the product range.
    +
    185 */
    +
    186 [[nodiscard]] iterator begin() noexcept { return _begin(std::index_sequence_for<Rs...>{}); }
    +
    187
    +
    188 /// Const version of begin().
    +
    189 [[nodiscard]] const_iterator cbegin() const noexcept { return _cbegin(std::index_sequence_for<Rs...>{}); }
    +
    190
    +
    191 /// Const overload of begin().
    +
    192 [[nodiscard]] const_iterator begin() const noexcept { return cbegin(); }
    +
    193
    +
    194 /**
    +
    195 * @brief End of the product range.
    +
    196 * @return itertools::sentinel_t containing the end iterator of the first original range, i.e. `std::end(std::get<0>(tu))`.
    +
    197 */
    +
    198 [[nodiscard]] auto end() noexcept { return make_sentinel(std::end(std::get<0>(tu))); }
    +
    199
    +
    200 /// Const version of end().
    +
    201 [[nodiscard]] auto cend() const noexcept { return make_sentinel(std::cend(std::get<0>(tu))); }
    +
    202
    +
    203 /// Const overload of end().
    +
    204 [[nodiscard]] auto end() const noexcept { return cend(); }
    +
    205 };
    +
    206
    +
    207 /// @cond
    +
    208 // Class template argument deduction guide.
    +
    209 template <typename... Rs> multiplied(Rs &&...) -> multiplied<std::decay_t<Rs>...>;
    +
    210
    +
    211 // Helper function to create a product range from a container of ranges.
    +
    212 template <typename C, size_t... Is> [[gnu::always_inline]] [[nodiscard]] auto make_product_impl(C &cont, std::index_sequence<Is...>) {
    +
    213 return product(cont[Is]...);
    +
    214 }
    +
    215 /// @endcond
    +
    216
    +
    217 } // namespace detail
    +
    218
    +
    219 /**
    +
    220 * @addtogroup range_adapting_functions
    +
    221 * @{
    +
    222 */
    +
    223
    +
    224 /**
    +
    225 * @brief Lazy-multiply a given number of ranges by forming their cartesian product.
    +
    226 *
    +
    227 * @details An arbitrary number of ranges are multiplied together into a cartesian product range.
    +
    228 * They are traversed such that the last range is traversed the fastest (see the example below).
    +
    229 * The number of elements in a product range is equal to the product of the sizes of the given ranges.
    +
    230 * This function returns an iterable lazy object, which can be used in range-based for loops:
    +
    231 *
    +
    232 * @code{.cpp}
    +
    233 * std::vector<int> v1 { 1, 2, 3 };
    +
    234 * std::vector<char> v2 { 'a', 'b' };
    +
    235 *
    +
    236 * for (auto [i, c] : product(v1, v2)) {
    +
    237 * std::cout << "(" << i << ", " << c << ")\n";
    +
    238 * }
    +
    239 * @endcode
    +
    240 *
    +
    241 * Output:
    +
    242 *
    +
    243 * ```
    +
    244 * (1, a)
    +
    245 * (1, b)
    +
    246 * (2, a)
    +
    247 * (2, b)
    +
    248 * (3, a)
    +
    249 * (3, b)
    +
    250 * ```
    +
    251 *
    +
    252 * See also <a href="https://en.cppreference.com/w/cpp/ranges/cartesian_product_view">std::ranges::views::cartesian_product</a>.
    +
    253 *
    +
    254 * @tparam Rs Range types.
    +
    255 * @param rgs Ranges to be used.
    +
    256 * @return A product (detail::multiplied) range.
    +
    257 */
    +
    258 template <typename... Rs> [[nodiscard]] detail::multiplied<Rs...> product(Rs &&...rgs) { return {std::forward<Rs>(rgs)...}; }
    +
    259
    +
    260 /**
    +
    261 * @brief Create a cartesian product range from an array of ranges.
    +
    262 *
    +
    263 * @tparam R Range type.
    +
    264 * @tparam N Number of ranges.
    +
    265 * @param arr Array of ranges.
    +
    266 * @return A product (detail::multiplied) range from the ranges in the array.
    +
    267 */
    +
    268 template <typename R, size_t N> [[nodiscard]] auto make_product(std::array<R, N> &arr) {
    +
    269 return detail::make_product_impl(arr, std::make_index_sequence<N>{});
    +
    270 }
    +
    271
    +
    272 /// Const overload of make_product(std::array<R, N> &).
    +
    273 template <typename R, size_t N> [[nodiscard]] auto make_product(std::array<R, N> const &arr) {
    +
    274 return detail::make_product_impl(arr, std::make_index_sequence<N>{});
    +
    275 }
    +
    276
    +
    277 /** @} */
    +
    278
    +
    279} // namespace itertools
    +
    280
    +
    281#endif // _ITERTOOLS_PRODUCT_HPP
    +
    auto make_product(std::array< R, N > const &arr)
    Const overload of make_product(std::array<R, N> &).
    Definition product.hpp:273
    +
    auto make_product(std::array< R, N > &arr)
    Create a cartesian product range from an array of ranges.
    Definition product.hpp:268
    +
    detail::multiplied< Rs... > product(Rs &&...rgs)
    Lazy-multiply a given number of ranges by forming their cartesian product.
    Definition product.hpp:258
    +
    Represents a cartesian product of ranges.
    Definition product.hpp:149
    +
    auto end() const noexcept
    Const overload of end().
    Definition product.hpp:204
    +
    const_iterator begin() const noexcept
    Const overload of begin().
    Definition product.hpp:192
    +
    auto cend() const noexcept
    Const version of end().
    Definition product.hpp:201
    +
    std::tuple< Rs... > tu
    Tuple containing the original ranges.
    Definition product.hpp:151
    +
    bool operator==(multiplied const &) const =default
    Default equal-to operator.
    +
    iterator begin() noexcept
    Beginning of the product range.
    Definition product.hpp:186
    +
    auto end() noexcept
    End of the product range.
    Definition product.hpp:198
    +
    const_iterator cbegin() const noexcept
    Const version of begin().
    Definition product.hpp:189
    +
    multiplied(Us &&...rgs)
    Constructs a cartesian product (multiplied) range from the given ranges.
    Definition product.hpp:165
    +
    Iterator for a detail::multiplied (cartesian product) range.
    Definition product.hpp:65
    +
    std::tuple< Iters... > its
    Tuple containing the current iterators of the original ranges.
    Definition product.hpp:73
    +
    prod_iter()=default
    Default constructor.
    +
    std::tuple< Iters... > its_begin
    Tuple containing the begin iterators of the original ranges.
    Definition product.hpp:67
    +
    bool operator==(prod_iter const &other) const
    Equal-to operator for two detail::prod_iter objects.
    Definition product.hpp:114
    +
    bool operator==(sentinel_t< SentinelIter > const &s) const
    Equal-to operator for a detail::prod_iter and an itertools::sentinel_t.
    Definition product.hpp:125
    +
    EndIters its_end
    Tuple containing the end iterators of the original ranges.
    Definition product.hpp:70
    +
    prod_iter(std::tuple< Iters... > its_begin, EndIters its_end)
    Construct a product iterator from given begin iterators and end iterators.
    Definition product.hpp:87
    +
    decltype(auto) dereference() const
    Dereference the iterator.
    Definition product.hpp:138
    +
    static constexpr long Rank
    Number of original ranges.
    Definition product.hpp:76
    +
    void increment()
    Increment the iterator by incrementing the current iterators starting with the iterator of the last r...
    Definition product.hpp:106
    +
    Generic sentinel type that can be used to mark the end of a range.
    Definition sentinel.hpp:38
    +
    +
    + + + + diff --git a/docs/unstable/range_8hpp.html b/docs/unstable/range_8hpp.html new file mode 100644 index 0000000..462b21a --- /dev/null +++ b/docs/unstable/range_8hpp.html @@ -0,0 +1,167 @@ + + + + + + + +TRIQS/itertools: itertools/range.hpp File Reference + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    range.hpp File Reference
    +
    +
    +
    #include "./product.hpp"
    +#include <algorithm>
    +#include <array>
    +#include <iostream>
    +#include <iterator>
    +#include <stdexcept>
    +#include <utility>
    +

    Detailed Description

    +

    Provides an integer range similar to Python's range.

    + +

    Definition in file range.hpp.

    +
    +

    Go to the source code of this file.

    + + + + + + + + + + + +

    +Classes

    class  range
     A lazy range of integers that mimics a Python range. More...
     
    struct  range::all_t
     Denote a full range at compile-time. More...
     
    struct  range::const_iterator
     Const iterator type for itertools::range. More...
     
    + + + + + + + + + + + + + + + + + +

    +Functions

    template<typename F >
    void foreach (range const &rg, F &&f)
     Apply a function to every element of an integer itertools::range.
     
    template<typename... Is, typename EnableIf = std::enable_if_t<(std::is_integral_v<Is> and ...), int>>
    auto product_range (Is... is)
     Create a cartesian product range of integer ranges from given integers.
     
    template<typename I , size_t N, typename EnableIf = std::enable_if_t<std::is_integral_v<I>, int>>
    auto product_range (std::array< I, N > const &idx_arr)
     Create a cartesian product range of integer ranges from an array of integers.
     
    template<typename... Is, typename EnableIf = std::enable_if_t<(std::is_integral_v<Is> and ...), int>>
    auto product_range (std::tuple< Is... > const &idx_tpl)
     Create a cartesian product range of integer ranges from a tuple of integers.
     
    +
    +
    + + + + diff --git a/docs/unstable/range_8hpp.js b/docs/unstable/range_8hpp.js new file mode 100644 index 0000000..35cbd68 --- /dev/null +++ b/docs/unstable/range_8hpp.js @@ -0,0 +1,7 @@ +var range_8hpp = +[ + [ "foreach", "range_8hpp.html#ga6ca936493fdef081fcc8d718a1951124", null ], + [ "product_range", "range_8hpp.html#ga54acf549a00cac8dc2a4bbeb6f7b13ad", null ], + [ "product_range", "range_8hpp.html#gaa4b862940e2bc4d095c040222e0dda19", null ], + [ "product_range", "range_8hpp.html#gae77e13af5d2614644b8596660f282b7f", null ] +]; \ No newline at end of file diff --git a/docs/unstable/range_8hpp_source.html b/docs/unstable/range_8hpp_source.html new file mode 100644 index 0000000..e7b7cf7 --- /dev/null +++ b/docs/unstable/range_8hpp_source.html @@ -0,0 +1,568 @@ + + + + + + + +TRIQS/itertools: itertools/range.hpp Source File + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    range.hpp
    +
    +
    +Go to the documentation of this file.
    1// Copyright (c) 2019-2022 Simons Foundation
    +
    2//
    +
    3// Licensed under the Apache License, Version 2.0 (the "License");
    +
    4// you may not use this file except in compliance with the License.
    +
    5// You may obtain a copy of the License at
    +
    6//
    +
    7// http://www.apache.org/licenses/LICENSE-2.0.txt
    +
    8//
    +
    9// Unless required by applicable law or agreed to in writing, software
    +
    10// distributed under the License is distributed on an "AS IS" BASIS,
    +
    11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +
    12// See the License for the specific language governing permissions and
    +
    13// limitations under the License.
    +
    14//
    +
    15// Authors: Olivier Parcollet, Nils Wentzell, chuffa
    +
    16
    +
    17/**
    +
    18 * @file
    +
    19 * @brief Provides an integer range similar to Python's range.
    +
    20 */
    +
    21
    +
    22#ifndef _ITERTOOLS_RANGE_HPP
    +
    23#define _ITERTOOLS_RANGE_HPP
    +
    24
    +
    25#include "./product.hpp"
    +
    26
    +
    27#include <algorithm>
    +
    28#include <array>
    +
    29#include <iostream>
    +
    30#include <iterator>
    +
    31#include <stdexcept>
    +
    32#include <utility>
    +
    33
    +
    34namespace itertools {
    +
    35
    +
    36 /**
    +
    37 * @addtogroup integer_range
    +
    38 * @{
    +
    39 */
    +
    40
    +
    41 /**
    +
    42 * @brief A lazy range of integers that mimics a Python range.
    +
    43 *
    +
    44 * @details It stores the first value, the last value (excluded) and the step size between two indices.
    +
    45 * By default, the step size is set to 1. This function returns an iterable lazy object, which can be
    +
    46 * used in range-based for loops:
    +
    47 *
    +
    48 * @code{.cpp}
    +
    49 * for (auto i : range(5)) {
    +
    50 * std::cout << i << " ";
    +
    51 * }
    +
    52 * std::cout << "\n";
    +
    53
    +
    54 * for (auto i : range(-2, 1)) {
    +
    55 * std::cout << i << " ";
    +
    56 * }
    +
    57 * std::cout << "\n";
    +
    58
    +
    59 * for (auto i : range(10, 3, -2)) {
    +
    60 * std::cout << i << " ";
    +
    61 * }
    +
    62 * std::cout << "\n";
    +
    63
    +
    64 * for (auto i : range(0, 10, -1)) {
    +
    65 * std::cout << i << " "; // empty
    +
    66 * }
    +
    67 * @endcode
    +
    68 *
    +
    69 * Output:
    +
    70 *
    +
    71 * ```
    +
    72 * 0 1 2 3 4
    +
    73 * -2 -1 0
    +
    74 * 10 8 6 4
    +
    75 * ```
    +
    76 *
    +
    77 * See also <a href="https://en.cppreference.com/w/cpp/ranges/iota_view">std::ranges::views::iota</a>.
    +
    78 */
    +
    79 class range {
    +
    80 // First value of the range.
    +
    81 long first_ = 0;
    +
    82
    +
    83 // Last value of the range (excluded).
    +
    84 long last_ = -1;
    +
    85
    +
    86 // Number of integers between two elements of the range.
    +
    87 long step_ = 1;
    +
    88
    +
    89 public:
    +
    90 /**
    +
    91 * @ingroup integer_range
    +
    92 * @brief Denote a full range at compile-time.
    +
    93 * @details Can be used for accessing slices of multi-dimensional arrays.
    +
    94 */
    +
    95 struct all_t {};
    +
    96
    +
    97 /// See range::all_t.
    +
    98 static inline constexpr all_t all = {};
    +
    99
    +
    100 /// Integer type for backward compatibility.
    +
    101 using index_t = long;
    +
    102
    +
    103 /**
    +
    104 * @brief Default constructor.
    +
    105 * @deprecated Use range::range(long, long) or range::range(long, long, long) instead.
    +
    106 */
    +
    107 [[deprecated("range default construction deprecated. Use range::all for full range in slicing operation")]] range() = default;
    +
    108
    +
    109 /**
    +
    110 * @brief Construct a range with a step size of 1 and a given first and last (excluded) value.
    +
    111 *
    +
    112 * @param first First value of the range.
    +
    113 * @param last Last value of the range (excluded).
    +
    114 */
    +
    115 range(long first, long last) noexcept : first_(first), last_(last) {}
    +
    116
    +
    117 /**
    +
    118 * @brief Construct a range with a given step size and a given first and last (excluded) value.
    +
    119 *
    +
    120 * @details Throws an exception if the step size is zero.
    +
    121 *
    +
    122 * @param first First value of the range.
    +
    123 * @param last Last value of the range (excluded).
    +
    124 * @param step Number of integers between two elements of the range.
    +
    125 */
    +
    126 range(long first, long last, long step) : first_(first), last_(last), step_(step) {
    +
    127 if (step_ == 0) throw std::runtime_error("Step-size cannot be zero in construction of integer range");
    +
    128 }
    +
    129
    +
    130 /**
    +
    131 * @brief Construct a range with a step size of 1, a first value set to 0 and a given last value (excluded).
    +
    132 * @param last Last value of the range (excluded).
    +
    133 */
    +
    134 explicit range(long last) : range(0, last, 1) {}
    +
    135
    +
    136 /// Default equal-to operator.
    +
    137 [[nodiscard]] bool operator==(range const &) const = default;
    +
    138
    +
    139 /// Get first value of the range.
    +
    140 [[nodiscard]] long first() const { return first_; }
    +
    141
    +
    142 /// Get last value of the range (excluded).
    +
    143 [[nodiscard]] long last() const { return last_; }
    +
    144
    +
    145 /// Get step size between two elements of the range.
    +
    146 [[nodiscard]] long step() const { return step_; }
    +
    147
    +
    148 /// Get number of elements in the range.
    +
    149 [[nodiscard]] long size() const { return std::max(0l, (last_ + step_ - (step_ > 0 ? 1 : -1) - first_) / step_); }
    +
    150
    +
    151 /**
    +
    152 * @brief Shift the whole range by a given amount.
    +
    153 *
    +
    154 * @details Simply adds the given shift to the first and last value of the range, while keeping
    +
    155 * the same step size.
    +
    156 *
    +
    157 * @param shift Amount to shift the range by.
    +
    158 * @return Shifted range.
    +
    159 */
    +
    160 [[nodiscard]] range operator+(long shift) const { return {first_ + shift, last_ + shift, step_}; }
    +
    161
    +
    162 /**
    +
    163 * @brief Write the range details to std::ostream.
    +
    164 *
    +
    165 * @param os std::ostream object.
    +
    166 * @param rg range object.
    +
    167 * @return Reference to os.
    +
    168 */
    +
    169 friend inline std::ostream &operator<<(std::ostream &os, const range &rg) {
    +
    170 os << "range(" << rg.first() << "," << rg.last() << "," << rg.step() << ")";
    +
    171 return os;
    +
    172 }
    +
    173
    +
    174 /// Const iterator type for itertools::range.
    + +
    176 /// Current value.
    +
    177 long pos;
    +
    178
    +
    179 /// Last value of the range (excluded).
    +
    180 long last;
    +
    181
    +
    182 /// Step size.
    +
    183 long step;
    +
    184
    +
    185 /// Value type.
    +
    186 using value_type = long;
    +
    187
    +
    188 /// Iterator category.
    +
    189 using iterator_category = std::forward_iterator_tag;
    +
    190
    +
    191 /// Pointer type.
    +
    192 using pointer = value_type *;
    +
    193
    +
    194 /// Difference type.
    +
    195 using difference_type = std::ptrdiff_t;
    +
    196
    +
    197 /// Reference type.
    +
    198 using reference = value_type const &;
    +
    199
    +
    200 /**
    +
    201 * @brief Pre-increment operator increments the current value by the step size.
    +
    202 * @return Reference to the incremented iterator.
    +
    203 */
    +
    204 const_iterator &operator++() noexcept {
    +
    205 pos += step;
    +
    206 return *this;
    +
    207 }
    +
    208
    +
    209 /**
    +
    210 * @brief Post-increment operator increments the current value by the step size.
    +
    211 * @return Copy of the iterator before incrementing.
    +
    212 */
    +
    213 const_iterator operator++(int) noexcept {
    +
    214 const_iterator c = *this;
    +
    215 pos += step;
    +
    216 return c;
    +
    217 }
    +
    218
    +
    219 /**
    +
    220 * @brief Has the iterator reached the end of the range?
    +
    221 * @return True, if the current value of the iterator is >= the last value of the range for positive step size or
    +
    222 * if the current value of the iterator is <= the last value of the range for negative step size.
    +
    223 */
    +
    224 [[nodiscard]] bool atEnd() const noexcept { return step > 0 ? pos >= last : pos <= last; }
    +
    225
    +
    226 /**
    +
    227 * @brief Equal-to operator for two iterators.
    +
    228 *
    +
    229 * @param other Iterator to compare with.
    +
    230 * @return True, if the current values of both iterators are equal or both iterators are at the end of the range.
    +
    231 */
    +
    232 [[nodiscard]] bool operator==(const_iterator const &other) const noexcept {
    +
    233 return (other.pos == this->pos) || (other.atEnd() && this->atEnd());
    +
    234 }
    +
    235
    +
    236 /**
    +
    237 * @brief Not-equal-to operator for two iterators.
    +
    238 *
    +
    239 * @param other Iterator to compare with.
    +
    240 * @return True, if the iterators are not equal.
    +
    241 */
    +
    242 [[nodiscard]] bool operator!=(const_iterator const &other) const noexcept { return (!operator==(other)); }
    +
    243
    +
    244 /**
    +
    245 * @brief Dereference operator.
    +
    246 * @return Current value of the iterator.
    +
    247 */
    +
    248 [[nodiscard]] long operator*() const noexcept { return pos; }
    +
    249
    +
    250 /**
    +
    251 * @brief Member access operator.
    +
    252 * @return Current value of the iterator.
    +
    253 */
    +
    254 [[nodiscard]] long operator->() const noexcept { return operator*(); }
    +
    255 };
    +
    256
    +
    257 /**
    +
    258 * @brief Beginning of the integer range.
    +
    259 * @return Iterator with its current value set to the first value of the range.
    +
    260 */
    +
    261 [[nodiscard]] const_iterator cbegin() const noexcept { return {first_, last_, step_}; }
    +
    262
    +
    263 /// The same as cbegin().
    +
    264 [[nodiscard]] const_iterator begin() const noexcept { return {first_, last_, step_}; }
    +
    265
    +
    266 /**
    +
    267 * @brief End of the range.
    +
    268 * @return Iterator with its current value set to the excluded last value of the range.
    +
    269 */
    +
    270 [[nodiscard]] const_iterator cend() const noexcept { return {last_, last_, step_}; }
    +
    271
    +
    272 /// The same as cend().
    +
    273 [[nodiscard]] const_iterator end() const noexcept { return {last_, last_, step_}; }
    +
    274 };
    +
    275
    +
    276 /**
    +
    277 * @brief Create a cartesian product range of integer ranges from given integers.
    +
    278 *
    +
    279 * @details The given integers specify the excluded last values of the individual itertools::range objects.
    +
    280 * Each range starts at 0 and has a step size of 1.
    +
    281 *
    +
    282 * @code{.cpp}
    +
    283 * for (auto [i1, i2] : product_range(2, 3)) {
    +
    284 * std::cout << "(" << i1 << ", " << i2 << ")\n";
    +
    285 * }
    +
    286 * @endcode
    +
    287 *
    +
    288 * Output:
    +
    289 *
    +
    290 * ```
    +
    291 * (0, 0)
    +
    292 * (0, 1)
    +
    293 * (0, 2)
    +
    294 * (1, 0)
    +
    295 * (1, 1)
    +
    296 * (1, 2)
    +
    297 * ```
    +
    298 *
    +
    299 * @tparam Is Integer types.
    +
    300 * @param is Last values of the integer ranges (excluded).
    +
    301 * @return Product (detail::multiplied) range of integer ranges. See itertools::product and itertools::range.
    +
    302 */
    +
    303 template <typename... Is, typename EnableIf = std::enable_if_t<(std::is_integral_v<Is> and ...), int>> [[nodiscard]] auto product_range(Is... is) {
    +
    304 return product(range(is)...);
    +
    305 }
    +
    306
    +
    307 /// @cond
    +
    308 namespace detail {
    +
    309
    +
    310 // Helper function to create a product range of integer ranges from a tuple or an array.
    +
    311 template <typename T, size_t... Is> [[gnu::always_inline]] auto product_range_impl(T const &idxs, std::index_sequence<Is...>) {
    +
    312 return product_range(std::get<Is>(idxs)...);
    +
    313 }
    +
    314
    +
    315 } // namespace detail
    +
    316 /// @endcond
    +
    317
    +
    318 /**
    +
    319 * @brief Create a cartesian product range of integer ranges from a tuple of integers.
    +
    320 *
    +
    321 * @details The integers in the given tuple specify the excluded last values of the individual itertools::range objects.
    +
    322 * Each range starts at 0 and has a step size of 1.
    +
    323 *
    +
    324 * @code{.cpp}
    +
    325 * for (auto [i1, i2] : product_range(std::make_tuple(2, 3))) {
    +
    326 * std::cout << "(" << i1 << ", " << i2 << ")\n";
    +
    327 * }
    +
    328 * @endcode
    +
    329 *
    +
    330 * Output:
    +
    331 *
    +
    332 * ```
    +
    333 * (0, 0)
    +
    334 * (0, 1)
    +
    335 * (0, 2)
    +
    336 * (1, 0)
    +
    337 * (1, 1)
    +
    338 * (1, 2)
    +
    339 * ```
    +
    340 *
    +
    341 * @tparam Is Integer types.
    +
    342 * @param idx_tpl Tuple containing the excluded last values of the integer ranges.
    +
    343 * @return Product (detail::multiplied) range of integer ranges. See itertools::product and itertools::range.
    +
    344 */
    +
    345 template <typename... Is, typename EnableIf = std::enable_if_t<(std::is_integral_v<Is> and ...), int>>
    +
    346 [[nodiscard]] auto product_range(std::tuple<Is...> const &idx_tpl) {
    +
    347 return detail::product_range_impl(idx_tpl, std::make_index_sequence<sizeof...(Is)>{});
    +
    348 }
    +
    349
    +
    350 /**
    +
    351 * @brief Create a cartesian product range of integer ranges from an array of integers.
    +
    352 *
    +
    353 * @details The integers in the given array specify the excluded last values of the individual itertools::range objects.
    +
    354 * Each range starts at 0 and has a step size of 1.
    +
    355 *
    +
    356 * @code{.cpp}
    +
    357 * for (auto [i1, i2] : product_range(std::array{2, 3})) {
    +
    358 * std::cout << "(" << i1 << ", " << i2 << ")\n";
    +
    359 * }
    +
    360 * @endcode
    +
    361 *
    +
    362 * Output:
    +
    363 *
    +
    364 * ```
    +
    365 * (0, 0)
    +
    366 * (0, 1)
    +
    367 * (0, 2)
    +
    368 * (1, 0)
    +
    369 * (1, 1)
    +
    370 * (1, 2)
    +
    371 * ```
    +
    372 *
    +
    373 * @tparam I Integer type.
    +
    374 * @tparam N Number of elements in the array.
    +
    375 * @param idx_arr Array containing the excluded last values of the integer ranges.
    +
    376 * @return Product (detail::multiplied) range of integer ranges. See itertools::product and itertools::range.
    +
    377 */
    +
    378 template <typename I, size_t N, typename EnableIf = std::enable_if_t<std::is_integral_v<I>, int>>
    +
    379 [[nodiscard]] auto product_range(std::array<I, N> const &idx_arr) {
    +
    380 return detail::product_range_impl(idx_arr, std::make_index_sequence<N>{});
    +
    381 }
    +
    382
    +
    383 /**
    +
    384 * @brief Apply a function to every element of an integer itertools::range.
    +
    385 *
    +
    386 * @code{.cpp}
    +
    387 * // print out the first 10 squares
    +
    388 * itertools::foreach(itertools::range(1, 11), [](int i) {
    +
    389 * std::cout << i * i << " ";
    +
    390 * });
    +
    391 * @endcode
    +
    392 *
    +
    393 * Output:
    +
    394 *
    +
    395 * ```
    +
    396 * 1 4 9 16 25 36 49 64 81 100
    +
    397 * ```
    +
    398 *
    +
    399 * @tparam F Callable type.
    +
    400 * @param rg itertools::range object.
    +
    401 * @param f Callable object to be applied to each element.
    +
    402 */
    +
    403 template <typename F> void foreach (range const &rg, F && f) {
    +
    404 auto i = rg.first(), last = rg.last(), step = rg.step();
    +
    405 for (; i < last; i += step) std::forward<F>(f)(i);
    +
    406 }
    +
    407
    +
    408 /** @} */
    +
    409
    +
    410} // namespace itertools
    +
    411
    +
    412#endif // _ITERTOOLS_RANGE_HPP
    +
    A lazy range of integers that mimics a Python range.
    Definition range.hpp:79
    +
    const_iterator begin() const noexcept
    The same as cbegin().
    Definition range.hpp:264
    +
    static constexpr all_t all
    See range::all_t.
    Definition range.hpp:98
    +
    long step() const
    Get step size between two elements of the range.
    Definition range.hpp:146
    +
    const_iterator end() const noexcept
    The same as cend().
    Definition range.hpp:273
    +
    range()=default
    Default constructor.
    +
    range(long last)
    Construct a range with a step size of 1, a first value set to 0 and a given last value (excluded).
    Definition range.hpp:134
    +
    const_iterator cend() const noexcept
    End of the range.
    Definition range.hpp:270
    +
    range(long first, long last) noexcept
    Construct a range with a step size of 1 and a given first and last (excluded) value.
    Definition range.hpp:115
    +
    long size() const
    Get number of elements in the range.
    Definition range.hpp:149
    +
    range operator+(long shift) const
    Shift the whole range by a given amount.
    Definition range.hpp:160
    +
    const_iterator cbegin() const noexcept
    Beginning of the integer range.
    Definition range.hpp:261
    +
    bool operator==(range const &) const =default
    Default equal-to operator.
    +
    long last() const
    Get last value of the range (excluded).
    Definition range.hpp:143
    +
    long first() const
    Get first value of the range.
    Definition range.hpp:140
    +
    range(long first, long last, long step)
    Construct a range with a given step size and a given first and last (excluded) value.
    Definition range.hpp:126
    +
    auto product_range(Is... is)
    Create a cartesian product range of integer ranges from given integers.
    Definition range.hpp:303
    +
    void foreach(range const &rg, F &&f)
    Apply a function to every element of an integer itertools::range.
    Definition range.hpp:403
    +
    auto product_range(std::array< I, N > const &idx_arr)
    Create a cartesian product range of integer ranges from an array of integers.
    Definition range.hpp:379
    +
    auto product_range(std::tuple< Is... > const &idx_tpl)
    Create a cartesian product range of integer ranges from a tuple of integers.
    Definition range.hpp:346
    +
    Denote a full range at compile-time.
    Definition range.hpp:95
    +
    Const iterator type for itertools::range.
    Definition range.hpp:175
    +
    long operator->() const noexcept
    Member access operator.
    Definition range.hpp:254
    +
    bool operator!=(const_iterator const &other) const noexcept
    Not-equal-to operator for two iterators.
    Definition range.hpp:242
    + +
    const_iterator & operator++() noexcept
    Pre-increment operator increments the current value by the step size.
    Definition range.hpp:204
    +
    bool atEnd() const noexcept
    Has the iterator reached the end of the range?
    Definition range.hpp:224
    + +
    bool operator==(const_iterator const &other) const noexcept
    Equal-to operator for two iterators.
    Definition range.hpp:232
    +
    long last
    Last value of the range (excluded).
    Definition range.hpp:180
    +
    long operator*() const noexcept
    Dereference operator.
    Definition range.hpp:248
    +
    const_iterator operator++(int) noexcept
    Post-increment operator increments the current value by the step size.
    Definition range.hpp:213
    +
    +
    + + + + diff --git a/docs/unstable/resize.js b/docs/unstable/resize.js new file mode 100644 index 0000000..6ad2ae8 --- /dev/null +++ b/docs/unstable/resize.js @@ -0,0 +1,109 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +function initResizable() { + let sidenav,navtree,content,header,footer,barWidth=6; + const RESIZE_COOKIE_NAME = ''+'width'; + + function resizeWidth() { + const sidenavWidth = $(sidenav).outerWidth(); + content.css({marginLeft:parseInt(sidenavWidth)+"px"}); + if (typeof page_layout!=='undefined' && page_layout==1) { + footer.css({marginLeft:parseInt(sidenavWidth)+"px"}); + } + Cookie.writeSetting(RESIZE_COOKIE_NAME,sidenavWidth-barWidth); + } + + function restoreWidth(navWidth) { + content.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + if (typeof page_layout!=='undefined' && page_layout==1) { + footer.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + } + sidenav.css({width:navWidth + "px"}); + } + + function resizeHeight() { + const headerHeight = header.outerHeight(); + const footerHeight = footer.outerHeight(); + const windowHeight = $(window).height(); + let contentHeight,navtreeHeight,sideNavHeight; + if (typeof page_layout==='undefined' || page_layout==0) { /* DISABLE_INDEX=NO */ + contentHeight = windowHeight - headerHeight - footerHeight; + navtreeHeight = contentHeight; + sideNavHeight = contentHeight; + } else if (page_layout==1) { /* DISABLE_INDEX=YES */ + contentHeight = windowHeight - footerHeight; + navtreeHeight = windowHeight - headerHeight; + sideNavHeight = windowHeight; + } + content.css({height:contentHeight + "px"}); + navtree.css({height:navtreeHeight + "px"}); + sidenav.css({height:sideNavHeight + "px"}); + if (location.hash.slice(1)) { + (document.getElementById(location.hash.slice(1))||document.body).scrollIntoView(); + } + } + + function collapseExpand() { + let newWidth; + if (sidenav.width()>0) { + newWidth=0; + } else { + const width = Cookie.readSetting(RESIZE_COOKIE_NAME,250); + newWidth = (width>250 && width<$(window).width()) ? width : 250; + } + restoreWidth(newWidth); + const sidenavWidth = $(sidenav).outerWidth(); + Cookie.writeSetting(RESIZE_COOKIE_NAME,sidenavWidth-barWidth); + } + + header = $("#top"); + sidenav = $("#side-nav"); + content = $("#doc-content"); + navtree = $("#nav-tree"); + footer = $("#nav-path"); + $(".side-nav-resizable").resizable({resize: () => resizeWidth() }); + $(sidenav).resizable({ minWidth: 0 }); + $(window).resize(() => resizeHeight()); + const device = navigator.userAgent.toLowerCase(); + const touch_device = device.match(/(iphone|ipod|ipad|android)/); + if (touch_device) { /* wider split bar for touch only devices */ + $(sidenav).css({ paddingRight:'20px' }); + $('.ui-resizable-e').css({ width:'20px' }); + $('#nav-sync').css({ right:'34px' }); + barWidth=20; + } + const width = Cookie.readSetting(RESIZE_COOKIE_NAME,250); + if (width) { restoreWidth(width); } else { resizeWidth(); } + resizeHeight(); + const url = location.href; + const i=url.indexOf("#"); + if (i>=0) window.location.hash=url.substr(i); + const _preventDefault = (evt) => evt.preventDefault(); + $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); + $(".ui-resizable-handle").dblclick(collapseExpand); + $(window).on('load',resizeHeight); +} +/* @license-end */ diff --git a/docs/unstable/search/all_0.js b/docs/unstable/search/all_0.js new file mode 100644 index 0000000..9c023be --- /dev/null +++ b/docs/unstable/search/all_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['0_0',['0',['../changelog.html#autotoc_md4',1,'Version 1.1.0'],['../changelog.html#autotoc_md0',1,'Version 1.2.0']]], + ['0_200_1',['Version 1.0.0',['../changelog.html#autotoc_md9',1,'']]] +]; diff --git a/docs/unstable/search/all_1.js b/docs/unstable/search/all_1.js new file mode 100644 index 0000000..6d02819 --- /dev/null +++ b/docs/unstable/search/all_1.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['1_200_200_0',['Version 1.0.0',['../changelog.html#autotoc_md9',1,'']]], + ['1_201_200_1',['Version 1.1.0',['../changelog.html#autotoc_md4',1,'']]], + ['1_202_200_2',['Version 1.2.0',['../changelog.html#autotoc_md0',1,'']]], + ['1_3a_20comparison_20with_20std_3a_3aranges_3',['Example 1: Comparison with std::ranges',['../ex1.html',1,'']]] +]; diff --git a/docs/unstable/search/all_10.js b/docs/unstable/search/all_10.js new file mode 100644 index 0000000..1b20222 --- /dev/null +++ b/docs/unstable/search/all_10.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['range_0',['Integer range',['../group__integer__range.html',1,'']]], + ['range_1',['Integer range',['../documentation.html#autotoc_md13',1,'']]], + ['range_2',['range',['../classitertools_1_1range.html',1,'range'],['../classitertools_1_1range.html#a745e7b5aea3e3174f1e7344c7cba1dd8',1,'itertools::range::range()=default'],['../classitertools_1_1range.html#aa4d307c1b3ce350a07d5d1a09061f3bb',1,'itertools::range::range(long first, long last) noexcept'],['../classitertools_1_1range.html#af9c9bf146a3cd80e4293d287c0e9b260',1,'itertools::range::range(long first, long last, long step)'],['../classitertools_1_1range.html#a7dee4db5fa3b19a60e8861212aa090d3',1,'itertools::range::range(long last)']]], + ['range_20adapting_20functions_3',['Range adapting functions',['../group__range__adapting__functions.html',1,'Range adapting functions'],['../documentation.html#autotoc_md10',1,'Range adapting functions']]], + ['range_20iterators_4',['Range iterators',['../group__range__iterators.html',1,'Range iterators'],['../documentation.html#autotoc_md12',1,'Range iterators']]], + ['range_2ehpp_5',['range.hpp',['../range_8hpp.html',1,'']]], + ['ranges_6',['Adapted ranges',['../group__adapted__ranges.html',1,'']]], + ['ranges_7',['Adapted ranges',['../documentation.html#autotoc_md11',1,'']]], + ['rank_8',['Rank',['../structitertools_1_1detail_1_1prod__iter.html#ae36cfbbfd7a5c02f91b559ce06841a81',1,'itertools::detail::prod_iter']]], + ['reference_9',['reference',['../structitertools_1_1iterator__facade_3_01Iter_00_01Value_00_01std_1_1forward__iterator__tag_00_01Reference_00_01Difference_01_4.html#ad792ff919d941331bc15d917f4c35ff2',1,'itertools::iterator_facade< Iter, Value, std::forward_iterator_tag, Reference, Difference >::reference'],['../structitertools_1_1range_1_1const__iterator.html#a09944b0ae286e68d419a8b2c065d4153',1,'itertools::range::const_iterator::reference']]], + ['rg_10',['rg',['../structitertools_1_1detail_1_1enumerated.html#a1a52f0cac69d082ee3e7347cf59aa1a1',1,'itertools::detail::enumerated::rg'],['../structitertools_1_1detail_1_1sliced.html#a1a52f0cac69d082ee3e7347cf59aa1a1',1,'itertools::detail::sliced::rg'],['../structitertools_1_1detail_1_1strided.html#a1a52f0cac69d082ee3e7347cf59aa1a1',1,'itertools::detail::strided::rg'],['../structitertools_1_1detail_1_1transformed.html#a1a52f0cac69d082ee3e7347cf59aa1a1',1,'itertools::detail::transformed::rg']]] +]; diff --git a/docs/unstable/search/all_11.js b/docs/unstable/search/all_11.js new file mode 100644 index 0000000..9165c71 --- /dev/null +++ b/docs/unstable/search/all_11.js @@ -0,0 +1,19 @@ +var searchData= +[ + ['sentinel_2ehpp_0',['sentinel.hpp',['../sentinel_8hpp.html',1,'']]], + ['sentinel_5ft_1',['sentinel_t',['../structitertools_1_1sentinel__t.html',1,'itertools']]], + ['seq_5ft_2',['seq_t',['../structitertools_1_1detail_1_1zipped.html#a070836ab727b8e22583d3e2a21949c99',1,'itertools::detail::zipped']]], + ['size_3',['size',['../classitertools_1_1range.html#ab99f0f3fab6ac9bf27501d18c92b1618',1,'itertools::range::size()'],['../structitertools_1_1detail_1_1sliced.html#a50518b00f2d74bd892935ee252b7fb77',1,'itertools::detail::sliced::size()']]], + ['slice_4',['slice',['../group__range__adapting__functions.html#ga0fab50176cc3df12cd96bbdf829d7e6f',1,'itertools']]], + ['slice_2ehpp_5',['slice.hpp',['../slice_8hpp.html',1,'']]], + ['sliced_6',['sliced',['../structitertools_1_1detail_1_1sliced.html',1,'itertools::detail']]], + ['start_7',['Where to start?',['../index.html#start',1,'']]], + ['start_5fidx_8',['start_idx',['../structitertools_1_1detail_1_1sliced.html#a715807218a81be93dfbc96b34088117a',1,'itertools::detail::sliced']]], + ['std_3a_3aranges_9',['Example 1: Comparison with std::ranges',['../ex1.html',1,'']]], + ['step_10',['step',['../structitertools_1_1range_1_1const__iterator.html#a65c5fe623bc349b61ee667a969ef2cd1',1,'itertools::range::const_iterator::step'],['../classitertools_1_1range.html#a52f85722bec4d0a2741d948176d82b4c',1,'itertools::range::step()']]], + ['steps_11',['Installation steps',['../installation.html#install_steps',1,'']]], + ['stride_12',['stride',['../structitertools_1_1detail_1_1stride__iter.html#a6050cbbb42a2bab4eb788aab1ea42021',1,'itertools::detail::stride_iter::stride'],['../structitertools_1_1detail_1_1strided.html#a6050cbbb42a2bab4eb788aab1ea42021',1,'itertools::detail::strided::stride'],['../group__range__adapting__functions.html#gae0865cb967e162fe889c670bceb76e4f',1,'itertools::stride()']]], + ['stride_2ehpp_13',['stride.hpp',['../stride_8hpp.html',1,'']]], + ['stride_5fiter_14',['stride_iter',['../structitertools_1_1detail_1_1stride__iter.html',1,'stride_iter< Iter >'],['../structitertools_1_1detail_1_1stride__iter.html#a69aba902b306a86ede6e9dd5467c1bab',1,'itertools::detail::stride_iter::stride_iter()=default'],['../structitertools_1_1detail_1_1stride__iter.html#aa08a56304f5d5842d8e5102cbda0bba9',1,'itertools::detail::stride_iter::stride_iter(Iter it, std::ptrdiff_t stride)']]], + ['strided_15',['strided',['../structitertools_1_1detail_1_1strided.html',1,'itertools::detail']]] +]; diff --git a/docs/unstable/search/all_12.js b/docs/unstable/search/all_12.js new file mode 100644 index 0000000..e526913 --- /dev/null +++ b/docs/unstable/search/all_12.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['the_20examples_0',['Compiling the examples',['../examples.html#compiling',1,'']]], + ['to_20start_1',['Where to start?',['../index.html#start',1,'']]], + ['transform_2',['transform',['../group__range__adapting__functions.html#ga7b31d5cff96c3dd4a24cf8a63e4f41a7',1,'itertools']]], + ['transform_2ehpp_3',['transform.hpp',['../transform_8hpp.html',1,'']]], + ['transform_5fiter_4',['transform_iter',['../structitertools_1_1detail_1_1transform__iter.html',1,'transform_iter< Iter, F, Value >'],['../structitertools_1_1detail_1_1transform__iter.html#a03d6ef9a76b3af9f07212af995a73aaf',1,'itertools::detail::transform_iter::transform_iter()=default'],['../structitertools_1_1detail_1_1transform__iter.html#a14a06b63a45d5cdcd927273b4f09f4d7',1,'itertools::detail::transform_iter::transform_iter(Iter it, F lambda)'],['../structitertools_1_1detail_1_1transform__iter.html#a40c718e231f93f7f1f9456573d788934',1,'itertools::detail::transform_iter::transform_iter(transform_iter &&)=default'],['../structitertools_1_1detail_1_1transform__iter.html#ad8c183f3b8b554913dd89b4184ed87b8',1,'itertools::detail::transform_iter::transform_iter(transform_iter const &)=default']]], + ['transformed_5',['transformed',['../structitertools_1_1detail_1_1transformed.html',1,'itertools::detail']]], + ['tu_6',['tu',['../structitertools_1_1detail_1_1multiplied.html#a6b10ff50da57c7360ba8f2fbbf404fee',1,'itertools::detail::multiplied::tu'],['../structitertools_1_1detail_1_1zipped.html#a6b10ff50da57c7360ba8f2fbbf404fee',1,'itertools::detail::zipped::tu']]] +]; diff --git a/docs/unstable/search/all_13.js b/docs/unstable/search/all_13.js new file mode 100644 index 0000000..44fff1c --- /dev/null +++ b/docs/unstable/search/all_13.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['utilities_0',['Utilities',['../group__utilities.html',1,'Utilities'],['../documentation.html#autotoc_md14',1,'Utilities']]], + ['utils_2ehpp_1',['utils.hpp',['../utils_8hpp.html',1,'']]] +]; diff --git a/docs/unstable/search/all_14.js b/docs/unstable/search/all_14.js new file mode 100644 index 0000000..cd13a2b --- /dev/null +++ b/docs/unstable/search/all_14.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['value_5ftype_0',['value_type',['../structitertools_1_1iterator__facade_3_01Iter_00_01Value_00_01std_1_1forward__iterator__tag_00_01Reference_00_01Difference_01_4.html#a127772511e59cd5f9115f38c908e0490',1,'itertools::iterator_facade< Iter, Value, std::forward_iterator_tag, Reference, Difference >::value_type'],['../structitertools_1_1range_1_1const__iterator.html#af9f849e642c5441f70ecd48ed3e7fbbc',1,'itertools::range::const_iterator::value_type']]], + ['version_201_200_200_1',['Version 1.0.0',['../changelog.html#autotoc_md9',1,'']]], + ['version_201_201_200_2',['Version 1.1.0',['../changelog.html#autotoc_md4',1,'']]], + ['version_201_202_200_3',['Version 1.2.0',['../changelog.html#autotoc_md0',1,'']]], + ['versions_4',['Versions',['../installation.html#versions',1,'']]] +]; diff --git a/docs/unstable/search/all_15.js b/docs/unstable/search/all_15.js new file mode 100644 index 0000000..fa0f46d --- /dev/null +++ b/docs/unstable/search/all_15.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['where_20to_20start_0',['Where to start?',['../index.html#start',1,'']]], + ['with_20std_3a_3aranges_1',['Example 1: Comparison with std::ranges',['../ex1.html',1,'']]] +]; diff --git a/docs/unstable/search/all_16.js b/docs/unstable/search/all_16.js new file mode 100644 index 0000000..154087f --- /dev/null +++ b/docs/unstable/search/all_16.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['zip_0',['zip',['../group__range__adapting__functions.html#gaf7196a84296d770614fc47322e4ae8cd',1,'itertools']]], + ['zip_2ehpp_1',['zip.hpp',['../zip_8hpp.html',1,'']]], + ['zip_5fiter_2',['zip_iter',['../structitertools_1_1detail_1_1zip__iter.html',1,'zip_iter< Iters >'],['../structitertools_1_1detail_1_1zip__iter.html#a819b5bfca6640e6d28ebdcbdd93a1ba7',1,'itertools::detail::zip_iter::zip_iter()=default'],['../structitertools_1_1detail_1_1zip__iter.html#a824a069d56aca63de6136ee1a5ab60ea',1,'itertools::detail::zip_iter::zip_iter(std::tuple< Iters... > its)']]], + ['zipped_3',['zipped',['../structitertools_1_1detail_1_1zipped.html',1,'zipped< Rs >'],['../structitertools_1_1detail_1_1zipped.html#aa1ad53b6146c5a0003a7ecf4ac6253ed',1,'itertools::detail::zipped::zipped()']]] +]; diff --git a/docs/unstable/search/all_2.js b/docs/unstable/search/all_2.js new file mode 100644 index 0000000..5ec9337 --- /dev/null +++ b/docs/unstable/search/all_2.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['2_200_0',['Version 1.2.0',['../changelog.html#autotoc_md0',1,'']]], + ['20_1',['c++20',['../changelog.html#autotoc_md7',1,'']]] +]; diff --git a/docs/unstable/search/all_3.js b/docs/unstable/search/all_3.js new file mode 100644 index 0000000..9078fb8 --- /dev/null +++ b/docs/unstable/search/all_3.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['adapted_20ranges_0',['Adapted ranges',['../group__adapted__ranges.html',1,'Adapted ranges'],['../documentation.html#autotoc_md11',1,'Adapted ranges']]], + ['adapting_20functions_1',['Range adapting functions',['../group__range__adapting__functions.html',1,'']]], + ['adapting_20functions_2',['Range adapting functions',['../documentation.html#autotoc_md10',1,'']]], + ['add_5fsubdirectory_3',['add_subdirectory',['../integration.html#add_sub',1,'']]], + ['all_4',['all',['../classitertools_1_1range.html#a427869415cbb441f9bc051529778f340',1,'itertools::range']]], + ['all_5ft_5',['all_t',['../structitertools_1_1range_1_1all__t.html',1,'itertools::range']]], + ['api_20documentation_6',['API Documentation',['../documentation.html',1,'']]], + ['atend_7',['atEnd',['../structitertools_1_1range_1_1const__iterator.html#a496b6e2de8e93e0e7965ccf8d25b8657',1,'itertools::range::const_iterator']]] +]; diff --git a/docs/unstable/search/all_4.js b/docs/unstable/search/all_4.js new file mode 100644 index 0000000..1f25492 --- /dev/null +++ b/docs/unstable/search/all_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['begin_0',['begin',['../structitertools_1_1detail_1_1enumerated.html#a979556eb331ec35eb33472a90a160f99',1,'itertools::detail::enumerated::begin() noexcept'],['../structitertools_1_1detail_1_1enumerated.html#a1ca1fc2c9fc3e169d5d0decfd1e54221',1,'itertools::detail::enumerated::begin() const noexcept'],['../structitertools_1_1detail_1_1multiplied.html#a979556eb331ec35eb33472a90a160f99',1,'itertools::detail::multiplied::begin() noexcept'],['../structitertools_1_1detail_1_1multiplied.html#a1ca1fc2c9fc3e169d5d0decfd1e54221',1,'itertools::detail::multiplied::begin() const noexcept'],['../classitertools_1_1range.html#a1ca1fc2c9fc3e169d5d0decfd1e54221',1,'itertools::range::begin()'],['../structitertools_1_1detail_1_1sliced.html#a979556eb331ec35eb33472a90a160f99',1,'itertools::detail::sliced::begin() noexcept'],['../structitertools_1_1detail_1_1sliced.html#a1ca1fc2c9fc3e169d5d0decfd1e54221',1,'itertools::detail::sliced::begin() const noexcept'],['../structitertools_1_1detail_1_1strided.html#a979556eb331ec35eb33472a90a160f99',1,'itertools::detail::strided::begin() noexcept'],['../structitertools_1_1detail_1_1strided.html#a1ca1fc2c9fc3e169d5d0decfd1e54221',1,'itertools::detail::strided::begin() const noexcept'],['../structitertools_1_1detail_1_1transformed.html#a1ca1fc2c9fc3e169d5d0decfd1e54221',1,'itertools::detail::transformed::begin()'],['../structitertools_1_1detail_1_1zipped.html#a979556eb331ec35eb33472a90a160f99',1,'itertools::detail::zipped::begin() noexcept'],['../structitertools_1_1detail_1_1zipped.html#a1ca1fc2c9fc3e169d5d0decfd1e54221',1,'itertools::detail::zipped::begin() const noexcept']]] +]; diff --git a/docs/unstable/search/all_5.js b/docs/unstable/search/all_5.js new file mode 100644 index 0000000..4907eaa --- /dev/null +++ b/docs/unstable/search/all_5.js @@ -0,0 +1,16 @@ +var searchData= +[ + ['c_2020_0',['c++20',['../changelog.html#autotoc_md7',1,'']]], + ['c_20projects_1',['Integration in C++ projects',['../integration.html',1,'']]], + ['cbegin_2',['cbegin',['../structitertools_1_1detail_1_1enumerated.html#abeb76f7f3414f270020e6f467586bd93',1,'itertools::detail::enumerated::cbegin()'],['../structitertools_1_1detail_1_1multiplied.html#abeb76f7f3414f270020e6f467586bd93',1,'itertools::detail::multiplied::cbegin()'],['../classitertools_1_1range.html#abeb76f7f3414f270020e6f467586bd93',1,'itertools::range::cbegin()'],['../structitertools_1_1detail_1_1sliced.html#abeb76f7f3414f270020e6f467586bd93',1,'itertools::detail::sliced::cbegin()'],['../structitertools_1_1detail_1_1strided.html#abeb76f7f3414f270020e6f467586bd93',1,'itertools::detail::strided::cbegin()'],['../structitertools_1_1detail_1_1transformed.html#abeb76f7f3414f270020e6f467586bd93',1,'itertools::detail::transformed::cbegin()'],['../structitertools_1_1detail_1_1zipped.html#abeb76f7f3414f270020e6f467586bd93',1,'itertools::detail::zipped::cbegin()']]], + ['cend_3',['cend',['../structitertools_1_1detail_1_1enumerated.html#a4e9d92bb659820718c9deb97b022c7ba',1,'itertools::detail::enumerated::cend()'],['../structitertools_1_1detail_1_1multiplied.html#a4e9d92bb659820718c9deb97b022c7ba',1,'itertools::detail::multiplied::cend()'],['../classitertools_1_1range.html#a9859a454bb6f50c654e280274d6a9d13',1,'itertools::range::cend()'],['../structitertools_1_1detail_1_1sliced.html#a9859a454bb6f50c654e280274d6a9d13',1,'itertools::detail::sliced::cend()'],['../structitertools_1_1detail_1_1strided.html#a9859a454bb6f50c654e280274d6a9d13',1,'itertools::detail::strided::cend()'],['../structitertools_1_1detail_1_1transformed.html#a4e9d92bb659820718c9deb97b022c7ba',1,'itertools::detail::transformed::cend()'],['../structitertools_1_1detail_1_1zipped.html#a4e9d92bb659820718c9deb97b022c7ba',1,'itertools::detail::zipped::cend()']]], + ['changelog_4',['Changelog',['../changelog.html',1,'']]], + ['chunk_5frange_5',['chunk_range',['../group__utilities.html#gaaab750a8b80fe5326464d04ade5f072c',1,'itertools']]], + ['cmake_6',['Cmake',['../changelog.html#autotoc_md2',1,'cmake'],['../changelog.html#autotoc_md8',1,'cmake']]], + ['cmake_7',['CMake',['../integration.html#cmake',1,'']]], + ['cmake_20options_8',['Custom CMake options',['../installation.html#cmake_options',1,'']]], + ['comparison_20with_20std_3a_3aranges_9',['Example 1: Comparison with std::ranges',['../ex1.html',1,'']]], + ['compiling_20the_20examples_10',['Compiling the examples',['../examples.html#compiling',1,'']]], + ['const_5fiterator_11',['const_iterator',['../structitertools_1_1range_1_1const__iterator.html',1,'range::const_iterator'],['../structitertools_1_1detail_1_1enumerated.html#ace4fff2a8c2108f21c040768d580aa1a',1,'itertools::detail::enumerated::const_iterator'],['../structitertools_1_1detail_1_1multiplied.html#a1ad5a8735d82ec2023cc300528b0b1c5',1,'itertools::detail::multiplied::const_iterator'],['../structitertools_1_1detail_1_1sliced.html#ae656aee7019c57e79322b04c4fc9dd45',1,'itertools::detail::sliced::const_iterator'],['../structitertools_1_1detail_1_1strided.html#af8369dfd29867d698e28b3c0bc822d91',1,'itertools::detail::strided::const_iterator'],['../structitertools_1_1detail_1_1transformed.html#a317195c877d52b697ec64d1b7bddbfd0',1,'itertools::detail::transformed::const_iterator'],['../structitertools_1_1detail_1_1zipped.html#ad324f8f64d3e58642ca0387a1bd1bb90',1,'itertools::detail::zipped::const_iterator']]], + ['custom_20cmake_20options_12',['Custom CMake options',['../installation.html#cmake_options',1,'']]] +]; diff --git a/docs/unstable/search/all_6.js b/docs/unstable/search/all_6.js new file mode 100644 index 0000000..9efb311 --- /dev/null +++ b/docs/unstable/search/all_6.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['dependencies_0',['Dependencies',['../installation.html#dependencies',1,'']]], + ['deprecated_20list_1',['Deprecated List',['../deprecated.html',1,'']]], + ['dereference_2',['dereference',['../structitertools_1_1detail_1_1enum__iter.html#adbcb7ba9af71e6640ec3802dc4a825a0',1,'itertools::detail::enum_iter::dereference()'],['../structitertools_1_1detail_1_1prod__iter.html#adbcb7ba9af71e6640ec3802dc4a825a0',1,'itertools::detail::prod_iter::dereference()'],['../structitertools_1_1detail_1_1stride__iter.html#adbcb7ba9af71e6640ec3802dc4a825a0',1,'itertools::detail::stride_iter::dereference()'],['../structitertools_1_1detail_1_1transform__iter.html#adbcb7ba9af71e6640ec3802dc4a825a0',1,'itertools::detail::transform_iter::dereference()'],['../structitertools_1_1detail_1_1zip__iter.html#adbcb7ba9af71e6640ec3802dc4a825a0',1,'itertools::detail::zip_iter::dereference()']]], + ['difference_5ftype_3',['difference_type',['../structitertools_1_1iterator__facade_3_01Iter_00_01Value_00_01std_1_1forward__iterator__tag_00_01Reference_00_01Difference_01_4.html#a2497bdb160998a8bf5de50b2091d2f87',1,'itertools::iterator_facade< Iter, Value, std::forward_iterator_tag, Reference, Difference >::difference_type'],['../structitertools_1_1range_1_1const__iterator.html#ace405568d0b2f3fad4990044252c7732',1,'itertools::range::const_iterator::difference_type']]], + ['distance_4',['distance',['../group__utilities.html#gac0fa2fb9ac9b6525d934afa733f1104e',1,'itertools']]], + ['doc_5',['doc',['../changelog.html#autotoc_md6',1,'']]], + ['documentation_6',['API Documentation',['../documentation.html',1,'']]] +]; diff --git a/docs/unstable/search/all_7.js b/docs/unstable/search/all_7.js new file mode 100644 index 0000000..d599b4c --- /dev/null +++ b/docs/unstable/search/all_7.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['end_0',['end',['../structitertools_1_1detail_1_1enumerated.html#aae80d7cf5cd85b47834fb8752d7b1712',1,'itertools::detail::enumerated::end() noexcept'],['../structitertools_1_1detail_1_1enumerated.html#a10fc66af197e25cb554f58a721a473a3',1,'itertools::detail::enumerated::end() const noexcept'],['../structitertools_1_1detail_1_1multiplied.html#aae80d7cf5cd85b47834fb8752d7b1712',1,'itertools::detail::multiplied::end() noexcept'],['../structitertools_1_1detail_1_1multiplied.html#a10fc66af197e25cb554f58a721a473a3',1,'itertools::detail::multiplied::end() const noexcept'],['../classitertools_1_1range.html#a5b9b57293fae9b18b26349ac0b3fdcd3',1,'itertools::range::end()'],['../structitertools_1_1detail_1_1sliced.html#afc5380afa64b233d0df01a147616974b',1,'itertools::detail::sliced::end() noexcept'],['../structitertools_1_1detail_1_1sliced.html#a5b9b57293fae9b18b26349ac0b3fdcd3',1,'itertools::detail::sliced::end() const noexcept'],['../structitertools_1_1detail_1_1strided.html#afc5380afa64b233d0df01a147616974b',1,'itertools::detail::strided::end() noexcept'],['../structitertools_1_1detail_1_1strided.html#a5b9b57293fae9b18b26349ac0b3fdcd3',1,'itertools::detail::strided::end() const noexcept'],['../structitertools_1_1detail_1_1transformed.html#a10fc66af197e25cb554f58a721a473a3',1,'itertools::detail::transformed::end()'],['../structitertools_1_1detail_1_1zipped.html#aae80d7cf5cd85b47834fb8752d7b1712',1,'itertools::detail::zipped::end() noexcept'],['../structitertools_1_1detail_1_1zipped.html#a10fc66af197e25cb554f58a721a473a3',1,'itertools::detail::zipped::end() const noexcept']]], + ['end_5fidx_1',['end_idx',['../structitertools_1_1detail_1_1sliced.html#addfa87c977213055ac6733b8754abe83',1,'itertools::detail::sliced']]], + ['enum_5fiter_2',['enum_iter',['../structitertools_1_1detail_1_1enum__iter.html',1,'enum_iter< Iter >'],['../structitertools_1_1detail_1_1enum__iter.html#af21352ae9824b6aa025bee147caa3a6c',1,'itertools::detail::enum_iter::enum_iter()=default'],['../structitertools_1_1detail_1_1enum__iter.html#a6517a9748e3f65eaa90fddb6635d0460',1,'itertools::detail::enum_iter::enum_iter(Iter it)']]], + ['enumerate_3',['enumerate',['../group__range__adapting__functions.html#ga2fb6627d7acfb88befe857406a77fa41',1,'itertools']]], + ['enumerate_2ehpp_4',['enumerate.hpp',['../enumerate_8hpp.html',1,'']]], + ['enumerated_5',['enumerated',['../structitertools_1_1detail_1_1enumerated.html',1,'itertools::detail']]], + ['example_201_3a_20comparison_20with_20std_3a_3aranges_6',['Example 1: Comparison with std::ranges',['../ex1.html',1,'']]], + ['examples_7',['Examples',['../examples.html#compiling',1,'Compiling the examples'],['../examples.html',1,'Examples']]] +]; diff --git a/docs/unstable/search/all_8.js b/docs/unstable/search/all_8.js new file mode 100644 index 0000000..506e545 --- /dev/null +++ b/docs/unstable/search/all_8.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['fetchcontent_0',['FetchContent',['../integration.html#fetch',1,'']]], + ['find_5fpackage_1',['find_package',['../integration.html#find_package',1,'']]], + ['first_2',['first',['../classitertools_1_1range.html#ad9dc79b2301c5155369e1b4fc427933a',1,'itertools::range']]], + ['fixes_3',['fixes',['../changelog.html#autotoc_md3',1,'']]], + ['foreach_4',['foreach',['../group__integer__range.html#ga6ca936493fdef081fcc8d718a1951124',1,'itertools']]], + ['functions_5',['Range adapting functions',['../group__range__adapting__functions.html',1,'']]], + ['functions_6',['Range adapting functions',['../documentation.html#autotoc_md10',1,'']]] +]; diff --git a/docs/unstable/search/all_9.js b/docs/unstable/search/all_9.js new file mode 100644 index 0000000..7d81752 --- /dev/null +++ b/docs/unstable/search/all_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['general_0',['General',['../changelog.html#autotoc_md1',1,'General'],['../changelog.html#autotoc_md5',1,'General']]] +]; diff --git a/docs/unstable/search/all_a.js b/docs/unstable/search/all_a.js new file mode 100644 index 0000000..00ee0ee --- /dev/null +++ b/docs/unstable/search/all_a.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['hpp_0',['print.hpp',['../examples.html#print_header',1,'']]] +]; diff --git a/docs/unstable/search/all_b.js b/docs/unstable/search/all_b.js new file mode 100644 index 0000000..a3b76ba --- /dev/null +++ b/docs/unstable/search/all_b.js @@ -0,0 +1,23 @@ +var searchData= +[ + ['i_0',['i',['../structitertools_1_1detail_1_1enum__iter.html#a139066bd9e344a8daae82c5ca919fffe',1,'itertools::detail::enum_iter']]], + ['in_20c_20projects_1',['Integration in C++ projects',['../integration.html',1,'']]], + ['increment_2',['increment',['../structitertools_1_1detail_1_1enum__iter.html#aeb2624c7a86b765725fd80cd426e147d',1,'itertools::detail::enum_iter::increment()'],['../structitertools_1_1detail_1_1prod__iter.html#aeb2624c7a86b765725fd80cd426e147d',1,'itertools::detail::prod_iter::increment()'],['../structitertools_1_1detail_1_1stride__iter.html#aeb2624c7a86b765725fd80cd426e147d',1,'itertools::detail::stride_iter::increment()'],['../structitertools_1_1detail_1_1transform__iter.html#aeb2624c7a86b765725fd80cd426e147d',1,'itertools::detail::transform_iter::increment()'],['../structitertools_1_1detail_1_1zip__iter.html#aeb2624c7a86b765725fd80cd426e147d',1,'itertools::detail::zip_iter::increment()']]], + ['index_5ft_3',['index_t',['../classitertools_1_1range.html#af2d2b24d5192aa0ab0566631c8e152e4',1,'itertools::range']]], + ['installation_4',['Installation',['../installation.html',1,'']]], + ['installation_20steps_5',['Installation steps',['../installation.html#install_steps',1,'']]], + ['integer_20range_6',['Integer range',['../group__integer__range.html',1,'Integer range'],['../documentation.html#autotoc_md13',1,'Integer range']]], + ['integration_20in_20c_20projects_7',['Integration in C++ projects',['../integration.html',1,'']]], + ['issues_8',['Issues',['../issues.html',1,'']]], + ['it_9',['it',['../structitertools_1_1detail_1_1enum__iter.html#ae58cf25874cd6258fc3d41eab1511bcc',1,'itertools::detail::enum_iter::it'],['../structitertools_1_1sentinel__t.html#ae58cf25874cd6258fc3d41eab1511bcc',1,'itertools::sentinel_t::it'],['../structitertools_1_1detail_1_1stride__iter.html#ae58cf25874cd6258fc3d41eab1511bcc',1,'itertools::detail::stride_iter::it'],['../structitertools_1_1detail_1_1transform__iter.html#ae58cf25874cd6258fc3d41eab1511bcc',1,'itertools::detail::transform_iter::it']]], + ['iterator_10',['iterator',['../structitertools_1_1detail_1_1enumerated.html#acd4476d0af05634bc995563f5a4b9d01',1,'itertools::detail::enumerated::iterator'],['../structitertools_1_1detail_1_1multiplied.html#ad7ad13f275aabe4d21d8265d51affe18',1,'itertools::detail::multiplied::iterator'],['../structitertools_1_1detail_1_1sliced.html#a1f801ec543ea44ea6f613a3cb64cf800',1,'itertools::detail::sliced::iterator'],['../structitertools_1_1detail_1_1strided.html#adb5cecf6acc50b14b33b3ab7082bdd95',1,'itertools::detail::strided::iterator'],['../structitertools_1_1detail_1_1transformed.html#ab3d10e70baaeac78e76b7abae7e2cf76',1,'itertools::detail::transformed::iterator'],['../structitertools_1_1detail_1_1zipped.html#ab7c4228442427d5bfc8b154413142e25',1,'itertools::detail::zipped::iterator']]], + ['iterator_5fcategory_11',['iterator_category',['../structitertools_1_1iterator__facade_3_01Iter_00_01Value_00_01std_1_1forward__iterator__tag_00_01Reference_00_01Difference_01_4.html#a6b137a24d9328a60aef01d0f938cf0c3',1,'itertools::iterator_facade< Iter, Value, std::forward_iterator_tag, Reference, Difference >::iterator_category'],['../structitertools_1_1range_1_1const__iterator.html#a6b137a24d9328a60aef01d0f938cf0c3',1,'itertools::range::const_iterator::iterator_category']]], + ['iterator_5ffacade_2ehpp_12',['iterator_facade.hpp',['../iterator__facade_8hpp.html',1,'']]], + ['iterator_5ffacade_3c_20iter_2c_20value_2c_20std_3a_3aforward_5fiterator_5ftag_2c_20reference_2c_20difference_20_3e_13',['iterator_facade< Iter, Value, std::forward_iterator_tag, Reference, Difference >',['../structitertools_1_1iterator__facade_3_01Iter_00_01Value_00_01std_1_1forward__iterator__tag_00_01Reference_00_01Difference_01_4.html',1,'itertools']]], + ['iterators_14',['Range iterators',['../group__range__iterators.html',1,'']]], + ['iterators_15',['Range iterators',['../documentation.html#autotoc_md12',1,'']]], + ['itertools_2ehpp_16',['itertools.hpp',['../itertools_8hpp.html',1,'']]], + ['its_17',['its',['../structitertools_1_1detail_1_1prod__iter.html#a0c0481a1d45d9b65ab85760d75a519b5',1,'itertools::detail::prod_iter::its'],['../structitertools_1_1detail_1_1zip__iter.html#a0c0481a1d45d9b65ab85760d75a519b5',1,'itertools::detail::zip_iter::its']]], + ['its_5fbegin_18',['its_begin',['../structitertools_1_1detail_1_1prod__iter.html#a3684bd27aca1dc90c515230bbe44e71f',1,'itertools::detail::prod_iter']]], + ['its_5fend_19',['its_end',['../structitertools_1_1detail_1_1prod__iter.html#ab165b7cd00de5cdc3b83a24dbdb527fe',1,'itertools::detail::prod_iter']]] +]; diff --git a/docs/unstable/search/all_c.js b/docs/unstable/search/all_c.js new file mode 100644 index 0000000..10d05bf --- /dev/null +++ b/docs/unstable/search/all_c.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['lambda_0',['lambda',['../structitertools_1_1detail_1_1transform__iter.html#aaa0468412b7935984dafa9f5a7bf70e6',1,'itertools::detail::transform_iter::lambda'],['../structitertools_1_1detail_1_1transformed.html#ae586c5323ce2d88c48cab9cccad2b52a',1,'itertools::detail::transformed::lambda']]], + ['last_1',['last',['../structitertools_1_1range_1_1const__iterator.html#a87c945131e575aae523e644be67eff5d',1,'itertools::range::const_iterator::last'],['../classitertools_1_1range.html#ac10695d44360766931c40804a4cb2974',1,'itertools::range::last()']]], + ['list_2',['Deprecated List',['../deprecated.html',1,'']]] +]; diff --git a/docs/unstable/search/all_d.js b/docs/unstable/search/all_d.js new file mode 100644 index 0000000..93cb61a --- /dev/null +++ b/docs/unstable/search/all_d.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['make_5fproduct_0',['make_product',['../group__range__adapting__functions.html#gada42b52534da5f212adeff038ed19025',1,'itertools::make_product(std::array< R, N > &arr)'],['../group__range__adapting__functions.html#ga589b528fb3003669ae787d4702aa9165',1,'itertools::make_product(std::array< R, N > const &arr)']]], + ['make_5fsentinel_1',['make_sentinel',['../group__utilities.html#ga90e665b48c5bfe5f1b7590b20efdacb1',1,'itertools']]], + ['make_5fvector_5ffrom_5frange_2',['make_vector_from_range',['../group__utilities.html#ga8aa90a982e5cb521f6cdfbb11e6cb459',1,'itertools']]], + ['multiplied_3',['multiplied',['../structitertools_1_1detail_1_1multiplied.html',1,'multiplied< Rs >'],['../structitertools_1_1detail_1_1multiplied.html#af0fef97bb8eb9b41292a540aaf1465a7',1,'itertools::detail::multiplied::multiplied()']]] +]; diff --git a/docs/unstable/search/all_e.js b/docs/unstable/search/all_e.js new file mode 100644 index 0000000..85ef933 --- /dev/null +++ b/docs/unstable/search/all_e.js @@ -0,0 +1,16 @@ +var searchData= +[ + ['omp_5fchunk_0',['omp_chunk',['../group__utilities.html#ga1ddd62d4c0005b280ac89edc54ece3f4',1,'itertools']]], + ['omp_5fchunk_2ehpp_1',['omp_chunk.hpp',['../omp__chunk_8hpp.html',1,'']]], + ['operator_21_3d_2',['operator!=',['../structitertools_1_1range_1_1const__iterator.html#a316eb6ffafbd35ded14d65683983c242',1,'itertools::range::const_iterator']]], + ['operator_2a_3',['operator*',['../structitertools_1_1iterator__facade_3_01Iter_00_01Value_00_01std_1_1forward__iterator__tag_00_01Reference_00_01Difference_01_4.html#a817a25e45792fa1bcb65d85bb5978f9d',1,'itertools::iterator_facade< Iter, Value, std::forward_iterator_tag, Reference, Difference >::operator*()'],['../structitertools_1_1range_1_1const__iterator.html#a9a72f48f713fecfdc702d7c7b511fc7e',1,'itertools::range::const_iterator::operator*()']]], + ['operator_2b_4',['operator+',['../classitertools_1_1range.html#abad8057e61575ef2c064db0dd9c1a56e',1,'itertools::range']]], + ['operator_2b_2b_5',['operator++',['../structitertools_1_1iterator__facade_3_01Iter_00_01Value_00_01std_1_1forward__iterator__tag_00_01Reference_00_01Difference_01_4.html#a379c6d0d71d28479eb8b8cf7354d6308',1,'itertools::iterator_facade< Iter, Value, std::forward_iterator_tag, Reference, Difference >::operator++()'],['../structitertools_1_1iterator__facade_3_01Iter_00_01Value_00_01std_1_1forward__iterator__tag_00_01Reference_00_01Difference_01_4.html#a31cbe34b2c8d6ed76ce08a829404f521',1,'itertools::iterator_facade< Iter, Value, std::forward_iterator_tag, Reference, Difference >::operator++(int)'],['../structitertools_1_1range_1_1const__iterator.html#a494fc9fac2ab7a7419b59a236e93dcaf',1,'itertools::range::const_iterator::operator++() noexcept'],['../structitertools_1_1range_1_1const__iterator.html#acc00f9296a7dd5469fe734f54a0fede3',1,'itertools::range::const_iterator::operator++(int) noexcept']]], + ['operator_2d_3e_6',['operator->',['../structitertools_1_1iterator__facade_3_01Iter_00_01Value_00_01std_1_1forward__iterator__tag_00_01Reference_00_01Difference_01_4.html#afb2ec96f93c6f36bd9c50e8cc4dce686',1,'itertools::iterator_facade< Iter, Value, std::forward_iterator_tag, Reference, Difference >::operator->()'],['../structitertools_1_1range_1_1const__iterator.html#a2226ed898b88ce467b206387148c800d',1,'itertools::range::const_iterator::operator->()']]], + ['operator_3c_3c_7',['operator<<',['../classitertools_1_1range.html#a71bf4ca37900f2883a8a6a5eb3ae7224',1,'itertools::range']]], + ['operator_3d_8',['operator=',['../structitertools_1_1detail_1_1transform__iter.html#a3d5d867962dba349949ae0ef4913fe48',1,'itertools::detail::transform_iter::operator=(transform_iter &&)=default'],['../structitertools_1_1detail_1_1transform__iter.html#a39cdece90a29a09476a805cd0f33dfde',1,'itertools::detail::transform_iter::operator=(transform_iter const &other)']]], + ['operator_3d_3d_9',['operator==',['../structitertools_1_1detail_1_1enum__iter.html#a1018aa40d7da35d94cf467d302a77953',1,'itertools::detail::enum_iter::operator==(enum_iter const &other) const'],['../structitertools_1_1detail_1_1enum__iter.html#a90cb1204f57cf50211bb1cc30d873533',1,'itertools::detail::enum_iter::operator==(sentinel_t< SentinelIter > const &s) const'],['../structitertools_1_1detail_1_1enumerated.html#a0eb854b5ef2e0fb3930cd2d814e4aed8',1,'itertools::detail::enumerated::operator==()'],['../structitertools_1_1detail_1_1prod__iter.html#a742e0808c129557f1c9151f720c4acab',1,'itertools::detail::prod_iter::operator==(prod_iter const &other) const'],['../structitertools_1_1detail_1_1prod__iter.html#a90cb1204f57cf50211bb1cc30d873533',1,'itertools::detail::prod_iter::operator==(sentinel_t< SentinelIter > const &s) const'],['../structitertools_1_1detail_1_1multiplied.html#a77eb92fdb748c6737ea3460646616e6c',1,'itertools::detail::multiplied::operator==()'],['../classitertools_1_1range.html#abed6f4cb963eed9396c27318e83f557f',1,'itertools::range::operator==()'],['../structitertools_1_1range_1_1const__iterator.html#a83ed0f2b586a73ed9402919a541d4cb1',1,'itertools::range::const_iterator::operator==()'],['../structitertools_1_1detail_1_1sliced.html#a65e3f08d80c568acc34df242bb3b4fc8',1,'itertools::detail::sliced::operator==()'],['../structitertools_1_1detail_1_1stride__iter.html#a9979f34ce6c804ef286712dea4cebaa3',1,'itertools::detail::stride_iter::operator==()'],['../structitertools_1_1detail_1_1strided.html#a8f7960e4bf498ceea275b872b273eb39',1,'itertools::detail::strided::operator==()'],['../structitertools_1_1detail_1_1transform__iter.html#a26f0422b41e94d42b36864e059b20db9',1,'itertools::detail::transform_iter::operator==(transform_iter const &other) const'],['../structitertools_1_1detail_1_1transform__iter.html#a90cb1204f57cf50211bb1cc30d873533',1,'itertools::detail::transform_iter::operator==(sentinel_t< SentinelIter > const &s) const'],['../structitertools_1_1detail_1_1zip__iter.html#a931e527af48ecc6b4b7a287025c2f66f',1,'itertools::detail::zip_iter::operator==(zip_iter const &other) const'],['../structitertools_1_1detail_1_1zip__iter.html#a90cb1204f57cf50211bb1cc30d873533',1,'itertools::detail::zip_iter::operator==(sentinel_t< SentinelIter > const &s) const'],['../structitertools_1_1detail_1_1zipped.html#ae3dcb2e2397d0e2a07ec496f2c4a282b',1,'itertools::detail::zipped::operator==()']]], + ['options_10',['Custom CMake options',['../installation.html#cmake_options',1,'']]], + ['other_11',['Other',['../integration.html#other',1,'']]], + ['overview_12',['Overview',['../index.html',1,'']]] +]; diff --git a/docs/unstable/search/all_f.js b/docs/unstable/search/all_f.js new file mode 100644 index 0000000..9f6c335 --- /dev/null +++ b/docs/unstable/search/all_f.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['pointer_0',['pointer',['../structitertools_1_1iterator__facade_3_01Iter_00_01Value_00_01std_1_1forward__iterator__tag_00_01Reference_00_01Difference_01_4.html#af5f6b56c4f0b1991cb13dcea6ae7e5f6',1,'itertools::iterator_facade< Iter, Value, std::forward_iterator_tag, Reference, Difference >::pointer'],['../structitertools_1_1range_1_1const__iterator.html#a6fc03915d7633dfe3c2b7a160f410549',1,'itertools::range::const_iterator::pointer']]], + ['pos_1',['pos',['../structitertools_1_1range_1_1const__iterator.html#a330186836325896007e7434e07afa75f',1,'itertools::range::const_iterator']]], + ['print_20hpp_2',['print.hpp',['../examples.html#print_header',1,'']]], + ['prod_5fiter_3',['prod_iter',['../structitertools_1_1detail_1_1prod__iter.html',1,'prod_iter< EndIters, Iters >'],['../structitertools_1_1detail_1_1prod__iter.html#a2518b2f5de89f0a4ce6ebce454ca0526',1,'itertools::detail::prod_iter::prod_iter()=default'],['../structitertools_1_1detail_1_1prod__iter.html#ab1ca475b66b691d17060385c242c6bf6',1,'itertools::detail::prod_iter::prod_iter(std::tuple< Iters... > its_begin, EndIters its_end)']]], + ['product_4',['product',['../group__range__adapting__functions.html#gaf96111e6c12335ab924bc9a337f96954',1,'itertools']]], + ['product_2ehpp_5',['product.hpp',['../product_8hpp.html',1,'']]], + ['product_5frange_6',['product_range',['../group__integer__range.html#ga54acf549a00cac8dc2a4bbeb6f7b13ad',1,'itertools::product_range(Is... is)'],['../group__integer__range.html#gae77e13af5d2614644b8596660f282b7f',1,'itertools::product_range(std::tuple< Is... > const &idx_tpl)'],['../group__integer__range.html#gaa4b862940e2bc4d095c040222e0dda19',1,'itertools::product_range(std::array< I, N > const &idx_arr)']]], + ['projects_7',['Integration in C++ projects',['../integration.html',1,'']]] +]; diff --git a/docs/unstable/search/classes_0.js b/docs/unstable/search/classes_0.js new file mode 100644 index 0000000..cd38c2d --- /dev/null +++ b/docs/unstable/search/classes_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['all_5ft_0',['all_t',['../structitertools_1_1range_1_1all__t.html',1,'itertools::range']]] +]; diff --git a/docs/unstable/search/classes_1.js b/docs/unstable/search/classes_1.js new file mode 100644 index 0000000..7f89e1e --- /dev/null +++ b/docs/unstable/search/classes_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['const_5fiterator_0',['const_iterator',['../structitertools_1_1range_1_1const__iterator.html',1,'itertools::range']]] +]; diff --git a/docs/unstable/search/classes_2.js b/docs/unstable/search/classes_2.js new file mode 100644 index 0000000..3868ff5 --- /dev/null +++ b/docs/unstable/search/classes_2.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['enum_5fiter_0',['enum_iter',['../structitertools_1_1detail_1_1enum__iter.html',1,'itertools::detail']]], + ['enumerated_1',['enumerated',['../structitertools_1_1detail_1_1enumerated.html',1,'itertools::detail']]] +]; diff --git a/docs/unstable/search/classes_3.js b/docs/unstable/search/classes_3.js new file mode 100644 index 0000000..e2661db --- /dev/null +++ b/docs/unstable/search/classes_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['iterator_5ffacade_3c_20iter_2c_20value_2c_20std_3a_3aforward_5fiterator_5ftag_2c_20reference_2c_20difference_20_3e_0',['iterator_facade< Iter, Value, std::forward_iterator_tag, Reference, Difference >',['../structitertools_1_1iterator__facade_3_01Iter_00_01Value_00_01std_1_1forward__iterator__tag_00_01Reference_00_01Difference_01_4.html',1,'itertools']]] +]; diff --git a/docs/unstable/search/classes_4.js b/docs/unstable/search/classes_4.js new file mode 100644 index 0000000..b6e2235 --- /dev/null +++ b/docs/unstable/search/classes_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['multiplied_0',['multiplied',['../structitertools_1_1detail_1_1multiplied.html',1,'itertools::detail']]] +]; diff --git a/docs/unstable/search/classes_5.js b/docs/unstable/search/classes_5.js new file mode 100644 index 0000000..c50e9b0 --- /dev/null +++ b/docs/unstable/search/classes_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['prod_5fiter_0',['prod_iter',['../structitertools_1_1detail_1_1prod__iter.html',1,'itertools::detail']]] +]; diff --git a/docs/unstable/search/classes_6.js b/docs/unstable/search/classes_6.js new file mode 100644 index 0000000..0e7d1f2 --- /dev/null +++ b/docs/unstable/search/classes_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['range_0',['range',['../classitertools_1_1range.html',1,'itertools']]] +]; diff --git a/docs/unstable/search/classes_7.js b/docs/unstable/search/classes_7.js new file mode 100644 index 0000000..cf7eebe --- /dev/null +++ b/docs/unstable/search/classes_7.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['sentinel_5ft_0',['sentinel_t',['../structitertools_1_1sentinel__t.html',1,'itertools']]], + ['sliced_1',['sliced',['../structitertools_1_1detail_1_1sliced.html',1,'itertools::detail']]], + ['stride_5fiter_2',['stride_iter',['../structitertools_1_1detail_1_1stride__iter.html',1,'itertools::detail']]], + ['strided_3',['strided',['../structitertools_1_1detail_1_1strided.html',1,'itertools::detail']]] +]; diff --git a/docs/unstable/search/classes_8.js b/docs/unstable/search/classes_8.js new file mode 100644 index 0000000..3aeece6 --- /dev/null +++ b/docs/unstable/search/classes_8.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['transform_5fiter_0',['transform_iter',['../structitertools_1_1detail_1_1transform__iter.html',1,'itertools::detail']]], + ['transformed_1',['transformed',['../structitertools_1_1detail_1_1transformed.html',1,'itertools::detail']]] +]; diff --git a/docs/unstable/search/classes_9.js b/docs/unstable/search/classes_9.js new file mode 100644 index 0000000..2ec5caf --- /dev/null +++ b/docs/unstable/search/classes_9.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['zip_5fiter_0',['zip_iter',['../structitertools_1_1detail_1_1zip__iter.html',1,'itertools::detail']]], + ['zipped_1',['zipped',['../structitertools_1_1detail_1_1zipped.html',1,'itertools::detail']]] +]; diff --git a/docs/unstable/search/close.svg b/docs/unstable/search/close.svg new file mode 100644 index 0000000..337d6cc --- /dev/null +++ b/docs/unstable/search/close.svg @@ -0,0 +1,18 @@ + + + + + + diff --git a/docs/unstable/search/files_0.js b/docs/unstable/search/files_0.js new file mode 100644 index 0000000..d201ad7 --- /dev/null +++ b/docs/unstable/search/files_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['enumerate_2ehpp_0',['enumerate.hpp',['../enumerate_8hpp.html',1,'']]] +]; diff --git a/docs/unstable/search/files_1.js b/docs/unstable/search/files_1.js new file mode 100644 index 0000000..b6a101f --- /dev/null +++ b/docs/unstable/search/files_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['iterator_5ffacade_2ehpp_0',['iterator_facade.hpp',['../iterator__facade_8hpp.html',1,'']]], + ['itertools_2ehpp_1',['itertools.hpp',['../itertools_8hpp.html',1,'']]] +]; diff --git a/docs/unstable/search/files_2.js b/docs/unstable/search/files_2.js new file mode 100644 index 0000000..12ad3e6 --- /dev/null +++ b/docs/unstable/search/files_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['omp_5fchunk_2ehpp_0',['omp_chunk.hpp',['../omp__chunk_8hpp.html',1,'']]] +]; diff --git a/docs/unstable/search/files_3.js b/docs/unstable/search/files_3.js new file mode 100644 index 0000000..db20f86 --- /dev/null +++ b/docs/unstable/search/files_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['product_2ehpp_0',['product.hpp',['../product_8hpp.html',1,'']]] +]; diff --git a/docs/unstable/search/files_4.js b/docs/unstable/search/files_4.js new file mode 100644 index 0000000..998baf7 --- /dev/null +++ b/docs/unstable/search/files_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['range_2ehpp_0',['range.hpp',['../range_8hpp.html',1,'']]] +]; diff --git a/docs/unstable/search/files_5.js b/docs/unstable/search/files_5.js new file mode 100644 index 0000000..7c8c6f3 --- /dev/null +++ b/docs/unstable/search/files_5.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['sentinel_2ehpp_0',['sentinel.hpp',['../sentinel_8hpp.html',1,'']]], + ['slice_2ehpp_1',['slice.hpp',['../slice_8hpp.html',1,'']]], + ['stride_2ehpp_2',['stride.hpp',['../stride_8hpp.html',1,'']]] +]; diff --git a/docs/unstable/search/files_6.js b/docs/unstable/search/files_6.js new file mode 100644 index 0000000..74a13b8 --- /dev/null +++ b/docs/unstable/search/files_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['transform_2ehpp_0',['transform.hpp',['../transform_8hpp.html',1,'']]] +]; diff --git a/docs/unstable/search/files_7.js b/docs/unstable/search/files_7.js new file mode 100644 index 0000000..4c0b08a --- /dev/null +++ b/docs/unstable/search/files_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['utils_2ehpp_0',['utils.hpp',['../utils_8hpp.html',1,'']]] +]; diff --git a/docs/unstable/search/files_8.js b/docs/unstable/search/files_8.js new file mode 100644 index 0000000..de3a851 --- /dev/null +++ b/docs/unstable/search/files_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['zip_2ehpp_0',['zip.hpp',['../zip_8hpp.html',1,'']]] +]; diff --git a/docs/unstable/search/functions_0.js b/docs/unstable/search/functions_0.js new file mode 100644 index 0000000..375b143 --- /dev/null +++ b/docs/unstable/search/functions_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['atend_0',['atEnd',['../structitertools_1_1range_1_1const__iterator.html#a496b6e2de8e93e0e7965ccf8d25b8657',1,'itertools::range::const_iterator']]] +]; diff --git a/docs/unstable/search/functions_1.js b/docs/unstable/search/functions_1.js new file mode 100644 index 0000000..1f25492 --- /dev/null +++ b/docs/unstable/search/functions_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['begin_0',['begin',['../structitertools_1_1detail_1_1enumerated.html#a979556eb331ec35eb33472a90a160f99',1,'itertools::detail::enumerated::begin() noexcept'],['../structitertools_1_1detail_1_1enumerated.html#a1ca1fc2c9fc3e169d5d0decfd1e54221',1,'itertools::detail::enumerated::begin() const noexcept'],['../structitertools_1_1detail_1_1multiplied.html#a979556eb331ec35eb33472a90a160f99',1,'itertools::detail::multiplied::begin() noexcept'],['../structitertools_1_1detail_1_1multiplied.html#a1ca1fc2c9fc3e169d5d0decfd1e54221',1,'itertools::detail::multiplied::begin() const noexcept'],['../classitertools_1_1range.html#a1ca1fc2c9fc3e169d5d0decfd1e54221',1,'itertools::range::begin()'],['../structitertools_1_1detail_1_1sliced.html#a979556eb331ec35eb33472a90a160f99',1,'itertools::detail::sliced::begin() noexcept'],['../structitertools_1_1detail_1_1sliced.html#a1ca1fc2c9fc3e169d5d0decfd1e54221',1,'itertools::detail::sliced::begin() const noexcept'],['../structitertools_1_1detail_1_1strided.html#a979556eb331ec35eb33472a90a160f99',1,'itertools::detail::strided::begin() noexcept'],['../structitertools_1_1detail_1_1strided.html#a1ca1fc2c9fc3e169d5d0decfd1e54221',1,'itertools::detail::strided::begin() const noexcept'],['../structitertools_1_1detail_1_1transformed.html#a1ca1fc2c9fc3e169d5d0decfd1e54221',1,'itertools::detail::transformed::begin()'],['../structitertools_1_1detail_1_1zipped.html#a979556eb331ec35eb33472a90a160f99',1,'itertools::detail::zipped::begin() noexcept'],['../structitertools_1_1detail_1_1zipped.html#a1ca1fc2c9fc3e169d5d0decfd1e54221',1,'itertools::detail::zipped::begin() const noexcept']]] +]; diff --git a/docs/unstable/search/functions_2.js b/docs/unstable/search/functions_2.js new file mode 100644 index 0000000..236b361 --- /dev/null +++ b/docs/unstable/search/functions_2.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['cbegin_0',['cbegin',['../structitertools_1_1detail_1_1enumerated.html#abeb76f7f3414f270020e6f467586bd93',1,'itertools::detail::enumerated::cbegin()'],['../structitertools_1_1detail_1_1multiplied.html#abeb76f7f3414f270020e6f467586bd93',1,'itertools::detail::multiplied::cbegin()'],['../classitertools_1_1range.html#abeb76f7f3414f270020e6f467586bd93',1,'itertools::range::cbegin()'],['../structitertools_1_1detail_1_1sliced.html#abeb76f7f3414f270020e6f467586bd93',1,'itertools::detail::sliced::cbegin()'],['../structitertools_1_1detail_1_1strided.html#abeb76f7f3414f270020e6f467586bd93',1,'itertools::detail::strided::cbegin()'],['../structitertools_1_1detail_1_1transformed.html#abeb76f7f3414f270020e6f467586bd93',1,'itertools::detail::transformed::cbegin()'],['../structitertools_1_1detail_1_1zipped.html#abeb76f7f3414f270020e6f467586bd93',1,'itertools::detail::zipped::cbegin()']]], + ['cend_1',['cend',['../structitertools_1_1detail_1_1enumerated.html#a4e9d92bb659820718c9deb97b022c7ba',1,'itertools::detail::enumerated::cend()'],['../structitertools_1_1detail_1_1multiplied.html#a4e9d92bb659820718c9deb97b022c7ba',1,'itertools::detail::multiplied::cend()'],['../classitertools_1_1range.html#a9859a454bb6f50c654e280274d6a9d13',1,'itertools::range::cend()'],['../structitertools_1_1detail_1_1sliced.html#a9859a454bb6f50c654e280274d6a9d13',1,'itertools::detail::sliced::cend()'],['../structitertools_1_1detail_1_1strided.html#a9859a454bb6f50c654e280274d6a9d13',1,'itertools::detail::strided::cend()'],['../structitertools_1_1detail_1_1transformed.html#a4e9d92bb659820718c9deb97b022c7ba',1,'itertools::detail::transformed::cend()'],['../structitertools_1_1detail_1_1zipped.html#a4e9d92bb659820718c9deb97b022c7ba',1,'itertools::detail::zipped::cend()']]], + ['chunk_5frange_2',['chunk_range',['../group__utilities.html#gaaab750a8b80fe5326464d04ade5f072c',1,'itertools']]] +]; diff --git a/docs/unstable/search/functions_3.js b/docs/unstable/search/functions_3.js new file mode 100644 index 0000000..c2d4028 --- /dev/null +++ b/docs/unstable/search/functions_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['dereference_0',['dereference',['../structitertools_1_1detail_1_1enum__iter.html#adbcb7ba9af71e6640ec3802dc4a825a0',1,'itertools::detail::enum_iter::dereference()'],['../structitertools_1_1detail_1_1prod__iter.html#adbcb7ba9af71e6640ec3802dc4a825a0',1,'itertools::detail::prod_iter::dereference()'],['../structitertools_1_1detail_1_1stride__iter.html#adbcb7ba9af71e6640ec3802dc4a825a0',1,'itertools::detail::stride_iter::dereference()'],['../structitertools_1_1detail_1_1transform__iter.html#adbcb7ba9af71e6640ec3802dc4a825a0',1,'itertools::detail::transform_iter::dereference()'],['../structitertools_1_1detail_1_1zip__iter.html#adbcb7ba9af71e6640ec3802dc4a825a0',1,'itertools::detail::zip_iter::dereference()']]], + ['distance_1',['distance',['../group__utilities.html#gac0fa2fb9ac9b6525d934afa733f1104e',1,'itertools']]] +]; diff --git a/docs/unstable/search/functions_4.js b/docs/unstable/search/functions_4.js new file mode 100644 index 0000000..047ae89 --- /dev/null +++ b/docs/unstable/search/functions_4.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['end_0',['end',['../structitertools_1_1detail_1_1enumerated.html#aae80d7cf5cd85b47834fb8752d7b1712',1,'itertools::detail::enumerated::end() noexcept'],['../structitertools_1_1detail_1_1enumerated.html#a10fc66af197e25cb554f58a721a473a3',1,'itertools::detail::enumerated::end() const noexcept'],['../structitertools_1_1detail_1_1multiplied.html#aae80d7cf5cd85b47834fb8752d7b1712',1,'itertools::detail::multiplied::end() noexcept'],['../structitertools_1_1detail_1_1multiplied.html#a10fc66af197e25cb554f58a721a473a3',1,'itertools::detail::multiplied::end() const noexcept'],['../classitertools_1_1range.html#a5b9b57293fae9b18b26349ac0b3fdcd3',1,'itertools::range::end()'],['../structitertools_1_1detail_1_1sliced.html#afc5380afa64b233d0df01a147616974b',1,'itertools::detail::sliced::end() noexcept'],['../structitertools_1_1detail_1_1sliced.html#a5b9b57293fae9b18b26349ac0b3fdcd3',1,'itertools::detail::sliced::end() const noexcept'],['../structitertools_1_1detail_1_1strided.html#afc5380afa64b233d0df01a147616974b',1,'itertools::detail::strided::end() noexcept'],['../structitertools_1_1detail_1_1strided.html#a5b9b57293fae9b18b26349ac0b3fdcd3',1,'itertools::detail::strided::end() const noexcept'],['../structitertools_1_1detail_1_1transformed.html#a10fc66af197e25cb554f58a721a473a3',1,'itertools::detail::transformed::end()'],['../structitertools_1_1detail_1_1zipped.html#aae80d7cf5cd85b47834fb8752d7b1712',1,'itertools::detail::zipped::end() noexcept'],['../structitertools_1_1detail_1_1zipped.html#a10fc66af197e25cb554f58a721a473a3',1,'itertools::detail::zipped::end() const noexcept']]], + ['enum_5fiter_1',['enum_iter',['../structitertools_1_1detail_1_1enum__iter.html#af21352ae9824b6aa025bee147caa3a6c',1,'itertools::detail::enum_iter::enum_iter()=default'],['../structitertools_1_1detail_1_1enum__iter.html#a6517a9748e3f65eaa90fddb6635d0460',1,'itertools::detail::enum_iter::enum_iter(Iter it)']]], + ['enumerate_2',['enumerate',['../group__range__adapting__functions.html#ga2fb6627d7acfb88befe857406a77fa41',1,'itertools']]] +]; diff --git a/docs/unstable/search/functions_5.js b/docs/unstable/search/functions_5.js new file mode 100644 index 0000000..e15b73b --- /dev/null +++ b/docs/unstable/search/functions_5.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['first_0',['first',['../classitertools_1_1range.html#ad9dc79b2301c5155369e1b4fc427933a',1,'itertools::range']]], + ['foreach_1',['foreach',['../group__integer__range.html#ga6ca936493fdef081fcc8d718a1951124',1,'itertools']]] +]; diff --git a/docs/unstable/search/functions_6.js b/docs/unstable/search/functions_6.js new file mode 100644 index 0000000..cdbbe08 --- /dev/null +++ b/docs/unstable/search/functions_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['increment_0',['increment',['../structitertools_1_1detail_1_1enum__iter.html#aeb2624c7a86b765725fd80cd426e147d',1,'itertools::detail::enum_iter::increment()'],['../structitertools_1_1detail_1_1prod__iter.html#aeb2624c7a86b765725fd80cd426e147d',1,'itertools::detail::prod_iter::increment()'],['../structitertools_1_1detail_1_1stride__iter.html#aeb2624c7a86b765725fd80cd426e147d',1,'itertools::detail::stride_iter::increment()'],['../structitertools_1_1detail_1_1transform__iter.html#aeb2624c7a86b765725fd80cd426e147d',1,'itertools::detail::transform_iter::increment()'],['../structitertools_1_1detail_1_1zip__iter.html#aeb2624c7a86b765725fd80cd426e147d',1,'itertools::detail::zip_iter::increment()']]] +]; diff --git a/docs/unstable/search/functions_7.js b/docs/unstable/search/functions_7.js new file mode 100644 index 0000000..42b3349 --- /dev/null +++ b/docs/unstable/search/functions_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['last_0',['last',['../classitertools_1_1range.html#ac10695d44360766931c40804a4cb2974',1,'itertools::range']]] +]; diff --git a/docs/unstable/search/functions_8.js b/docs/unstable/search/functions_8.js new file mode 100644 index 0000000..00dc910 --- /dev/null +++ b/docs/unstable/search/functions_8.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['make_5fproduct_0',['make_product',['../group__range__adapting__functions.html#gada42b52534da5f212adeff038ed19025',1,'itertools::make_product(std::array< R, N > &arr)'],['../group__range__adapting__functions.html#ga589b528fb3003669ae787d4702aa9165',1,'itertools::make_product(std::array< R, N > const &arr)']]], + ['make_5fsentinel_1',['make_sentinel',['../group__utilities.html#ga90e665b48c5bfe5f1b7590b20efdacb1',1,'itertools']]], + ['make_5fvector_5ffrom_5frange_2',['make_vector_from_range',['../group__utilities.html#ga8aa90a982e5cb521f6cdfbb11e6cb459',1,'itertools']]], + ['multiplied_3',['multiplied',['../structitertools_1_1detail_1_1multiplied.html#af0fef97bb8eb9b41292a540aaf1465a7',1,'itertools::detail::multiplied']]] +]; diff --git a/docs/unstable/search/functions_9.js b/docs/unstable/search/functions_9.js new file mode 100644 index 0000000..7a32573 --- /dev/null +++ b/docs/unstable/search/functions_9.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['omp_5fchunk_0',['omp_chunk',['../group__utilities.html#ga1ddd62d4c0005b280ac89edc54ece3f4',1,'itertools']]], + ['operator_21_3d_1',['operator!=',['../structitertools_1_1range_1_1const__iterator.html#a316eb6ffafbd35ded14d65683983c242',1,'itertools::range::const_iterator']]], + ['operator_2a_2',['operator*',['../structitertools_1_1iterator__facade_3_01Iter_00_01Value_00_01std_1_1forward__iterator__tag_00_01Reference_00_01Difference_01_4.html#a817a25e45792fa1bcb65d85bb5978f9d',1,'itertools::iterator_facade< Iter, Value, std::forward_iterator_tag, Reference, Difference >::operator*()'],['../structitertools_1_1range_1_1const__iterator.html#a9a72f48f713fecfdc702d7c7b511fc7e',1,'itertools::range::const_iterator::operator*()']]], + ['operator_2b_3',['operator+',['../classitertools_1_1range.html#abad8057e61575ef2c064db0dd9c1a56e',1,'itertools::range']]], + ['operator_2b_2b_4',['operator++',['../structitertools_1_1iterator__facade_3_01Iter_00_01Value_00_01std_1_1forward__iterator__tag_00_01Reference_00_01Difference_01_4.html#a379c6d0d71d28479eb8b8cf7354d6308',1,'itertools::iterator_facade< Iter, Value, std::forward_iterator_tag, Reference, Difference >::operator++()'],['../structitertools_1_1iterator__facade_3_01Iter_00_01Value_00_01std_1_1forward__iterator__tag_00_01Reference_00_01Difference_01_4.html#a31cbe34b2c8d6ed76ce08a829404f521',1,'itertools::iterator_facade< Iter, Value, std::forward_iterator_tag, Reference, Difference >::operator++(int)'],['../structitertools_1_1range_1_1const__iterator.html#a494fc9fac2ab7a7419b59a236e93dcaf',1,'itertools::range::const_iterator::operator++() noexcept'],['../structitertools_1_1range_1_1const__iterator.html#acc00f9296a7dd5469fe734f54a0fede3',1,'itertools::range::const_iterator::operator++(int) noexcept']]], + ['operator_2d_3e_5',['operator->',['../structitertools_1_1iterator__facade_3_01Iter_00_01Value_00_01std_1_1forward__iterator__tag_00_01Reference_00_01Difference_01_4.html#afb2ec96f93c6f36bd9c50e8cc4dce686',1,'itertools::iterator_facade< Iter, Value, std::forward_iterator_tag, Reference, Difference >::operator->()'],['../structitertools_1_1range_1_1const__iterator.html#a2226ed898b88ce467b206387148c800d',1,'itertools::range::const_iterator::operator->()']]], + ['operator_3d_6',['operator=',['../structitertools_1_1detail_1_1transform__iter.html#a3d5d867962dba349949ae0ef4913fe48',1,'itertools::detail::transform_iter::operator=(transform_iter &&)=default'],['../structitertools_1_1detail_1_1transform__iter.html#a39cdece90a29a09476a805cd0f33dfde',1,'itertools::detail::transform_iter::operator=(transform_iter const &other)']]], + ['operator_3d_3d_7',['operator==',['../structitertools_1_1detail_1_1enum__iter.html#a1018aa40d7da35d94cf467d302a77953',1,'itertools::detail::enum_iter::operator==(enum_iter const &other) const'],['../structitertools_1_1detail_1_1enum__iter.html#a90cb1204f57cf50211bb1cc30d873533',1,'itertools::detail::enum_iter::operator==(sentinel_t< SentinelIter > const &s) const'],['../structitertools_1_1detail_1_1enumerated.html#a0eb854b5ef2e0fb3930cd2d814e4aed8',1,'itertools::detail::enumerated::operator==()'],['../structitertools_1_1detail_1_1prod__iter.html#a742e0808c129557f1c9151f720c4acab',1,'itertools::detail::prod_iter::operator==(prod_iter const &other) const'],['../structitertools_1_1detail_1_1prod__iter.html#a90cb1204f57cf50211bb1cc30d873533',1,'itertools::detail::prod_iter::operator==(sentinel_t< SentinelIter > const &s) const'],['../structitertools_1_1detail_1_1multiplied.html#a77eb92fdb748c6737ea3460646616e6c',1,'itertools::detail::multiplied::operator==()'],['../classitertools_1_1range.html#abed6f4cb963eed9396c27318e83f557f',1,'itertools::range::operator==()'],['../structitertools_1_1range_1_1const__iterator.html#a83ed0f2b586a73ed9402919a541d4cb1',1,'itertools::range::const_iterator::operator==()'],['../structitertools_1_1detail_1_1sliced.html#a65e3f08d80c568acc34df242bb3b4fc8',1,'itertools::detail::sliced::operator==()'],['../structitertools_1_1detail_1_1stride__iter.html#a9979f34ce6c804ef286712dea4cebaa3',1,'itertools::detail::stride_iter::operator==()'],['../structitertools_1_1detail_1_1strided.html#a8f7960e4bf498ceea275b872b273eb39',1,'itertools::detail::strided::operator==()'],['../structitertools_1_1detail_1_1transform__iter.html#a26f0422b41e94d42b36864e059b20db9',1,'itertools::detail::transform_iter::operator==(transform_iter const &other) const'],['../structitertools_1_1detail_1_1transform__iter.html#a90cb1204f57cf50211bb1cc30d873533',1,'itertools::detail::transform_iter::operator==(sentinel_t< SentinelIter > const &s) const'],['../structitertools_1_1detail_1_1zip__iter.html#a931e527af48ecc6b4b7a287025c2f66f',1,'itertools::detail::zip_iter::operator==(zip_iter const &other) const'],['../structitertools_1_1detail_1_1zip__iter.html#a90cb1204f57cf50211bb1cc30d873533',1,'itertools::detail::zip_iter::operator==(sentinel_t< SentinelIter > const &s) const'],['../structitertools_1_1detail_1_1zipped.html#ae3dcb2e2397d0e2a07ec496f2c4a282b',1,'itertools::detail::zipped::operator==()']]] +]; diff --git a/docs/unstable/search/functions_a.js b/docs/unstable/search/functions_a.js new file mode 100644 index 0000000..a482022 --- /dev/null +++ b/docs/unstable/search/functions_a.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['prod_5fiter_0',['prod_iter',['../structitertools_1_1detail_1_1prod__iter.html#a2518b2f5de89f0a4ce6ebce454ca0526',1,'itertools::detail::prod_iter::prod_iter()=default'],['../structitertools_1_1detail_1_1prod__iter.html#ab1ca475b66b691d17060385c242c6bf6',1,'itertools::detail::prod_iter::prod_iter(std::tuple< Iters... > its_begin, EndIters its_end)']]], + ['product_1',['product',['../group__range__adapting__functions.html#gaf96111e6c12335ab924bc9a337f96954',1,'itertools']]], + ['product_5frange_2',['product_range',['../group__integer__range.html#ga54acf549a00cac8dc2a4bbeb6f7b13ad',1,'itertools::product_range(Is... is)'],['../group__integer__range.html#gae77e13af5d2614644b8596660f282b7f',1,'itertools::product_range(std::tuple< Is... > const &idx_tpl)'],['../group__integer__range.html#gaa4b862940e2bc4d095c040222e0dda19',1,'itertools::product_range(std::array< I, N > const &idx_arr)']]] +]; diff --git a/docs/unstable/search/functions_b.js b/docs/unstable/search/functions_b.js new file mode 100644 index 0000000..2d50c28 --- /dev/null +++ b/docs/unstable/search/functions_b.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['range_0',['range',['../classitertools_1_1range.html#a745e7b5aea3e3174f1e7344c7cba1dd8',1,'itertools::range::range()=default'],['../classitertools_1_1range.html#aa4d307c1b3ce350a07d5d1a09061f3bb',1,'itertools::range::range(long first, long last) noexcept'],['../classitertools_1_1range.html#af9c9bf146a3cd80e4293d287c0e9b260',1,'itertools::range::range(long first, long last, long step)'],['../classitertools_1_1range.html#a7dee4db5fa3b19a60e8861212aa090d3',1,'itertools::range::range(long last)']]] +]; diff --git a/docs/unstable/search/functions_c.js b/docs/unstable/search/functions_c.js new file mode 100644 index 0000000..25efe61 --- /dev/null +++ b/docs/unstable/search/functions_c.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['size_0',['size',['../classitertools_1_1range.html#ab99f0f3fab6ac9bf27501d18c92b1618',1,'itertools::range::size()'],['../structitertools_1_1detail_1_1sliced.html#a50518b00f2d74bd892935ee252b7fb77',1,'itertools::detail::sliced::size()']]], + ['slice_1',['slice',['../group__range__adapting__functions.html#ga0fab50176cc3df12cd96bbdf829d7e6f',1,'itertools']]], + ['step_2',['step',['../classitertools_1_1range.html#a52f85722bec4d0a2741d948176d82b4c',1,'itertools::range']]], + ['stride_3',['stride',['../group__range__adapting__functions.html#gae0865cb967e162fe889c670bceb76e4f',1,'itertools']]], + ['stride_5fiter_4',['stride_iter',['../structitertools_1_1detail_1_1stride__iter.html#a69aba902b306a86ede6e9dd5467c1bab',1,'itertools::detail::stride_iter::stride_iter()=default'],['../structitertools_1_1detail_1_1stride__iter.html#aa08a56304f5d5842d8e5102cbda0bba9',1,'itertools::detail::stride_iter::stride_iter(Iter it, std::ptrdiff_t stride)']]] +]; diff --git a/docs/unstable/search/functions_d.js b/docs/unstable/search/functions_d.js new file mode 100644 index 0000000..ae3564e --- /dev/null +++ b/docs/unstable/search/functions_d.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['transform_0',['transform',['../group__range__adapting__functions.html#ga7b31d5cff96c3dd4a24cf8a63e4f41a7',1,'itertools']]], + ['transform_5fiter_1',['transform_iter',['../structitertools_1_1detail_1_1transform__iter.html#a03d6ef9a76b3af9f07212af995a73aaf',1,'itertools::detail::transform_iter::transform_iter()=default'],['../structitertools_1_1detail_1_1transform__iter.html#a14a06b63a45d5cdcd927273b4f09f4d7',1,'itertools::detail::transform_iter::transform_iter(Iter it, F lambda)'],['../structitertools_1_1detail_1_1transform__iter.html#a40c718e231f93f7f1f9456573d788934',1,'itertools::detail::transform_iter::transform_iter(transform_iter &&)=default'],['../structitertools_1_1detail_1_1transform__iter.html#ad8c183f3b8b554913dd89b4184ed87b8',1,'itertools::detail::transform_iter::transform_iter(transform_iter const &)=default']]] +]; diff --git a/docs/unstable/search/functions_e.js b/docs/unstable/search/functions_e.js new file mode 100644 index 0000000..5e7fdac --- /dev/null +++ b/docs/unstable/search/functions_e.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['zip_0',['zip',['../group__range__adapting__functions.html#gaf7196a84296d770614fc47322e4ae8cd',1,'itertools']]], + ['zip_5fiter_1',['zip_iter',['../structitertools_1_1detail_1_1zip__iter.html#a819b5bfca6640e6d28ebdcbdd93a1ba7',1,'itertools::detail::zip_iter::zip_iter()=default'],['../structitertools_1_1detail_1_1zip__iter.html#a824a069d56aca63de6136ee1a5ab60ea',1,'itertools::detail::zip_iter::zip_iter(std::tuple< Iters... > its)']]], + ['zipped_2',['zipped',['../structitertools_1_1detail_1_1zipped.html#aa1ad53b6146c5a0003a7ecf4ac6253ed',1,'itertools::detail::zipped']]] +]; diff --git a/docs/unstable/search/groups_0.js b/docs/unstable/search/groups_0.js new file mode 100644 index 0000000..9c010c4 --- /dev/null +++ b/docs/unstable/search/groups_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['adapted_20ranges_0',['Adapted ranges',['../group__adapted__ranges.html',1,'']]], + ['adapting_20functions_1',['Range adapting functions',['../group__range__adapting__functions.html',1,'']]] +]; diff --git a/docs/unstable/search/groups_1.js b/docs/unstable/search/groups_1.js new file mode 100644 index 0000000..949b580 --- /dev/null +++ b/docs/unstable/search/groups_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['functions_0',['Range adapting functions',['../group__range__adapting__functions.html',1,'']]] +]; diff --git a/docs/unstable/search/groups_2.js b/docs/unstable/search/groups_2.js new file mode 100644 index 0000000..e79a160 --- /dev/null +++ b/docs/unstable/search/groups_2.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['integer_20range_0',['Integer range',['../group__integer__range.html',1,'']]], + ['iterators_1',['Range iterators',['../group__range__iterators.html',1,'']]] +]; diff --git a/docs/unstable/search/groups_3.js b/docs/unstable/search/groups_3.js new file mode 100644 index 0000000..2efe0e9 --- /dev/null +++ b/docs/unstable/search/groups_3.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['range_0',['Integer range',['../group__integer__range.html',1,'']]], + ['range_20adapting_20functions_1',['Range adapting functions',['../group__range__adapting__functions.html',1,'']]], + ['range_20iterators_2',['Range iterators',['../group__range__iterators.html',1,'']]], + ['ranges_3',['Adapted ranges',['../group__adapted__ranges.html',1,'']]] +]; diff --git a/docs/unstable/search/groups_4.js b/docs/unstable/search/groups_4.js new file mode 100644 index 0000000..ee24cd1 --- /dev/null +++ b/docs/unstable/search/groups_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['utilities_0',['Utilities',['../group__utilities.html',1,'']]] +]; diff --git a/docs/unstable/search/mag.svg b/docs/unstable/search/mag.svg new file mode 100644 index 0000000..ffb6cf0 --- /dev/null +++ b/docs/unstable/search/mag.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/docs/unstable/search/mag_d.svg b/docs/unstable/search/mag_d.svg new file mode 100644 index 0000000..4122773 --- /dev/null +++ b/docs/unstable/search/mag_d.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/docs/unstable/search/mag_sel.svg b/docs/unstable/search/mag_sel.svg new file mode 100644 index 0000000..553dba8 --- /dev/null +++ b/docs/unstable/search/mag_sel.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/docs/unstable/search/mag_seld.svg b/docs/unstable/search/mag_seld.svg new file mode 100644 index 0000000..c906f84 --- /dev/null +++ b/docs/unstable/search/mag_seld.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/docs/unstable/search/pages_0.js b/docs/unstable/search/pages_0.js new file mode 100644 index 0000000..352b254 --- /dev/null +++ b/docs/unstable/search/pages_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['1_3a_20comparison_20with_20std_3a_3aranges_0',['Example 1: Comparison with std::ranges',['../ex1.html',1,'']]] +]; diff --git a/docs/unstable/search/pages_1.js b/docs/unstable/search/pages_1.js new file mode 100644 index 0000000..3ad2e4d --- /dev/null +++ b/docs/unstable/search/pages_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['api_20documentation_0',['API Documentation',['../documentation.html',1,'']]] +]; diff --git a/docs/unstable/search/pages_2.js b/docs/unstable/search/pages_2.js new file mode 100644 index 0000000..1ce443f --- /dev/null +++ b/docs/unstable/search/pages_2.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['c_20projects_0',['Integration in C++ projects',['../integration.html',1,'']]], + ['changelog_1',['Changelog',['../changelog.html',1,'']]], + ['comparison_20with_20std_3a_3aranges_2',['Example 1: Comparison with std::ranges',['../ex1.html',1,'']]] +]; diff --git a/docs/unstable/search/pages_3.js b/docs/unstable/search/pages_3.js new file mode 100644 index 0000000..94427e8 --- /dev/null +++ b/docs/unstable/search/pages_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['deprecated_20list_0',['Deprecated List',['../deprecated.html',1,'']]], + ['documentation_1',['API Documentation',['../documentation.html',1,'']]] +]; diff --git a/docs/unstable/search/pages_4.js b/docs/unstable/search/pages_4.js new file mode 100644 index 0000000..832df32 --- /dev/null +++ b/docs/unstable/search/pages_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['example_201_3a_20comparison_20with_20std_3a_3aranges_0',['Example 1: Comparison with std::ranges',['../ex1.html',1,'']]], + ['examples_1',['Examples',['../examples.html',1,'']]] +]; diff --git a/docs/unstable/search/pages_5.js b/docs/unstable/search/pages_5.js new file mode 100644 index 0000000..e7312f1 --- /dev/null +++ b/docs/unstable/search/pages_5.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['in_20c_20projects_0',['Integration in C++ projects',['../integration.html',1,'']]], + ['installation_1',['Installation',['../installation.html',1,'']]], + ['integration_20in_20c_20projects_2',['Integration in C++ projects',['../integration.html',1,'']]], + ['issues_3',['Issues',['../issues.html',1,'']]] +]; diff --git a/docs/unstable/search/pages_6.js b/docs/unstable/search/pages_6.js new file mode 100644 index 0000000..1ad91e3 --- /dev/null +++ b/docs/unstable/search/pages_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['list_0',['Deprecated List',['../deprecated.html',1,'']]] +]; diff --git a/docs/unstable/search/pages_7.js b/docs/unstable/search/pages_7.js new file mode 100644 index 0000000..0398f4f --- /dev/null +++ b/docs/unstable/search/pages_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['overview_0',['Overview',['../index.html',1,'']]] +]; diff --git a/docs/unstable/search/pages_8.js b/docs/unstable/search/pages_8.js new file mode 100644 index 0000000..47f6660 --- /dev/null +++ b/docs/unstable/search/pages_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['projects_0',['Integration in C++ projects',['../integration.html',1,'']]] +]; diff --git a/docs/unstable/search/pages_9.js b/docs/unstable/search/pages_9.js new file mode 100644 index 0000000..e4d75d4 --- /dev/null +++ b/docs/unstable/search/pages_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['std_3a_3aranges_0',['Example 1: Comparison with std::ranges',['../ex1.html',1,'']]] +]; diff --git a/docs/unstable/search/pages_a.js b/docs/unstable/search/pages_a.js new file mode 100644 index 0000000..ee53806 --- /dev/null +++ b/docs/unstable/search/pages_a.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['with_20std_3a_3aranges_0',['Example 1: Comparison with std::ranges',['../ex1.html',1,'']]] +]; diff --git a/docs/unstable/search/related_0.js b/docs/unstable/search/related_0.js new file mode 100644 index 0000000..f1c41db --- /dev/null +++ b/docs/unstable/search/related_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['operator_3c_3c_0',['operator<<',['../classitertools_1_1range.html#a71bf4ca37900f2883a8a6a5eb3ae7224',1,'itertools::range']]] +]; diff --git a/docs/unstable/search/search.css b/docs/unstable/search/search.css new file mode 100644 index 0000000..d7b0f90 --- /dev/null +++ b/docs/unstable/search/search.css @@ -0,0 +1,291 @@ +/*---------------- Search Box positioning */ + +#main-menu > li:last-child { + /* This
  • object is the parent of the search bar */ + display: flex; + justify-content: center; + align-items: center; + height: 36px; + margin-right: 1em; +} + +/*---------------- Search box styling */ + +.SRPage * { + font-weight: normal; + line-height: normal; +} + +dark-mode-toggle { + margin-left: 5px; + display: flex; + float: right; +} + +#MSearchBox { + display: inline-block; + white-space : nowrap; + background: white; + border-radius: 0.65em; + box-shadow: inset 0.5px 0.5px 3px 0px #555; + z-index: 102; +} + +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.4em; +} + +#MSearchSelect { + display: inline-block; + vertical-align: middle; + width: 20px; + height: 19px; + background-image: url('mag_sel.svg'); + margin: 0 0 0 0.3em; + padding: 0; +} + +#MSearchSelectExt { + display: inline-block; + vertical-align: middle; + width: 10px; + height: 19px; + background-image: url('mag.svg'); + margin: 0 0 0 0.5em; + padding: 0; +} + + +#MSearchField { + display: inline-block; + vertical-align: middle; + width: 7.5em; + height: 19px; + margin: 0 0.15em; + padding: 0; + line-height: 1em; + border:none; + color: #909090; + outline: none; + font-family: Arial,Verdana,sans-serif; + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + +@media(hover: none) { + /* to avoid zooming on iOS */ + #MSearchField { + font-size: 16px; + } +} + +#MSearchBox .right { + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.4em; +} + +#MSearchClose { + display: none; + font-size: inherit; + background : none; + border: none; + margin: 0; + padding: 0; + outline: none; + +} + +#MSearchCloseImg { + padding: 0.3em; + margin: 0; +} + +.MSearchBoxActive #MSearchField { + color: black; +} + + + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #90A5CE; + background-color: #F9FAFC; + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial,Verdana,sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: black; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: black; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: white; + background-color: #3D578C; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + /*width: 60ex;*/ + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid black; + background-color: #EEF1F7; + z-index:10000; + width: 300px; + height: 400px; + overflow: auto; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +div.SRPage { + margin: 5px 2px; + background-color: #EEF1F7; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: #425E97; + font-family: Arial,Verdana,sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #425E97; + font-family: Arial,Verdana,sans-serif; + font-size: 8pt; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; + font-family: Arial,Verdana,sans-serif; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + font-family: Arial,Verdana,sans-serif; +} + +.SRResult { + display: none; +} + +div.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: url("../tab_a.png"); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/docs/unstable/search/search.js b/docs/unstable/search/search.js new file mode 100644 index 0000000..666af01 --- /dev/null +++ b/docs/unstable/search/search.js @@ -0,0 +1,694 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +const SEARCH_COOKIE_NAME = ''+'search_grp'; + +const searchResults = new SearchResults(); + +/* A class handling everything associated with the search panel. + + Parameters: + name - The name of the global variable that will be + storing this instance. Is needed to be able to set timeouts. + resultPath - path to use for external files +*/ +function SearchBox(name, resultsPath, extension) { + if (!name || !resultsPath) { alert("Missing parameters to SearchBox."); } + if (!extension || extension == "") { extension = ".html"; } + + function getXPos(item) { + let x = 0; + if (item.offsetWidth) { + while (item && item!=document.body) { + x += item.offsetLeft; + item = item.offsetParent; + } + } + return x; + } + + function getYPos(item) { + let y = 0; + if (item.offsetWidth) { + while (item && item!=document.body) { + y += item.offsetTop; + item = item.offsetParent; + } + } + return y; + } + + // ---------- Instance variables + this.name = name; + this.resultsPath = resultsPath; + this.keyTimeout = 0; + this.keyTimeoutLength = 500; + this.closeSelectionTimeout = 300; + this.lastSearchValue = ""; + this.lastResultsPage = ""; + this.hideTimeout = 0; + this.searchIndex = 0; + this.searchActive = false; + this.extension = extension; + + // ----------- DOM Elements + + this.DOMSearchField = () => document.getElementById("MSearchField"); + this.DOMSearchSelect = () => document.getElementById("MSearchSelect"); + this.DOMSearchSelectWindow = () => document.getElementById("MSearchSelectWindow"); + this.DOMPopupSearchResults = () => document.getElementById("MSearchResults"); + this.DOMPopupSearchResultsWindow = () => document.getElementById("MSearchResultsWindow"); + this.DOMSearchClose = () => document.getElementById("MSearchClose"); + this.DOMSearchBox = () => document.getElementById("MSearchBox"); + + // ------------ Event Handlers + + // Called when focus is added or removed from the search field. + this.OnSearchFieldFocus = function(isActive) { + this.Activate(isActive); + } + + this.OnSearchSelectShow = function() { + const searchSelectWindow = this.DOMSearchSelectWindow(); + const searchField = this.DOMSearchSelect(); + + const left = getXPos(searchField); + const top = getYPos(searchField) + searchField.offsetHeight; + + // show search selection popup + searchSelectWindow.style.display='block'; + searchSelectWindow.style.left = left + 'px'; + searchSelectWindow.style.top = top + 'px'; + + // stop selection hide timer + if (this.hideTimeout) { + clearTimeout(this.hideTimeout); + this.hideTimeout=0; + } + return false; // to avoid "image drag" default event + } + + this.OnSearchSelectHide = function() { + this.hideTimeout = setTimeout(this.CloseSelectionWindow.bind(this), + this.closeSelectionTimeout); + } + + // Called when the content of the search field is changed. + this.OnSearchFieldChange = function(evt) { + if (this.keyTimeout) { // kill running timer + clearTimeout(this.keyTimeout); + this.keyTimeout = 0; + } + + const e = evt ? evt : window.event; // for IE + if (e.keyCode==40 || e.keyCode==13) { + if (e.shiftKey==1) { + this.OnSearchSelectShow(); + const win=this.DOMSearchSelectWindow(); + for (let i=0;i do a search + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) { // Up + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } else if (e.keyCode==13 || e.keyCode==27) { + e.stopPropagation(); + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() { + this.keyTimeout = 0; + + // strip leading whitespace + const searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + const code = searchValue.toLowerCase().charCodeAt(0); + let idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) { // surrogate pair + idxChar = searchValue.substr(0, 2); + } + + let jsFile; + let idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) { + const hexCode=idx.toString(16); + jsFile = this.resultsPath + indexSectionNames[this.searchIndex] + '_' + hexCode + '.js'; + } + + const loadJS = function(url, impl, loc) { + const scriptTag = document.createElement('script'); + scriptTag.src = url; + scriptTag.onload = impl; + scriptTag.onreadystatechange = impl; + loc.appendChild(scriptTag); + } + + const domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + const domSearchBox = this.DOMSearchBox(); + const domPopupSearchResults = this.DOMPopupSearchResults(); + const domSearchClose = this.DOMSearchClose(); + const resultsPath = this.resultsPath; + + const handleResults = function() { + document.getElementById("Loading").style.display="none"; + if (typeof searchData !== 'undefined') { + createResults(resultsPath); + document.getElementById("NoMatches").style.display="none"; + } + + if (idx!=-1) { + searchResults.Search(searchValue); + } else { // no file with search results => force empty search results + searchResults.Search('===='); + } + + if (domPopupSearchResultsWindow.style.display!='block') { + domSearchClose.style.display = 'inline-block'; + let left = getXPos(domSearchBox) + 150; + let top = getYPos(domSearchBox) + 20; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + const maxWidth = document.body.clientWidth; + const maxHeight = document.body.clientHeight; + let width = 300; + if (left<10) left=10; + if (width+left+8>maxWidth) width=maxWidth-left-8; + let height = 400; + if (height+top+8>maxHeight) height=maxHeight-top-8; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResultsWindow.style.height = height + 'px'; + } + } + + if (jsFile) { + loadJS(jsFile, handleResults, this.DOMPopupSearchResultsWindow()); + } else { + handleResults(); + } + + this.lastSearchValue = searchValue; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) { + this.DOMSearchBox().className = 'MSearchBoxActive'; + this.searchActive = true; + } else if (!isActive) { // directly remove the panel + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + this.DOMSearchField().value = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults() { + + function convertToId(search) { + let result = ''; + for (let i=0;i. + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) { + const parentElement = document.getElementById(id); + let element = parentElement.firstChild; + + while (element && element!=parentElement) { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') { + return element; + } + + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) { + element = element.firstChild; + } else if (element.nextSibling) { + element = element.nextSibling; + } else { + do { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) { + const element = this.FindChildElement(id); + if (element) { + if (element.style.display == 'block') { + element.style.display = 'none'; + } else { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) { + if (!search) { // get search word from URL + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + const resultRows = document.getElementsByTagName("div"); + let matches = 0; + + let i = 0; + while (i < resultRows.length) { + const row = resultRows.item(i); + if (row.className == "SRResult") { + let rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) { + row.style.display = 'block'; + matches++; + } else { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) { // no results + document.getElementById("NoMatches").style.display='block'; + } else { // at least one result + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) { + let focusItem; + for (;;) { + const focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { + break; + } else if (!focusItem) { // last element + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) { + let focusItem; + for (;;) { + const focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { + break; + } else if (!focusItem) { // last element + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) { + if (e.type == "keydown") { + this.repeatOn = false; + this.lastKey = e.keyCode; + } else if (e.type == "keypress") { + if (!this.repeatOn) { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } else if (e.type == "keyup") { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) { // Up + const newIndex = itemIndex-1; + let focusItem = this.NavPrev(newIndex); + if (focusItem) { + let child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') { // children visible + let n=0; + let tmpElem; + for (;;) { // search for last child + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) { + focusItem = tmpElem; + } else { // found it! + break; + } + n++; + } + } + } + if (focusItem) { + focusItem.focus(); + } else { // return focus to search field + document.getElementById("MSearchField").focus(); + } + } else if (this.lastKey==40) { // Down + const newIndex = itemIndex+1; + let focusItem; + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') { // children visible + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } else if (this.lastKey==39) { // Right + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } else if (this.lastKey==37) { // Left + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } else if (this.lastKey==27) { // Escape + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } else if (this.lastKey==13) { // Enter + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) { // Up + if (childIndex>0) { + const newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } else { // already at first child, jump to parent + document.getElementById('Item'+itemIndex).focus(); + } + } else if (this.lastKey==40) { // Down + const newIndex = childIndex+1; + let elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) { // last child, jump to parent next parent + elem = this.NavNext(itemIndex+1); + } + if (elem) { + elem.focus(); + } + } else if (this.lastKey==27) { // Escape + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } else if (this.lastKey==13) { // Enter + return true; + } + return false; + } +} + +function createResults(resultsPath) { + + function setKeyActions(elem,action) { + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); + } + + function setClassAttr(elem,attr) { + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); + } + + const results = document.getElementById("SRResults"); + results.innerHTML = ''; + searchData.forEach((elem,index) => { + const id = elem[0]; + const srResult = document.createElement('div'); + srResult.setAttribute('id','SR_'+id); + setClassAttr(srResult,'SRResult'); + const srEntry = document.createElement('div'); + setClassAttr(srEntry,'SREntry'); + const srLink = document.createElement('a'); + srLink.setAttribute('id','Item'+index); + setKeyActions(srLink,'return searchResults.Nav(event,'+index+')'); + setClassAttr(srLink,'SRSymbol'); + srLink.innerHTML = elem[1][0]; + srEntry.appendChild(srLink); + if (elem[1].length==2) { // single result + srLink.setAttribute('href',resultsPath+elem[1][1][0]); + srLink.setAttribute('onclick','searchBox.CloseResultsWindow()'); + if (elem[1][1][1]) { + srLink.setAttribute('target','_parent'); + } else { + srLink.setAttribute('target','_blank'); + } + const srScope = document.createElement('span'); + setClassAttr(srScope,'SRScope'); + srScope.innerHTML = elem[1][1][2]; + srEntry.appendChild(srScope); + } else { // multiple results + srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")'); + const srChildren = document.createElement('div'); + setClassAttr(srChildren,'SRChildren'); + for (let c=0; c + + + + + + +TRIQS/itertools: itertools/sentinel.hpp File Reference + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    sentinel.hpp File Reference
    +
    +
    +
    #include <utility>
    +

    Detailed Description

    +

    Provides a generic sentinel type for various iterator types in itertools.

    + +

    Definition in file sentinel.hpp.

    +
    +

    Go to the source code of this file.

    + + + + + +

    +Classes

    struct  sentinel_t< Iter >
     Generic sentinel type that can be used to mark the end of a range. More...
     
    + + + + + +

    +Functions

    template<typename Iter >
    sentinel_t< Iter > make_sentinel (Iter it)
     Create an itertools::sentinel_t from an iterator using template type deduction.
     
    +
    +
    + + + + diff --git a/docs/unstable/sentinel_8hpp.js b/docs/unstable/sentinel_8hpp.js new file mode 100644 index 0000000..9d3a115 --- /dev/null +++ b/docs/unstable/sentinel_8hpp.js @@ -0,0 +1,4 @@ +var sentinel_8hpp = +[ + [ "make_sentinel", "sentinel_8hpp.html#ga90e665b48c5bfe5f1b7590b20efdacb1", null ] +]; \ No newline at end of file diff --git a/docs/unstable/sentinel_8hpp_source.html b/docs/unstable/sentinel_8hpp_source.html new file mode 100644 index 0000000..8e63cd0 --- /dev/null +++ b/docs/unstable/sentinel_8hpp_source.html @@ -0,0 +1,183 @@ + + + + + + + +TRIQS/itertools: itertools/sentinel.hpp Source File + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    sentinel.hpp
    +
    +
    +Go to the documentation of this file.
    1// Copyright (c) 2019-2022 Simons Foundation
    +
    2//
    +
    3// Licensed under the Apache License, Version 2.0 (the "License");
    +
    4// you may not use this file except in compliance with the License.
    +
    5// You may obtain a copy of the License at
    +
    6//
    +
    7// http://www.apache.org/licenses/LICENSE-2.0.txt
    +
    8//
    +
    9// Unless required by applicable law or agreed to in writing, software
    +
    10// distributed under the License is distributed on an "AS IS" BASIS,
    +
    11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +
    12// See the License for the specific language governing permissions and
    +
    13// limitations under the License.
    +
    14//
    +
    15// Authors: Olivier Parcollet, Nils Wentzell, chuffa
    +
    16
    +
    17/**
    +
    18 * @file
    +
    19 * @brief Provides a generic sentinel type for various iterator types in itertools.
    +
    20 */
    +
    21
    +
    22#ifndef _ITERTOOLS_SENTINEL_HPP
    +
    23#define _ITERTOOLS_SENTINEL_HPP
    +
    24
    +
    25#include <utility>
    +
    26
    +
    27namespace itertools {
    +
    28
    +
    29 /**
    +
    30 * @addtogroup utilities
    +
    31 * @{
    +
    32 */
    +
    33
    +
    34 /**
    +
    35 * @brief Generic sentinel type that can be used to mark the end of a range.
    +
    36 * @tparam Iter Iterator type.
    +
    37 */
    +
    38 template <typename Iter> struct sentinel_t {
    +
    39 /// End iterator of some range.
    +
    40 Iter it;
    +
    41 };
    +
    42
    +
    43 /**
    +
    44 * @brief Create an itertools::sentinel_t from an iterator using template type deduction.
    +
    45 *
    +
    46 * @tparam Iter Iterator type.
    +
    47 * @param it Iterator to be turned into an itertools::sentinel_t.
    +
    48 * @return Sentinel object.
    +
    49 */
    +
    50 template <typename Iter> [[nodiscard]] sentinel_t<Iter> make_sentinel(Iter it) { return {std::move(it)}; }
    +
    51
    +
    52 /** @} */
    +
    53
    +
    54} // namespace itertools
    +
    55
    +
    56#endif // _ITERTOOLS_SENTINEL_HPP
    +
    sentinel_t< Iter > make_sentinel(Iter it)
    Create an itertools::sentinel_t from an iterator using template type deduction.
    Definition sentinel.hpp:50
    +
    Generic sentinel type that can be used to mark the end of a range.
    Definition sentinel.hpp:38
    +
    Iter it
    End iterator of some range.
    Definition sentinel.hpp:40
    +
    +
    + + + + diff --git a/docs/unstable/slice_8hpp.html b/docs/unstable/slice_8hpp.html new file mode 100644 index 0000000..95dc4e3 --- /dev/null +++ b/docs/unstable/slice_8hpp.html @@ -0,0 +1,147 @@ + + + + + + + +TRIQS/itertools: itertools/slice.hpp File Reference + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    slice.hpp File Reference
    +
    +
    +
    #include "./utils.hpp"
    +#include <algorithm>
    +#include <cstddef>
    +#include <iterator>
    +#include <utility>
    +

    Detailed Description

    +

    Provides a range adapting function for slicing a given range/view.

    + +

    Definition in file slice.hpp.

    +
    +

    Go to the source code of this file.

    + + + + + +

    +Classes

    struct  sliced< R >
     Represents a sliced range. More...
     
    + + + + + +

    +Functions

    template<typename R >
    detail::sliced< R > slice (R &&rg, std::ptrdiff_t start_idx, std::ptrdiff_t end_idx)
     Lazy-slice a given range.
     
    +
    +
    + + + + diff --git a/docs/unstable/slice_8hpp.js b/docs/unstable/slice_8hpp.js new file mode 100644 index 0000000..abb9f6c --- /dev/null +++ b/docs/unstable/slice_8hpp.js @@ -0,0 +1,4 @@ +var slice_8hpp = +[ + [ "slice", "slice_8hpp.html#ga0fab50176cc3df12cd96bbdf829d7e6f", null ] +]; \ No newline at end of file diff --git a/docs/unstable/slice_8hpp_source.html b/docs/unstable/slice_8hpp_source.html new file mode 100644 index 0000000..ee38c0f --- /dev/null +++ b/docs/unstable/slice_8hpp_source.html @@ -0,0 +1,283 @@ + + + + + + + +TRIQS/itertools: itertools/slice.hpp Source File + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    slice.hpp
    +
    +
    +Go to the documentation of this file.
    1// Copyright (c) 2019-2022 Simons Foundation
    +
    2//
    +
    3// Licensed under the Apache License, Version 2.0 (the "License");
    +
    4// you may not use this file except in compliance with the License.
    +
    5// You may obtain a copy of the License at
    +
    6//
    +
    7// http://www.apache.org/licenses/LICENSE-2.0.txt
    +
    8//
    +
    9// Unless required by applicable law or agreed to in writing, software
    +
    10// distributed under the License is distributed on an "AS IS" BASIS,
    +
    11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +
    12// See the License for the specific language governing permissions and
    +
    13// limitations under the License.
    +
    14//
    +
    15// Authors: Olivier Parcollet, Nils Wentzell, chuffa
    +
    16
    +
    17/**
    +
    18 * @file
    +
    19 * @brief Provides a range adapting function for slicing a given range/view.
    +
    20 */
    +
    21
    +
    22#ifndef _ITERTOOLS_SLICE_HPP
    +
    23#define _ITERTOOLS_SLICE_HPP
    +
    24
    +
    25#include "./utils.hpp"
    +
    26
    +
    27#include <algorithm>
    +
    28#include <cstddef>
    +
    29#include <iterator>
    +
    30#include <utility>
    +
    31
    +
    32namespace itertools {
    +
    33
    +
    34 namespace detail {
    +
    35
    +
    36 /**
    +
    37 * @ingroup adapted_ranges
    +
    38 * @brief Represents a sliced range.
    +
    39 *
    +
    40 * @details See itertools::slice(R &&, std::ptrdiff_t, std::ptrdiff_t) for more details.
    +
    41 *
    +
    42 * @tparam R Range type.
    +
    43 */
    +
    44 template <typename R> struct sliced {
    +
    45 /// Original range.
    +
    46 R rg;
    +
    47
    +
    48 /// Index at which the sliced range starts.
    + +
    50
    +
    51 /// Index at which the sliced range ends.
    + +
    53
    +
    54 /// Iterator type of the sliced range.
    +
    55 using iterator = decltype(std::begin(rg));
    +
    56
    +
    57 /// Const iterator type of the sliced range.
    +
    58 using const_iterator = decltype(std::cbegin(rg));
    +
    59
    +
    60 /// Default equal-to operator.
    +
    61 [[nodiscard]] bool operator==(sliced const &) const = default;
    +
    62
    +
    63 /**
    +
    64 * @brief Helper function to calculate the size of the sliced range.
    +
    65 * @return Number of elements in the slice.
    +
    66 */
    +
    67 [[nodiscard]] std::ptrdiff_t size() const {
    +
    68 std::ptrdiff_t total_size = distance(std::cbegin(rg), std::cend(rg));
    +
    69 return std::min(total_size, end_idx) - start_idx;
    +
    70 }
    +
    71
    +
    72 /**
    +
    73 * @brief Beginning of the sliced range.
    +
    74 * @return Iterator to the beginning of the sliced range.
    +
    75 */
    +
    76 [[nodiscard]] iterator begin() noexcept { return std::next(std::begin(rg), start_idx); }
    +
    77
    +
    78 /// Const version of begin().
    +
    79 [[nodiscard]] const_iterator cbegin() const noexcept { return std::next(std::cbegin(rg), start_idx); }
    +
    80
    +
    81 /// Const overload of begin().
    +
    82 [[nodiscard]] const_iterator begin() const noexcept { return cbegin(); }
    +
    83
    +
    84 /**
    +
    85 * @brief End of the sliced range.
    +
    86 * @return Iterator to the end of the sliced range.
    +
    87 */
    +
    88 [[nodiscard]] iterator end() noexcept { return std::next(begin(), size()); }
    +
    89
    +
    90 /// Const version of end().
    +
    91 [[nodiscard]] const_iterator cend() const noexcept { return std::next(cbegin(), size()); }
    +
    92
    +
    93 /// Const overload of end().
    +
    94 [[nodiscard]] const_iterator end() const noexcept { return cend(); }
    +
    95 };
    +
    96
    +
    97 } // namespace detail
    +
    98
    +
    99 /**
    +
    100 * @ingroup range_adapting_functions
    +
    101 * @brief Lazy-slice a given range.
    +
    102 *
    +
    103 * @details Only the part of the given range between the `start_idx` and the `end_idx` is taken into account.
    +
    104 * If `end_idx` is bigger than the size of the original range, the slice ends at the end of the original range.
    +
    105 * If `end_idx` is smaller than `start_idx`, the slice is empty. Note that the behaviour is undefined if
    +
    106 * `start_idx` is smaller than zero. This function returns an iterable lazy object, which can be used in
    +
    107 * range-based for loops:
    +
    108 *
    +
    109 * @code{.cpp}
    +
    110 * std::array<int, 5> arr { 1, 2, 3, 4, 5 };
    +
    111 *
    +
    112 * for (auto i : slice(arr, 1, 3)) {
    +
    113 * std::cout << i << " ";
    +
    114 * }
    +
    115 * std::cout << "\n";
    +
    116 *
    +
    117 * for (auto i : slice(arr, 3, 7)) {
    +
    118 * std::cout << i << " ";
    +
    119 * }
    +
    120 * std::cout << "\n";
    +
    121 *
    +
    122 * for (auto i : slice(arr, 4, 3)) {
    +
    123 * std::cout << i << " "; // empty slice
    +
    124 * }
    +
    125 * @endcode
    +
    126 *
    +
    127 * Output:
    +
    128 *
    +
    129 * ```
    +
    130 * 2 3
    +
    131 * 4 5
    +
    132 * ```
    +
    133 *
    +
    134 * @tparam R Range type.
    +
    135 * @param rg Range to be sliced.
    +
    136 * @param start_idx Index where the slice starts.
    +
    137 * @param end_idx Index of the first element past the end of the sliced range (excluded).
    +
    138 * @return A detail::sliced range.
    +
    139 */
    +
    140 template <typename R> [[nodiscard]] detail::sliced<R> slice(R &&rg, std::ptrdiff_t start_idx, std::ptrdiff_t end_idx) {
    +
    141 return {std::forward<R>(rg), start_idx, std::max(start_idx, end_idx)};
    +
    142 }
    +
    143
    +
    144} // namespace itertools
    +
    145
    +
    146#endif // _ITERTOOLS_SLICE_HPP
    +
    detail::sliced< R > slice(R &&rg, std::ptrdiff_t start_idx, std::ptrdiff_t end_idx)
    Lazy-slice a given range.
    Definition slice.hpp:140
    +
    Represents a sliced range.
    Definition slice.hpp:44
    +
    R rg
    Original range.
    Definition slice.hpp:46
    +
    const_iterator begin() const noexcept
    Const overload of begin().
    Definition slice.hpp:82
    +
    std::ptrdiff_t size() const
    Helper function to calculate the size of the sliced range.
    Definition slice.hpp:67
    +
    const_iterator end() const noexcept
    Const overload of end().
    Definition slice.hpp:94
    +
    bool operator==(sliced const &) const =default
    Default equal-to operator.
    +
    std::ptrdiff_t start_idx
    Index at which the sliced range starts.
    Definition slice.hpp:49
    +
    iterator begin() noexcept
    Beginning of the sliced range.
    Definition slice.hpp:76
    +
    const_iterator cend() const noexcept
    Const version of end().
    Definition slice.hpp:91
    +
    const_iterator cbegin() const noexcept
    Const version of begin().
    Definition slice.hpp:79
    +
    std::ptrdiff_t end_idx
    Index at which the sliced range ends.
    Definition slice.hpp:52
    +
    iterator end() noexcept
    End of the sliced range.
    Definition slice.hpp:88
    +
    +
    + + + + diff --git a/docs/unstable/splitbar.png b/docs/unstable/splitbar.png new file mode 100644 index 0000000..fe895f2 Binary files /dev/null and b/docs/unstable/splitbar.png differ diff --git a/docs/unstable/splitbard.png b/docs/unstable/splitbard.png new file mode 100644 index 0000000..8367416 Binary files /dev/null and b/docs/unstable/splitbard.png differ diff --git a/docs/unstable/stride_8hpp.html b/docs/unstable/stride_8hpp.html new file mode 100644 index 0000000..f070070 --- /dev/null +++ b/docs/unstable/stride_8hpp.html @@ -0,0 +1,151 @@ + + + + + + + +TRIQS/itertools: itertools/stride.hpp File Reference + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    stride.hpp File Reference
    +
    +
    +
    #include "./iterator_facade.hpp"
    +#include "./utils.hpp"
    +#include <cstddef>
    +#include <iterator>
    +#include <stdexcept>
    +#include <utility>
    +

    Detailed Description

    +

    Provides a range adapting function for striding through a given range/view.

    + +

    Definition in file stride.hpp.

    +
    +

    Go to the source code of this file.

    + + + + + + + + +

    +Classes

    struct  stride_iter< Iter >
     Iterator for a detail::strided range. More...
     
    struct  strided< R >
     Represents a strided range. More...
     
    + + + + + +

    +Functions

    template<typename R >
    detail::strided< R > stride (R &&rg, std::ptrdiff_t stride)
     Lazy-stride through a given range.
     
    +
    +
    + + + + diff --git a/docs/unstable/stride_8hpp.js b/docs/unstable/stride_8hpp.js new file mode 100644 index 0000000..f8c3dd1 --- /dev/null +++ b/docs/unstable/stride_8hpp.js @@ -0,0 +1,4 @@ +var stride_8hpp = +[ + [ "stride", "stride_8hpp.html#gae0865cb967e162fe889c670bceb76e4f", null ] +]; \ No newline at end of file diff --git a/docs/unstable/stride_8hpp_source.html b/docs/unstable/stride_8hpp_source.html new file mode 100644 index 0000000..b58aba1 --- /dev/null +++ b/docs/unstable/stride_8hpp_source.html @@ -0,0 +1,327 @@ + + + + + + + +TRIQS/itertools: itertools/stride.hpp Source File + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    stride.hpp
    +
    +
    +Go to the documentation of this file.
    1// Copyright (c) 2019-2022 Simons Foundation
    +
    2//
    +
    3// Licensed under the Apache License, Version 2.0 (the "License");
    +
    4// you may not use this file except in compliance with the License.
    +
    5// You may obtain a copy of the License at
    +
    6//
    +
    7// http://www.apache.org/licenses/LICENSE-2.0.txt
    +
    8//
    +
    9// Unless required by applicable law or agreed to in writing, software
    +
    10// distributed under the License is distributed on an "AS IS" BASIS,
    +
    11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +
    12// See the License for the specific language governing permissions and
    +
    13// limitations under the License.
    +
    14//
    +
    15// Authors: Olivier Parcollet, Nils Wentzell, chuffa
    +
    16
    +
    17/**
    +
    18 * @file
    +
    19 * @brief Provides a range adapting function for striding through a given range/view.
    +
    20 */
    +
    21
    +
    22#ifndef _ITERTOOLS_STRIDE_HPP
    +
    23#define _ITERTOOLS_STRIDE_HPP
    +
    24
    +
    25#include "./iterator_facade.hpp"
    +
    26#include "./utils.hpp"
    +
    27
    +
    28#include <cstddef>
    +
    29#include <iterator>
    +
    30#include <stdexcept>
    +
    31#include <utility>
    +
    32
    +
    33namespace itertools {
    +
    34
    +
    35 namespace detail {
    +
    36
    +
    37 /**
    +
    38 * @ingroup range_iterators
    +
    39 * @brief Iterator for a detail::strided range.
    +
    40 *
    +
    41 * @details It stores an iterator of the original range as well as a stride. Incrementing advances the original
    +
    42 * iterator by the given stride. Dereferencing simply returns the dereferenced original iterator.
    +
    43 *
    +
    44 * See itertools::stride(R &&, std::ptrdiff_t) for more details.
    +
    45 *
    +
    46 * @tparam Iter Iterator type.
    +
    47 */
    +
    48 template <typename Iter> struct stride_iter : iterator_facade<stride_iter<Iter>, typename std::iterator_traits<Iter>::value_type> {
    +
    49 /// Iterator of the original range.
    +
    50 Iter it;
    +
    51
    +
    52 /// Number of elements in the original range to skip when incrementing the iterator.
    + +
    54
    +
    55 /// Default constructor.
    +
    56 stride_iter() = default;
    +
    57
    +
    58 /**
    +
    59 * @brief Construct a strided iterator from a given iterator and a given stride.
    +
    60 *
    +
    61 * @param it Iterator of the original range.
    +
    62 * @param stride Stride for advancing the iterator (has to be > 0).
    +
    63 */
    +
    64 stride_iter(Iter it, std::ptrdiff_t stride) : it(it), stride(stride) {
    +
    65 if (stride <= 0) throw std::runtime_error("The itertools::detail::strided range requires a positive stride");
    +
    66 }
    +
    67
    +
    68 /// Increment the iterator by advancing the original iterator by the stride.
    +
    69 void increment() { std::advance(it, stride); }
    +
    70
    +
    71 /**
    +
    72 * @brief Equal-to operator for two detail::stride_iter objects.
    +
    73 *
    +
    74 * @param other detail::stride_iter to compare with.
    +
    75 * @return True, if the original iterators are equal.
    +
    76 */
    +
    77 [[nodiscard]] bool operator==(stride_iter const &other) const { return it == other.it; }
    +
    78
    +
    79 /**
    +
    80 * @brief Dereference the iterator.
    +
    81 * @return Dereferenced value of the original iterator.
    +
    82 */
    +
    83 [[nodiscard]] decltype(auto) dereference() const { return *it; }
    +
    84 };
    +
    85
    +
    86 /**
    +
    87 * @ingroup adapted_ranges
    +
    88 * @brief Represents a strided range.
    +
    89 *
    +
    90 * @details See itertools::stride(R &&, std::ptrdiff_t) for more details.
    +
    91 *
    +
    92 * @tparam R Range type.
    +
    93 */
    +
    94 template <typename R> struct strided {
    +
    95 /// Original range.
    +
    96 R rg;
    +
    97
    +
    98 /// Number of elements in the original range to skip when incrementing the iterator.
    + +
    100
    +
    101 /// Iterator type of the strided range.
    +
    102 using iterator = stride_iter<decltype(std::begin(rg))>;
    +
    103
    +
    104 /// Const iterator type of the strided range.
    +
    105 using const_iterator = stride_iter<decltype(std::cbegin(rg))>;
    +
    106
    +
    107 /// Default equal-to operator.
    +
    108 [[nodiscard]] bool operator==(strided const &) const = default;
    +
    109
    +
    110 private:
    +
    111 // Helper function to calculate the index of the end iterator.
    +
    112 [[nodiscard]] std::ptrdiff_t end_offset() const {
    +
    113 auto size = distance(std::cbegin(rg), std::cend(rg));
    +
    114 return (size == 0) ? 0 : ((size - 1) / stride + 1) * stride;
    +
    115 }
    +
    116
    +
    117 public:
    +
    118 /**
    +
    119 * @brief Beginning of the strided range.
    +
    120 * @return detail::stride_iter containing the begin iterator of the original range and the stride.
    +
    121 */
    +
    122 [[nodiscard]] iterator begin() noexcept { return {std::begin(rg), stride}; }
    +
    123
    +
    124 /// Const version of begin().
    +
    125 [[nodiscard]] const_iterator cbegin() const noexcept { return {std::cbegin(rg), stride}; }
    +
    126
    +
    127 /// Const overload of begin().
    +
    128 [[nodiscard]] const_iterator begin() const noexcept { return cbegin(); }
    +
    129
    +
    130 /**
    +
    131 * @brief End of the strided range.
    +
    132 * @return detail::stride_iter containing an iterator of the original range end_offset() elements beyond the
    +
    133 * beginning and the stride.
    +
    134 */
    +
    135 [[nodiscard]] iterator end() noexcept { return {std::next(std::begin(rg), end_offset()), stride}; }
    +
    136
    +
    137 /// Const version of end().
    +
    138 [[nodiscard]] const_iterator cend() const noexcept { return {std::next(std::cbegin(rg), end_offset()), stride}; }
    +
    139
    +
    140 /// Const overload of end().
    +
    141 [[nodiscard]] const_iterator end() const noexcept { return cend(); }
    +
    142 };
    +
    143
    +
    144 } // namespace detail
    +
    145
    +
    146 /**
    +
    147 * @ingroup range_adapting_functions
    +
    148 * @brief Lazy-stride through a given range.
    +
    149 *
    +
    150 * @details Only every Nth element of the original range is taken into account. If the given stride (N) is <= 0, an
    +
    151 * exception is thrown. This function returns an iterable lazy object, which can be used in range-based for loops:
    +
    152 *
    +
    153 * @code{.cpp}
    +
    154 * std::vector<int> vec { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    +
    155 *
    +
    156 * for (auto i : stride(vec, 3)) {
    +
    157 * std::cout << i << " ";
    +
    158 * }
    +
    159 * std::cout << "\n";
    +
    160 *
    +
    161 * for (auto i : stride(vec, 10)) {
    +
    162 * std::cout << i << " ";
    +
    163 * }
    +
    164 * @endcode
    +
    165 *
    +
    166 * Output:
    +
    167 *
    +
    168 * ```
    +
    169 * 1 4 7 10
    +
    170 * 1
    +
    171 * ```
    +
    172 *
    +
    173 * See also See also <a href="https://en.cppreference.com/w/cpp/ranges/stride_view">std::ranges::views::stride</a>.
    +
    174 *
    +
    175 * @tparam R Range type.
    +
    176 * @param rg Original range.
    +
    177 * @param stride Number of elements to skip when incrementing.
    +
    178 * @return A detail::strided range.
    +
    179 */
    +
    180 template <typename R> [[nodiscard]] detail::strided<R> stride(R &&rg, std::ptrdiff_t stride) { return {std::forward<R>(rg), stride}; }
    +
    181
    +
    182} // namespace itertools
    +
    183
    +
    184#endif // _ITERTOOLS_STRIDE_HPP
    +
    detail::strided< R > stride(R &&rg, std::ptrdiff_t stride)
    Lazy-stride through a given range.
    Definition stride.hpp:180
    +
    Iterator for a detail::strided range.
    Definition stride.hpp:48
    +
    std::ptrdiff_t stride
    Number of elements in the original range to skip when incrementing the iterator.
    Definition stride.hpp:53
    +
    stride_iter()=default
    Default constructor.
    +
    bool operator==(stride_iter const &other) const
    Equal-to operator for two detail::stride_iter objects.
    Definition stride.hpp:77
    +
    stride_iter(Iter it, std::ptrdiff_t stride)
    Construct a strided iterator from a given iterator and a given stride.
    Definition stride.hpp:64
    +
    decltype(auto) dereference() const
    Dereference the iterator.
    Definition stride.hpp:83
    +
    Iter it
    Iterator of the original range.
    Definition stride.hpp:50
    +
    void increment()
    Increment the iterator by advancing the original iterator by the stride.
    Definition stride.hpp:69
    +
    Represents a strided range.
    Definition stride.hpp:94
    +
    R rg
    Original range.
    Definition stride.hpp:96
    +
    const_iterator begin() const noexcept
    Const overload of begin().
    Definition stride.hpp:128
    +
    const_iterator end() const noexcept
    Const overload of end().
    Definition stride.hpp:141
    +
    std::ptrdiff_t stride
    Number of elements in the original range to skip when incrementing the iterator.
    Definition stride.hpp:99
    +
    bool operator==(strided const &) const =default
    Default equal-to operator.
    +
    iterator begin() noexcept
    Beginning of the strided range.
    Definition stride.hpp:122
    +
    const_iterator cend() const noexcept
    Const version of end().
    Definition stride.hpp:138
    +
    const_iterator cbegin() const noexcept
    Const version of begin().
    Definition stride.hpp:125
    +
    iterator end() noexcept
    End of the strided range.
    Definition stride.hpp:135
    +
    +
    + + + + diff --git a/docs/unstable/structitertools_1_1detail_1_1enum__iter-members.html b/docs/unstable/structitertools_1_1detail_1_1enum__iter-members.html new file mode 100644 index 0000000..0bfb687 --- /dev/null +++ b/docs/unstable/structitertools_1_1detail_1_1enum__iter-members.html @@ -0,0 +1,129 @@ + + + + + + + +TRIQS/itertools: Member List + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    enum_iter< Iter > Member List
    +
    +
    + +

    This is the complete list of members for enum_iter< Iter >, including all inherited members.

    + + + + + + + + + +
    dereference() constenum_iter< Iter >inline
    enum_iter()=defaultenum_iter< Iter >
    enum_iter(Iter it)enum_iter< Iter >inline
    ienum_iter< Iter >
    increment()enum_iter< Iter >inline
    itenum_iter< Iter >
    operator==(enum_iter const &other) constenum_iter< Iter >inline
    operator==(sentinel_t< SentinelIter > const &s) constenum_iter< Iter >inline
    +
    + + + + diff --git a/docs/unstable/structitertools_1_1detail_1_1enum__iter.html b/docs/unstable/structitertools_1_1detail_1_1enum__iter.html new file mode 100644 index 0000000..c93cc8b --- /dev/null +++ b/docs/unstable/structitertools_1_1detail_1_1enum__iter.html @@ -0,0 +1,407 @@ + + + + + + + +TRIQS/itertools: enum_iter< Iter > + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    + +

    #include <itertools/enumerate.hpp>

    +

    Detailed Description

    +
    template<typename Iter>
    +struct itertools::detail::enum_iter< Iter >

    Iterator for a detail::enumerated range.

    +

    It stores an iterator of the original range and an index. Incrementing advances the iterator and the index by 1. Dereferencing returns a std::pair consisting of the current index and the current dereferenced value of the original iterator.

    +

    See itertools::enumerate(R &&) for more details.

    +
    Template Parameters
    + + +
    IterIterator type.
    +
    +
    + +

    Definition at line 48 of file enumerate.hpp.

    +
    +Inheritance diagram for enum_iter< Iter >:
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    enum_iter ()=default
     Default constructor sets the index to zero and default constructs the original iterator.
     
     enum_iter (Iter it)
     Construct an enumerated iterator from a given iterator and set the index to zero.
     
    decltype(auto) dereference () const
     Dereference the iterator.
     
    void increment ()
     Increment the iterator by incrementing the original iterator and the index.
     
    bool operator== (enum_iter const &other) const
     Equal-to operator for two detail::enum_iter objects.
     
    template<typename SentinelIter >
    bool operator== (sentinel_t< SentinelIter > const &s) const
     Equal-to operator for a detail::enum_iter and an itertools::sentinel_t.
     
    + + + + + + + +

    +Public Attributes

    long i = 0
     Index for enumerating.
     
    Iter it
     Iterator of the original range.
     
    +

    Constructor & Destructor Documentation

    + +

    ◆ enum_iter()

    + +
    +
    +
    +template<typename Iter >
    + + + + + +
    + + + + + + + +
    enum_iter (Iter it)
    +
    +inline
    +
    + +

    Construct an enumerated iterator from a given iterator and set the index to zero.

    +
    Parameters
    + + +
    itIterator of the original range.
    +
    +
    + +

    Definition at line 62 of file enumerate.hpp.

    + +
    +
    +

    Member Function Documentation

    + +

    ◆ dereference()

    + +
    +
    +
    +template<typename Iter >
    + + + + + +
    + + + + + + + +
    decltype(auto) dereference () const
    +
    +inline
    +
    + +

    Dereference the iterator.

    +
    Returns
    Tuple consisting of the current index and the current dereferenced value of the original iterator.
    + +

    Definition at line 91 of file enumerate.hpp.

    + +
    +
    + +

    ◆ increment()

    + +
    +
    +
    +template<typename Iter >
    + + + + + +
    + + + + + + + +
    void increment ()
    +
    +inline
    +
    + +

    Increment the iterator by incrementing the original iterator and the index.

    + +

    Definition at line 65 of file enumerate.hpp.

    + +
    +
    + +

    ◆ operator==() [1/2]

    + +
    +
    +
    +template<typename Iter >
    + + + + + +
    + + + + + + + +
    bool operator== (enum_iter< Iter > const & other) const
    +
    +inline
    +
    + +

    Equal-to operator for two detail::enum_iter objects.

    +
    Parameters
    + + +
    otherdetail::enum_iter to compare with.
    +
    +
    +
    Returns
    True, if the original iterators are equal.
    + +

    Definition at line 76 of file enumerate.hpp.

    + +
    +
    + +

    ◆ operator==() [2/2]

    + +
    +
    +
    +template<typename Iter >
    +
    +template<typename SentinelIter >
    + + + + + +
    + + + + + + + +
    bool operator== (sentinel_t< SentinelIter > const & s) const
    +
    +inline
    +
    + +

    Equal-to operator for a detail::enum_iter and an itertools::sentinel_t.

    +
    Template Parameters
    + + +
    SentinelIterIterator type of the sentinel.
    +
    +
    +
    Parameters
    + + +
    sitertools::sentinel_t to compare with.
    +
    +
    +
    Returns
    True, if the original iterator is equal to the iterator stored in the sentinel.
    + +

    Definition at line 85 of file enumerate.hpp.

    + +
    +
    +

    Member Data Documentation

    + +

    ◆ i

    + +
    +
    +
    +template<typename Iter >
    + + + + +
    long i = 0
    +
    + +

    Index for enumerating.

    + +

    Definition at line 53 of file enumerate.hpp.

    + +
    +
    + +

    ◆ it

    + +
    +
    +
    +template<typename Iter >
    + + + + +
    Iter it
    +
    + +

    Iterator of the original range.

    + +

    Definition at line 50 of file enumerate.hpp.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/unstable/structitertools_1_1detail_1_1enum__iter.png b/docs/unstable/structitertools_1_1detail_1_1enum__iter.png new file mode 100644 index 0000000..0ebea98 Binary files /dev/null and b/docs/unstable/structitertools_1_1detail_1_1enum__iter.png differ diff --git a/docs/unstable/structitertools_1_1detail_1_1enumerated-members.html b/docs/unstable/structitertools_1_1detail_1_1enumerated-members.html new file mode 100644 index 0000000..4756414 --- /dev/null +++ b/docs/unstable/structitertools_1_1detail_1_1enumerated-members.html @@ -0,0 +1,131 @@ + + + + + + + +TRIQS/itertools: Member List + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    enumerated< R > Member List
    +
    +
    + +

    This is the complete list of members for enumerated< R >, including all inherited members.

    + + + + + + + + + + + +
    begin() noexceptenumerated< R >inline
    begin() const noexceptenumerated< R >inline
    cbegin() const noexceptenumerated< R >inline
    cend() const noexceptenumerated< R >inline
    const_iterator typedefenumerated< R >
    end() noexceptenumerated< R >inline
    end() const noexceptenumerated< R >inline
    iterator typedefenumerated< R >
    operator==(enumerated const &) const =defaultenumerated< R >
    rgenumerated< R >
    +
    + + + + diff --git a/docs/unstable/structitertools_1_1detail_1_1enumerated.html b/docs/unstable/structitertools_1_1detail_1_1enumerated.html new file mode 100644 index 0000000..464d940 --- /dev/null +++ b/docs/unstable/structitertools_1_1detail_1_1enumerated.html @@ -0,0 +1,433 @@ + + + + + + + +TRIQS/itertools: enumerated< R > + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    + +

    #include <itertools/enumerate.hpp>

    +

    Detailed Description

    +
    template<typename R>
    +struct itertools::detail::enumerated< R >

    Represents an enumerated range.

    +

    See itertools::enumerate(R &&) for more details.

    +
    Template Parameters
    + + +
    RRange type.
    +
    +
    + +

    Definition at line 102 of file enumerate.hpp.

    +
    + + + + + + + +

    +Public Types

    using const_iterator = enum_iter<decltype(std::cbegin(rg))>
     Const iterator type of the enumerated range.
     
    using iterator = enum_iter<decltype(std::begin(rg))>
     Iterator type of the enumerated range.
     
    + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    const_iterator begin () const noexcept
     Const overload of begin().
     
    iterator begin () noexcept
     Beginning of the enumerated range.
     
    const_iterator cbegin () const noexcept
     Const version of begin().
     
    auto cend () const noexcept
     Const version of end().
     
    auto end () const noexcept
     Const overload of end().
     
    auto end () noexcept
     End of the enumerated range.
     
    +bool operator== (enumerated const &) const =default
     Default equal-to operator.
     
    + + + + +

    +Public Attributes

    rg
     Original range.
     
    +

    Member Typedef Documentation

    + +

    ◆ const_iterator

    + +
    +
    +
    +template<typename R >
    + + + + +
    using const_iterator = enum_iter<decltype(std::cbegin(rg))>
    +
    + +

    Const iterator type of the enumerated range.

    + +

    Definition at line 110 of file enumerate.hpp.

    + +
    +
    + +

    ◆ iterator

    + +
    +
    +
    +template<typename R >
    + + + + +
    using iterator = enum_iter<decltype(std::begin(rg))>
    +
    + +

    Iterator type of the enumerated range.

    + +

    Definition at line 107 of file enumerate.hpp.

    + +
    +
    +

    Member Function Documentation

    + +

    ◆ begin() [1/2]

    + +
    +
    +
    +template<typename R >
    + + + + + +
    + + + + + + + +
    const_iterator begin () const
    +
    +inlinenoexcept
    +
    + +

    Const overload of begin().

    + +

    Definition at line 125 of file enumerate.hpp.

    + +
    +
    + +

    ◆ begin() [2/2]

    + +
    +
    +
    +template<typename R >
    + + + + + +
    + + + + + + + +
    iterator begin ()
    +
    +inlinenoexcept
    +
    + +

    Beginning of the enumerated range.

    +
    Returns
    detail::enum_iter constructed from the beginning of the original range with the index set to zero.
    + +

    Definition at line 119 of file enumerate.hpp.

    + +
    +
    + +

    ◆ cbegin()

    + +
    +
    +
    +template<typename R >
    + + + + + +
    + + + + + + + +
    const_iterator cbegin () const
    +
    +inlinenoexcept
    +
    + +

    Const version of begin().

    + +

    Definition at line 122 of file enumerate.hpp.

    + +
    +
    + +

    ◆ cend()

    + +
    +
    +
    +template<typename R >
    + + + + + +
    + + + + + + + +
    auto cend () const
    +
    +inlinenoexcept
    +
    + +

    Const version of end().

    + +

    Definition at line 134 of file enumerate.hpp.

    + +
    +
    + +

    ◆ end() [1/2]

    + +
    +
    +
    +template<typename R >
    + + + + + +
    + + + + + + + +
    auto end () const
    +
    +inlinenoexcept
    +
    + +

    Const overload of end().

    + +

    Definition at line 137 of file enumerate.hpp.

    + +
    +
    + +

    ◆ end() [2/2]

    + +
    +
    +
    +template<typename R >
    + + + + + +
    + + + + + + + +
    auto end ()
    +
    +inlinenoexcept
    +
    + +

    End of the enumerated range.

    +
    Returns
    itertools::sentinel_t containing the end iterator of the original range.
    + +

    Definition at line 131 of file enumerate.hpp.

    + +
    +
    +

    Member Data Documentation

    + +

    ◆ rg

    + +
    +
    +
    +template<typename R >
    + + + + +
    R rg
    +
    + +

    Original range.

    + +

    Definition at line 104 of file enumerate.hpp.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/unstable/structitertools_1_1detail_1_1multiplied-members.html b/docs/unstable/structitertools_1_1detail_1_1multiplied-members.html new file mode 100644 index 0000000..1b69487 --- /dev/null +++ b/docs/unstable/structitertools_1_1detail_1_1multiplied-members.html @@ -0,0 +1,132 @@ + + + + + + + +TRIQS/itertools: Member List + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    multiplied< Rs > Member List
    +
    +
    + +

    This is the complete list of members for multiplied< Rs >, including all inherited members.

    + + + + + + + + + + + + +
    begin() noexceptmultiplied< Rs >inline
    begin() const noexceptmultiplied< Rs >inline
    cbegin() const noexceptmultiplied< Rs >inline
    cend() const noexceptmultiplied< Rs >inline
    const_iterator typedefmultiplied< Rs >
    end() noexceptmultiplied< Rs >inline
    end() const noexceptmultiplied< Rs >inline
    iterator typedefmultiplied< Rs >
    multiplied(Us &&...rgs)multiplied< Rs >inline
    operator==(multiplied const &) const =defaultmultiplied< Rs >
    tumultiplied< Rs >
    +
    + + + + diff --git a/docs/unstable/structitertools_1_1detail_1_1multiplied.html b/docs/unstable/structitertools_1_1detail_1_1multiplied.html new file mode 100644 index 0000000..220d19a --- /dev/null +++ b/docs/unstable/structitertools_1_1detail_1_1multiplied.html @@ -0,0 +1,483 @@ + + + + + + + +TRIQS/itertools: multiplied< Rs > + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    + +

    #include <itertools/product.hpp>

    +

    Detailed Description

    +
    template<typename... Rs>
    +struct itertools::detail::multiplied< Rs >

    Represents a cartesian product of ranges.

    +

    See itertools::product(Rs &&...rgs) for more details.

    +
    Template Parameters
    + + +
    RsRange types.
    +
    +
    + +

    Definition at line 149 of file product.hpp.

    +
    + + + + + + + +

    +Public Types

    using const_iterator = prod_iter<std::tuple<decltype(std::cend(std::declval<Rs &>()))...>, decltype(std::cbegin(std::declval<Rs &>()))...>
     Const iterator type the product range.
     
    using iterator = prod_iter<std::tuple<decltype(std::end(std::declval<Rs &>()))...>, decltype(std::begin(std::declval<Rs &>()))...>
     Iterator type of the product range.
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    template<typename... Us>
     multiplied (Us &&...rgs)
     Constructs a cartesian product (multiplied) range from the given ranges.
     
    const_iterator begin () const noexcept
     Const overload of begin().
     
    iterator begin () noexcept
     Beginning of the product range.
     
    const_iterator cbegin () const noexcept
     Const version of begin().
     
    auto cend () const noexcept
     Const version of end().
     
    auto end () const noexcept
     Const overload of end().
     
    auto end () noexcept
     End of the product range.
     
    +bool operator== (multiplied const &) const =default
     Default equal-to operator.
     
    + + + + +

    +Public Attributes

    std::tuple< Rs... > tu
     Tuple containing the original ranges.
     
    +

    Member Typedef Documentation

    + +

    ◆ const_iterator

    + +
    +
    +
    +template<typename... Rs>
    + + + + +
    using const_iterator = prod_iter<std::tuple<decltype(std::cend(std::declval<Rs &>()))...>, decltype(std::cbegin(std::declval<Rs &>()))...>
    +
    + +

    Const iterator type the product range.

    + +

    Definition at line 157 of file product.hpp.

    + +
    +
    + +

    ◆ iterator

    + +
    +
    +
    +template<typename... Rs>
    + + + + +
    using iterator = prod_iter<std::tuple<decltype(std::end(std::declval<Rs &>()))...>, decltype(std::begin(std::declval<Rs &>()))...>
    +
    + +

    Iterator type of the product range.

    + +

    Definition at line 154 of file product.hpp.

    + +
    +
    +

    Constructor & Destructor Documentation

    + +

    ◆ multiplied()

    + +
    +
    +
    +template<typename... Rs>
    +
    +template<typename... Us>
    + + + + + +
    + + + + + + + +
    multiplied (Us &&... rgs)
    +
    +inline
    +
    + +

    Constructs a cartesian product (multiplied) range from the given ranges.

    +
    Template Parameters
    + + +
    UsRange types.
    +
    +
    +
    Parameters
    + + +
    rgsRanges to be multiplied.
    +
    +
    + +

    Definition at line 165 of file product.hpp.

    + +
    +
    +

    Member Function Documentation

    + +

    ◆ begin() [1/2]

    + +
    +
    +
    +template<typename... Rs>
    + + + + + +
    + + + + + + + +
    const_iterator begin () const
    +
    +inlinenoexcept
    +
    + +

    Const overload of begin().

    + +

    Definition at line 192 of file product.hpp.

    + +
    +
    + +

    ◆ begin() [2/2]

    + +
    +
    +
    +template<typename... Rs>
    + + + + + +
    + + + + + + + +
    iterator begin ()
    +
    +inlinenoexcept
    +
    + +

    Beginning of the product range.

    +
    Returns
    detail::prod_iter representing the beginning of the product range.
    + +

    Definition at line 186 of file product.hpp.

    + +
    +
    + +

    ◆ cbegin()

    + +
    +
    +
    +template<typename... Rs>
    + + + + + +
    + + + + + + + +
    const_iterator cbegin () const
    +
    +inlinenoexcept
    +
    + +

    Const version of begin().

    + +

    Definition at line 189 of file product.hpp.

    + +
    +
    + +

    ◆ cend()

    + +
    +
    +
    +template<typename... Rs>
    + + + + + +
    + + + + + + + +
    auto cend () const
    +
    +inlinenoexcept
    +
    + +

    Const version of end().

    + +

    Definition at line 201 of file product.hpp.

    + +
    +
    + +

    ◆ end() [1/2]

    + +
    +
    +
    +template<typename... Rs>
    + + + + + +
    + + + + + + + +
    auto end () const
    +
    +inlinenoexcept
    +
    + +

    Const overload of end().

    + +

    Definition at line 204 of file product.hpp.

    + +
    +
    + +

    ◆ end() [2/2]

    + +
    +
    +
    +template<typename... Rs>
    + + + + + +
    + + + + + + + +
    auto end ()
    +
    +inlinenoexcept
    +
    + +

    End of the product range.

    +
    Returns
    itertools::sentinel_t containing the end iterator of the first original range, i.e. std::end(std::get<0>(tu)).
    + +

    Definition at line 198 of file product.hpp.

    + +
    +
    +

    Member Data Documentation

    + +

    ◆ tu

    + +
    +
    +
    +template<typename... Rs>
    + + + + +
    std::tuple<Rs...> tu
    +
    + +

    Tuple containing the original ranges.

    + +

    Definition at line 151 of file product.hpp.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/unstable/structitertools_1_1detail_1_1prod__iter-members.html b/docs/unstable/structitertools_1_1detail_1_1prod__iter-members.html new file mode 100644 index 0000000..c210ad6 --- /dev/null +++ b/docs/unstable/structitertools_1_1detail_1_1prod__iter-members.html @@ -0,0 +1,131 @@ + + + + + + + +TRIQS/itertools: Member List + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    prod_iter< EndIters, Iters > Member List
    +
    +
    + +

    This is the complete list of members for prod_iter< EndIters, Iters >, including all inherited members.

    + + + + + + + + + + + +
    dereference() constprod_iter< EndIters, Iters >inline
    increment()prod_iter< EndIters, Iters >inline
    itsprod_iter< EndIters, Iters >
    its_beginprod_iter< EndIters, Iters >
    its_endprod_iter< EndIters, Iters >
    operator==(prod_iter const &other) constprod_iter< EndIters, Iters >inline
    operator==(sentinel_t< SentinelIter > const &s) constprod_iter< EndIters, Iters >inline
    prod_iter()=defaultprod_iter< EndIters, Iters >
    prod_iter(std::tuple< Iters... > its_begin, EndIters its_end)prod_iter< EndIters, Iters >inline
    Rankprod_iter< EndIters, Iters >static
    +
    + + + + diff --git a/docs/unstable/structitertools_1_1detail_1_1prod__iter.html b/docs/unstable/structitertools_1_1detail_1_1prod__iter.html new file mode 100644 index 0000000..4ee611e --- /dev/null +++ b/docs/unstable/structitertools_1_1detail_1_1prod__iter.html @@ -0,0 +1,477 @@ + + + + + + + +TRIQS/itertools: prod_iter< EndIters, Iters > + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    + +

    #include <itertools/product.hpp>

    +

    Detailed Description

    +
    template<typename EndIters, typename... Iters>
    +struct itertools::detail::prod_iter< EndIters, Iters >

    Iterator for a detail::multiplied (cartesian product) range.

    +

    It stores three tuples of iterators of the original ranges:

      +
    • its_begin contains the begin iterators of all ranges
    • +
    • its_end contains the end iterators of all ranges
    • +
    • its contains the current iterators of all ranges
    • +
    +

    Incrementing is done from right to left, i.e. the iterator of the last range is incremented first. Once an iterator reaches the end of its range, it is reset to the beginning and the iterator of the previous range is incremented once. Dereferencing returns a tuple containing the results of dereferencing each iterator.

    +

    See itertools::product(Rs &&...rgs) for more details.

    +
    Template Parameters
    + + + +
    EndItersTuple type containing the end iterators of all ranges.
    ItersIterator types.
    +
    +
    + +

    Definition at line 65 of file product.hpp.

    +
    +Inheritance diagram for prod_iter< EndIters, Iters >:
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    prod_iter ()=default
     Default constructor.
     
     prod_iter (std::tuple< Iters... > its_begin, EndIters its_end)
     Construct a product iterator from given begin iterators and end iterators.
     
    decltype(auto) dereference () const
     Dereference the iterator.
     
    void increment ()
     Increment the iterator by incrementing the current iterators starting with the iterator of the last range.
     
    bool operator== (prod_iter const &other) const
     Equal-to operator for two detail::prod_iter objects.
     
    template<typename SentinelIter >
    bool operator== (sentinel_t< SentinelIter > const &s) const
     Equal-to operator for a detail::prod_iter and an itertools::sentinel_t.
     
    + + + + + + + + + + +

    +Public Attributes

    std::tuple< Iters... > its = its_begin
     Tuple containing the current iterators of the original ranges.
     
    std::tuple< Iters... > its_begin
     Tuple containing the begin iterators of the original ranges.
     
    EndIters its_end
     Tuple containing the end iterators of the original ranges.
     
    + + + + +

    +Static Public Attributes

    static constexpr long Rank = sizeof...(Iters)
     Number of original ranges.
     
    +

    Constructor & Destructor Documentation

    + +

    ◆ prod_iter()

    + +
    +
    +
    +template<typename EndIters , typename... Iters>
    + + + + + +
    + + + + + + + + + + + +
    prod_iter (std::tuple< Iters... > its_begin,
    EndIters its_end )
    +
    +inline
    +
    + +

    Construct a product iterator from given begin iterators and end iterators.

    +
    Parameters
    + + + +
    its_beginTuple containing begin iterators of the original ranges.
    its_endTuple containing end iterators of the original ranges.
    +
    +
    + +

    Definition at line 87 of file product.hpp.

    + +
    +
    +

    Member Function Documentation

    + +

    ◆ dereference()

    + +
    +
    +
    +template<typename EndIters , typename... Iters>
    + + + + + +
    + + + + + + + +
    decltype(auto) dereference () const
    +
    +inline
    +
    + +

    Dereference the iterator.

    +
    Returns
    Tuple containing the dereferenced values of all original iterators.
    + +

    Definition at line 138 of file product.hpp.

    + +
    +
    + +

    ◆ increment()

    + +
    +
    +
    +template<typename EndIters , typename... Iters>
    + + + + + +
    + + + + + + + +
    void increment ()
    +
    +inline
    +
    + +

    Increment the iterator by incrementing the current iterators starting with the iterator of the last range.

    + +

    Definition at line 106 of file product.hpp.

    + +
    +
    + +

    ◆ operator==() [1/2]

    + +
    +
    +
    +template<typename EndIters , typename... Iters>
    + + + + + +
    + + + + + + + +
    bool operator== (prod_iter< EndIters, Iters > const & other) const
    +
    +inline
    +
    + +

    Equal-to operator for two detail::prod_iter objects.

    +
    Parameters
    + + +
    otherdetail::prod_iter to compare with.
    +
    +
    +
    Returns
    True, if all original iterators are equal.
    + +

    Definition at line 114 of file product.hpp.

    + +
    +
    + +

    ◆ operator==() [2/2]

    + +
    +
    +
    +template<typename EndIters , typename... Iters>
    +
    +template<typename SentinelIter >
    + + + + + +
    + + + + + + + +
    bool operator== (sentinel_t< SentinelIter > const & s) const
    +
    +inline
    +
    + +

    Equal-to operator for a detail::prod_iter and an itertools::sentinel_t.

    +

    We reach the end of the product range, when the first iterator, i.e. std::get<0>(its), is at its end.

    +
    Template Parameters
    + + +
    SentinelIterIterator type of the sentinel.
    +
    +
    +
    Parameters
    + + +
    sitertools::sentinel_t to compare with.
    +
    +
    +
    Returns
    True, if the first iterator, i.e. std::get<0>(its), is equal to the iterator of the sentinel.
    + +

    Definition at line 125 of file product.hpp.

    + +
    +
    +

    Member Data Documentation

    + +

    ◆ its

    + +
    +
    +
    +template<typename EndIters , typename... Iters>
    + + + + +
    std::tuple<Iters...> its = its_begin
    +
    + +

    Tuple containing the current iterators of the original ranges.

    + +

    Definition at line 73 of file product.hpp.

    + +
    +
    + +

    ◆ its_begin

    + +
    +
    +
    +template<typename EndIters , typename... Iters>
    + + + + +
    std::tuple<Iters...> its_begin
    +
    + +

    Tuple containing the begin iterators of the original ranges.

    + +

    Definition at line 67 of file product.hpp.

    + +
    +
    + +

    ◆ its_end

    + +
    +
    +
    +template<typename EndIters , typename... Iters>
    + + + + +
    EndIters its_end
    +
    + +

    Tuple containing the end iterators of the original ranges.

    + +

    Definition at line 70 of file product.hpp.

    + +
    +
    + +

    ◆ Rank

    + +
    +
    +
    +template<typename EndIters , typename... Iters>
    + + + + + +
    + + + + +
    constexpr long Rank = sizeof...(Iters)
    +
    +staticconstexpr
    +
    + +

    Number of original ranges.

    + +

    Definition at line 76 of file product.hpp.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/unstable/structitertools_1_1detail_1_1prod__iter.png b/docs/unstable/structitertools_1_1detail_1_1prod__iter.png new file mode 100644 index 0000000..8e62692 Binary files /dev/null and b/docs/unstable/structitertools_1_1detail_1_1prod__iter.png differ diff --git a/docs/unstable/structitertools_1_1detail_1_1sliced-members.html b/docs/unstable/structitertools_1_1detail_1_1sliced-members.html new file mode 100644 index 0000000..9ae0711 --- /dev/null +++ b/docs/unstable/structitertools_1_1detail_1_1sliced-members.html @@ -0,0 +1,134 @@ + + + + + + + +TRIQS/itertools: Member List + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    sliced< R > Member List
    +
    +
    + +

    This is the complete list of members for sliced< R >, including all inherited members.

    + + + + + + + + + + + + + + +
    begin() noexceptsliced< R >inline
    begin() const noexceptsliced< R >inline
    cbegin() const noexceptsliced< R >inline
    cend() const noexceptsliced< R >inline
    const_iterator typedefsliced< R >
    end() noexceptsliced< R >inline
    end() const noexceptsliced< R >inline
    end_idxsliced< R >
    iterator typedefsliced< R >
    operator==(sliced const &) const =defaultsliced< R >
    rgsliced< R >
    size() constsliced< R >inline
    start_idxsliced< R >
    +
    + + + + diff --git a/docs/unstable/structitertools_1_1detail_1_1sliced.html b/docs/unstable/structitertools_1_1detail_1_1sliced.html new file mode 100644 index 0000000..4992525 --- /dev/null +++ b/docs/unstable/structitertools_1_1detail_1_1sliced.html @@ -0,0 +1,514 @@ + + + + + + + +TRIQS/itertools: sliced< R > + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    + +

    #include <itertools/slice.hpp>

    +

    Detailed Description

    +
    template<typename R>
    +struct itertools::detail::sliced< R >

    Represents a sliced range.

    +

    See itertools::slice(R &&, std::ptrdiff_t, std::ptrdiff_t) for more details.

    +
    Template Parameters
    + + +
    RRange type.
    +
    +
    + +

    Definition at line 44 of file slice.hpp.

    +
    + + + + + + + +

    +Public Types

    using const_iterator = decltype(std::cbegin(rg))
     Const iterator type of the sliced range.
     
    using iterator = decltype(std::begin(rg))
     Iterator type of the sliced range.
     
    + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    const_iterator begin () const noexcept
     Const overload of begin().
     
    iterator begin () noexcept
     Beginning of the sliced range.
     
    const_iterator cbegin () const noexcept
     Const version of begin().
     
    const_iterator cend () const noexcept
     Const version of end().
     
    const_iterator end () const noexcept
     Const overload of end().
     
    iterator end () noexcept
     End of the sliced range.
     
    +bool operator== (sliced const &) const =default
     Default equal-to operator.
     
    std::ptrdiff_t size () const
     Helper function to calculate the size of the sliced range.
     
    + + + + + + + + + + +

    +Public Attributes

    std::ptrdiff_t end_idx
     Index at which the sliced range ends.
     
    rg
     Original range.
     
    std::ptrdiff_t start_idx
     Index at which the sliced range starts.
     
    +

    Member Typedef Documentation

    + +

    ◆ const_iterator

    + +
    +
    +
    +template<typename R >
    + + + + +
    using const_iterator = decltype(std::cbegin(rg))
    +
    + +

    Const iterator type of the sliced range.

    + +

    Definition at line 58 of file slice.hpp.

    + +
    +
    + +

    ◆ iterator

    + +
    +
    +
    +template<typename R >
    + + + + +
    using iterator = decltype(std::begin(rg))
    +
    + +

    Iterator type of the sliced range.

    + +

    Definition at line 55 of file slice.hpp.

    + +
    +
    +

    Member Function Documentation

    + +

    ◆ begin() [1/2]

    + +
    +
    +
    +template<typename R >
    + + + + + +
    + + + + + + + +
    const_iterator begin () const
    +
    +inlinenoexcept
    +
    + +

    Const overload of begin().

    + +

    Definition at line 82 of file slice.hpp.

    + +
    +
    + +

    ◆ begin() [2/2]

    + +
    +
    +
    +template<typename R >
    + + + + + +
    + + + + + + + +
    iterator begin ()
    +
    +inlinenoexcept
    +
    + +

    Beginning of the sliced range.

    +
    Returns
    Iterator to the beginning of the sliced range.
    + +

    Definition at line 76 of file slice.hpp.

    + +
    +
    + +

    ◆ cbegin()

    + +
    +
    +
    +template<typename R >
    + + + + + +
    + + + + + + + +
    const_iterator cbegin () const
    +
    +inlinenoexcept
    +
    + +

    Const version of begin().

    + +

    Definition at line 79 of file slice.hpp.

    + +
    +
    + +

    ◆ cend()

    + +
    +
    +
    +template<typename R >
    + + + + + +
    + + + + + + + +
    const_iterator cend () const
    +
    +inlinenoexcept
    +
    + +

    Const version of end().

    + +

    Definition at line 91 of file slice.hpp.

    + +
    +
    + +

    ◆ end() [1/2]

    + +
    +
    +
    +template<typename R >
    + + + + + +
    + + + + + + + +
    const_iterator end () const
    +
    +inlinenoexcept
    +
    + +

    Const overload of end().

    + +

    Definition at line 94 of file slice.hpp.

    + +
    +
    + +

    ◆ end() [2/2]

    + +
    +
    +
    +template<typename R >
    + + + + + +
    + + + + + + + +
    iterator end ()
    +
    +inlinenoexcept
    +
    + +

    End of the sliced range.

    +
    Returns
    Iterator to the end of the sliced range.
    + +

    Definition at line 88 of file slice.hpp.

    + +
    +
    + +

    ◆ size()

    + +
    +
    +
    +template<typename R >
    + + + + + +
    + + + + + + + +
    std::ptrdiff_t size () const
    +
    +inline
    +
    + +

    Helper function to calculate the size of the sliced range.

    +
    Returns
    Number of elements in the slice.
    + +

    Definition at line 67 of file slice.hpp.

    + +
    +
    +

    Member Data Documentation

    + +

    ◆ end_idx

    + +
    +
    +
    +template<typename R >
    + + + + +
    std::ptrdiff_t end_idx
    +
    + +

    Index at which the sliced range ends.

    + +

    Definition at line 52 of file slice.hpp.

    + +
    +
    + +

    ◆ rg

    + +
    +
    +
    +template<typename R >
    + + + + +
    R rg
    +
    + +

    Original range.

    + +

    Definition at line 46 of file slice.hpp.

    + +
    +
    + +

    ◆ start_idx

    + +
    +
    +
    +template<typename R >
    + + + + +
    std::ptrdiff_t start_idx
    +
    + +

    Index at which the sliced range starts.

    + +

    Definition at line 49 of file slice.hpp.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/unstable/structitertools_1_1detail_1_1stride__iter-members.html b/docs/unstable/structitertools_1_1detail_1_1stride__iter-members.html new file mode 100644 index 0000000..05dac66 --- /dev/null +++ b/docs/unstable/structitertools_1_1detail_1_1stride__iter-members.html @@ -0,0 +1,128 @@ + + + + + + + +TRIQS/itertools: Member List + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    stride_iter< Iter > Member List
    +
    +
    + +

    This is the complete list of members for stride_iter< Iter >, including all inherited members.

    + + + + + + + + +
    dereference() conststride_iter< Iter >inline
    increment()stride_iter< Iter >inline
    itstride_iter< Iter >
    operator==(stride_iter const &other) conststride_iter< Iter >inline
    stridestride_iter< Iter >
    stride_iter()=defaultstride_iter< Iter >
    stride_iter(Iter it, std::ptrdiff_t stride)stride_iter< Iter >inline
    +
    + + + + diff --git a/docs/unstable/structitertools_1_1detail_1_1stride__iter.html b/docs/unstable/structitertools_1_1detail_1_1stride__iter.html new file mode 100644 index 0000000..31ddb6b --- /dev/null +++ b/docs/unstable/structitertools_1_1detail_1_1stride__iter.html @@ -0,0 +1,362 @@ + + + + + + + +TRIQS/itertools: stride_iter< Iter > + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    + +

    #include <itertools/stride.hpp>

    +

    Detailed Description

    +
    template<typename Iter>
    +struct itertools::detail::stride_iter< Iter >

    Iterator for a detail::strided range.

    +

    It stores an iterator of the original range as well as a stride. Incrementing advances the original iterator by the given stride. Dereferencing simply returns the dereferenced original iterator.

    +

    See itertools::stride(R &&, std::ptrdiff_t) for more details.

    +
    Template Parameters
    + + +
    IterIterator type.
    +
    +
    + +

    Definition at line 48 of file stride.hpp.

    +
    +Inheritance diagram for stride_iter< Iter >:
    +
    +
    + +
    + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    stride_iter ()=default
     Default constructor.
     
     stride_iter (Iter it, std::ptrdiff_t stride)
     Construct a strided iterator from a given iterator and a given stride.
     
    decltype(auto) dereference () const
     Dereference the iterator.
     
    void increment ()
     Increment the iterator by advancing the original iterator by the stride.
     
    bool operator== (stride_iter const &other) const
     Equal-to operator for two detail::stride_iter objects.
     
    + + + + + + + +

    +Public Attributes

    Iter it
     Iterator of the original range.
     
    std::ptrdiff_t stride {1}
     Number of elements in the original range to skip when incrementing the iterator.
     
    +

    Constructor & Destructor Documentation

    + +

    ◆ stride_iter()

    + +
    +
    +
    +template<typename Iter >
    + + + + + +
    + + + + + + + + + + + +
    stride_iter (Iter it,
    std::ptrdiff_t stride )
    +
    +inline
    +
    + +

    Construct a strided iterator from a given iterator and a given stride.

    +
    Parameters
    + + + +
    itIterator of the original range.
    strideStride for advancing the iterator (has to be > 0).
    +
    +
    + +

    Definition at line 64 of file stride.hpp.

    + +
    +
    +

    Member Function Documentation

    + +

    ◆ dereference()

    + +
    +
    +
    +template<typename Iter >
    + + + + + +
    + + + + + + + +
    decltype(auto) dereference () const
    +
    +inline
    +
    + +

    Dereference the iterator.

    +
    Returns
    Dereferenced value of the original iterator.
    + +

    Definition at line 83 of file stride.hpp.

    + +
    +
    + +

    ◆ increment()

    + +
    +
    +
    +template<typename Iter >
    + + + + + +
    + + + + + + + +
    void increment ()
    +
    +inline
    +
    + +

    Increment the iterator by advancing the original iterator by the stride.

    + +

    Definition at line 69 of file stride.hpp.

    + +
    +
    + +

    ◆ operator==()

    + +
    +
    +
    +template<typename Iter >
    + + + + + +
    + + + + + + + +
    bool operator== (stride_iter< Iter > const & other) const
    +
    +inline
    +
    + +

    Equal-to operator for two detail::stride_iter objects.

    +
    Parameters
    + + +
    otherdetail::stride_iter to compare with.
    +
    +
    +
    Returns
    True, if the original iterators are equal.
    + +

    Definition at line 77 of file stride.hpp.

    + +
    +
    +

    Member Data Documentation

    + +

    ◆ it

    + +
    +
    +
    +template<typename Iter >
    + + + + +
    Iter it
    +
    + +

    Iterator of the original range.

    + +

    Definition at line 50 of file stride.hpp.

    + +
    +
    + +

    ◆ stride

    + +
    +
    +
    +template<typename Iter >
    + + + + +
    std::ptrdiff_t stride {1}
    +
    + +

    Number of elements in the original range to skip when incrementing the iterator.

    + +

    Definition at line 53 of file stride.hpp.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/unstable/structitertools_1_1detail_1_1stride__iter.png b/docs/unstable/structitertools_1_1detail_1_1stride__iter.png new file mode 100644 index 0000000..9548321 Binary files /dev/null and b/docs/unstable/structitertools_1_1detail_1_1stride__iter.png differ diff --git a/docs/unstable/structitertools_1_1detail_1_1strided-members.html b/docs/unstable/structitertools_1_1detail_1_1strided-members.html new file mode 100644 index 0000000..276e245 --- /dev/null +++ b/docs/unstable/structitertools_1_1detail_1_1strided-members.html @@ -0,0 +1,132 @@ + + + + + + + +TRIQS/itertools: Member List + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    strided< R > Member List
    +
    +
    + +

    This is the complete list of members for strided< R >, including all inherited members.

    + + + + + + + + + + + + +
    begin() noexceptstrided< R >inline
    begin() const noexceptstrided< R >inline
    cbegin() const noexceptstrided< R >inline
    cend() const noexceptstrided< R >inline
    const_iterator typedefstrided< R >
    end() noexceptstrided< R >inline
    end() const noexceptstrided< R >inline
    iterator typedefstrided< R >
    operator==(strided const &) const =defaultstrided< R >
    rgstrided< R >
    stridestrided< R >
    +
    + + + + diff --git a/docs/unstable/structitertools_1_1detail_1_1strided.html b/docs/unstable/structitertools_1_1detail_1_1strided.html new file mode 100644 index 0000000..f6a7738 --- /dev/null +++ b/docs/unstable/structitertools_1_1detail_1_1strided.html @@ -0,0 +1,456 @@ + + + + + + + +TRIQS/itertools: strided< R > + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    + +

    #include <itertools/stride.hpp>

    +

    Detailed Description

    +
    template<typename R>
    +struct itertools::detail::strided< R >

    Represents a strided range.

    +

    See itertools::stride(R &&, std::ptrdiff_t) for more details.

    +
    Template Parameters
    + + +
    RRange type.
    +
    +
    + +

    Definition at line 94 of file stride.hpp.

    +
    + + + + + + + +

    +Public Types

    using const_iterator = stride_iter<decltype(std::cbegin(rg))>
     Const iterator type of the strided range.
     
    using iterator = stride_iter<decltype(std::begin(rg))>
     Iterator type of the strided range.
     
    + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    const_iterator begin () const noexcept
     Const overload of begin().
     
    iterator begin () noexcept
     Beginning of the strided range.
     
    const_iterator cbegin () const noexcept
     Const version of begin().
     
    const_iterator cend () const noexcept
     Const version of end().
     
    const_iterator end () const noexcept
     Const overload of end().
     
    iterator end () noexcept
     End of the strided range.
     
    +bool operator== (strided const &) const =default
     Default equal-to operator.
     
    + + + + + + + +

    +Public Attributes

    rg
     Original range.
     
    std::ptrdiff_t stride
     Number of elements in the original range to skip when incrementing the iterator.
     
    +

    Member Typedef Documentation

    + +

    ◆ const_iterator

    + +
    +
    +
    +template<typename R >
    + + + + +
    using const_iterator = stride_iter<decltype(std::cbegin(rg))>
    +
    + +

    Const iterator type of the strided range.

    + +

    Definition at line 105 of file stride.hpp.

    + +
    +
    + +

    ◆ iterator

    + +
    +
    +
    +template<typename R >
    + + + + +
    using iterator = stride_iter<decltype(std::begin(rg))>
    +
    + +

    Iterator type of the strided range.

    + +

    Definition at line 102 of file stride.hpp.

    + +
    +
    +

    Member Function Documentation

    + +

    ◆ begin() [1/2]

    + +
    +
    +
    +template<typename R >
    + + + + + +
    + + + + + + + +
    const_iterator begin () const
    +
    +inlinenoexcept
    +
    + +

    Const overload of begin().

    + +

    Definition at line 128 of file stride.hpp.

    + +
    +
    + +

    ◆ begin() [2/2]

    + +
    +
    +
    +template<typename R >
    + + + + + +
    + + + + + + + +
    iterator begin ()
    +
    +inlinenoexcept
    +
    + +

    Beginning of the strided range.

    +
    Returns
    detail::stride_iter containing the begin iterator of the original range and the stride.
    + +

    Definition at line 122 of file stride.hpp.

    + +
    +
    + +

    ◆ cbegin()

    + +
    +
    +
    +template<typename R >
    + + + + + +
    + + + + + + + +
    const_iterator cbegin () const
    +
    +inlinenoexcept
    +
    + +

    Const version of begin().

    + +

    Definition at line 125 of file stride.hpp.

    + +
    +
    + +

    ◆ cend()

    + +
    +
    +
    +template<typename R >
    + + + + + +
    + + + + + + + +
    const_iterator cend () const
    +
    +inlinenoexcept
    +
    + +

    Const version of end().

    + +

    Definition at line 138 of file stride.hpp.

    + +
    +
    + +

    ◆ end() [1/2]

    + +
    +
    +
    +template<typename R >
    + + + + + +
    + + + + + + + +
    const_iterator end () const
    +
    +inlinenoexcept
    +
    + +

    Const overload of end().

    + +

    Definition at line 141 of file stride.hpp.

    + +
    +
    + +

    ◆ end() [2/2]

    + +
    +
    +
    +template<typename R >
    + + + + + +
    + + + + + + + +
    iterator end ()
    +
    +inlinenoexcept
    +
    + +

    End of the strided range.

    +
    Returns
    detail::stride_iter containing an iterator of the original range end_offset() elements beyond the beginning and the stride.
    + +

    Definition at line 135 of file stride.hpp.

    + +
    +
    +

    Member Data Documentation

    + +

    ◆ rg

    + +
    +
    +
    +template<typename R >
    + + + + +
    R rg
    +
    + +

    Original range.

    + +

    Definition at line 96 of file stride.hpp.

    + +
    +
    + +

    ◆ stride

    + +
    +
    +
    +template<typename R >
    + + + + +
    std::ptrdiff_t stride
    +
    + +

    Number of elements in the original range to skip when incrementing the iterator.

    + +

    Definition at line 99 of file stride.hpp.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/unstable/structitertools_1_1detail_1_1transform__iter-members.html b/docs/unstable/structitertools_1_1detail_1_1transform__iter-members.html new file mode 100644 index 0000000..e1d99f6 --- /dev/null +++ b/docs/unstable/structitertools_1_1detail_1_1transform__iter-members.html @@ -0,0 +1,133 @@ + + + + + + + +TRIQS/itertools: Member List + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    transform_iter< Iter, F, Value > Member List
    +
    +
    + +

    This is the complete list of members for transform_iter< Iter, F, Value >, including all inherited members.

    + + + + + + + + + + + + + +
    dereference() consttransform_iter< Iter, F, Value >inline
    increment()transform_iter< Iter, F, Value >inline
    ittransform_iter< Iter, F, Value >
    lambdatransform_iter< Iter, F, Value >mutable
    operator=(transform_iter &&)=defaulttransform_iter< Iter, F, Value >
    operator=(transform_iter const &other)transform_iter< Iter, F, Value >inline
    operator==(transform_iter const &other) consttransform_iter< Iter, F, Value >inline
    operator==(sentinel_t< SentinelIter > const &s) consttransform_iter< Iter, F, Value >inline
    transform_iter()=defaulttransform_iter< Iter, F, Value >
    transform_iter(Iter it, F lambda)transform_iter< Iter, F, Value >inline
    transform_iter(transform_iter &&)=defaulttransform_iter< Iter, F, Value >
    transform_iter(transform_iter const &)=defaulttransform_iter< Iter, F, Value >
    +
    + + + + diff --git a/docs/unstable/structitertools_1_1detail_1_1transform__iter.html b/docs/unstable/structitertools_1_1detail_1_1transform__iter.html new file mode 100644 index 0000000..ed86fe2 --- /dev/null +++ b/docs/unstable/structitertools_1_1detail_1_1transform__iter.html @@ -0,0 +1,474 @@ + + + + + + + +TRIQS/itertools: transform_iter< Iter, F, Value > + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    + +

    #include <itertools/transform.hpp>

    +

    Detailed Description

    +
    template<typename Iter, typename F, typename Value = std::invoke_result_t<F, typename std::iterator_traits<Iter>::value_type>>
    +struct itertools::detail::transform_iter< Iter, F, Value >

    Iterator for a detail::transformed range.

    +

    It stores an iterator of the original range and a callable object that is used to transform the elements of the original range. Incrementing simply increments the iterator. Dereferencing returns the result of the callable object applied to the dereferenced iterator, i.e. the transformed element.

    +

    See itertools::transform(R &&, F) for more details.

    +
    Template Parameters
    + + + + +
    IterIterator type.
    FCallable type.
    ValueReturn type of the callable.
    +
    +
    + +

    Definition at line 52 of file transform.hpp.

    +
    +Inheritance diagram for transform_iter< Iter, F, Value >:
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    transform_iter ()=default
     Default constructor.
     
     transform_iter (Iter it, F lambda)
     Construct a transformed iterator from a given iterator and callable.
     
    transform_iter (transform_iter &&)=default
     Default move constructor.
     
    transform_iter (transform_iter const &)=default
     Default copy constructor.
     
    decltype(auto) dereference () const
     Dereference the iterator.
     
    void increment ()
     Increment the iterator by incrementing the original iterator.
     
    +transform_iteroperator= (transform_iter &&)=default
     Default move assignment operator.
     
    transform_iteroperator= (transform_iter const &other)
     Custom copy assignment operator makes sure that the optional callable is correctly copied.
     
    template<typename SentinelIter >
    bool operator== (sentinel_t< SentinelIter > const &s) const
     Equal-to operator for a detail::transform_iter and an itertools::sentinel_t.
     
    bool operator== (transform_iter const &other) const
     Equal-to operator for two detail::transform_iter objects.
     
    + + + + + + + +

    +Public Attributes

    Iter it
     Iterator of the original range.
     
    std::optional< F > lambda
     Callable doing the transformation.
     
    +

    Constructor & Destructor Documentation

    + +

    ◆ transform_iter()

    + +
    +
    +
    +template<typename Iter , typename F , typename Value = std::invoke_result_t<F, typename std::iterator_traits<Iter>::value_type>>
    + + + + + +
    + + + + + + + + + + + +
    transform_iter (Iter it,
    F lambda )
    +
    +inline
    +
    + +

    Construct a transformed iterator from a given iterator and callable.

    +
    Parameters
    + + + +
    itIterator of the original range.
    lambdaCallable doing the transformation.
    +
    +
    + +

    Definition at line 68 of file transform.hpp.

    + +
    +
    +

    Member Function Documentation

    + +

    ◆ dereference()

    + +
    +
    +
    +template<typename Iter , typename F , typename Value = std::invoke_result_t<F, typename std::iterator_traits<Iter>::value_type>>
    + + + + + +
    + + + + + + + +
    decltype(auto) dereference () const
    +
    +inline
    +
    + +

    Dereference the iterator.

    +
    Returns
    Result of the callable applied to the dereferenced iterator, i.e. the transformed value.
    + +

    Definition at line 116 of file transform.hpp.

    + +
    +
    + +

    ◆ increment()

    + +
    +
    +
    +template<typename Iter , typename F , typename Value = std::invoke_result_t<F, typename std::iterator_traits<Iter>::value_type>>
    + + + + + +
    + + + + + + + +
    void increment ()
    +
    +inline
    +
    + +

    Increment the iterator by incrementing the original iterator.

    + +

    Definition at line 71 of file transform.hpp.

    + +
    +
    + +

    ◆ operator=()

    + +
    +
    +
    +template<typename Iter , typename F , typename Value = std::invoke_result_t<F, typename std::iterator_traits<Iter>::value_type>>
    + + + + + +
    + + + + + + + +
    transform_iter & operator= (transform_iter< Iter, F, Value > const & other)
    +
    +inline
    +
    + +

    Custom copy assignment operator makes sure that the optional callable is correctly copied.

    +
    Parameters
    + + +
    otherdetail::transform_iter to copy from.
    +
    +
    + +

    Definition at line 86 of file transform.hpp.

    + +
    +
    + +

    ◆ operator==() [1/2]

    + +
    +
    +
    +template<typename Iter , typename F , typename Value = std::invoke_result_t<F, typename std::iterator_traits<Iter>::value_type>>
    +
    +template<typename SentinelIter >
    + + + + + +
    + + + + + + + +
    bool operator== (sentinel_t< SentinelIter > const & s) const
    +
    +inline
    +
    + +

    Equal-to operator for a detail::transform_iter and an itertools::sentinel_t.

    +
    Template Parameters
    + + +
    SentinelIterIterator type of the sentinel.
    +
    +
    +
    Parameters
    + + +
    sitertools::sentinel_t to compare with.
    +
    +
    +
    Returns
    True, if the original iterator is equal to the iterator stored in the sentinel.
    + +

    Definition at line 110 of file transform.hpp.

    + +
    +
    + +

    ◆ operator==() [2/2]

    + +
    +
    +
    +template<typename Iter , typename F , typename Value = std::invoke_result_t<F, typename std::iterator_traits<Iter>::value_type>>
    + + + + + +
    + + + + + + + +
    bool operator== (transform_iter< Iter, F, Value > const & other) const
    +
    +inline
    +
    + +

    Equal-to operator for two detail::transform_iter objects.

    +
    Parameters
    + + +
    otherdetail::transform_iter to compare with.
    +
    +
    +
    Returns
    True, if the original iterators are equal.
    + +

    Definition at line 101 of file transform.hpp.

    + +
    +
    +

    Member Data Documentation

    + +

    ◆ it

    + +
    +
    +
    +template<typename Iter , typename F , typename Value = std::invoke_result_t<F, typename std::iterator_traits<Iter>::value_type>>
    + + + + +
    Iter it
    +
    + +

    Iterator of the original range.

    + +

    Definition at line 54 of file transform.hpp.

    + +
    +
    + +

    ◆ lambda

    + +
    +
    +
    +template<typename Iter , typename F , typename Value = std::invoke_result_t<F, typename std::iterator_traits<Iter>::value_type>>
    + + + + + +
    + + + + +
    std::optional<F> lambda
    +
    +mutable
    +
    + +

    Callable doing the transformation.

    + +

    Definition at line 57 of file transform.hpp.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/unstable/structitertools_1_1detail_1_1transform__iter.png b/docs/unstable/structitertools_1_1detail_1_1transform__iter.png new file mode 100644 index 0000000..339d054 Binary files /dev/null and b/docs/unstable/structitertools_1_1detail_1_1transform__iter.png differ diff --git a/docs/unstable/structitertools_1_1detail_1_1transformed-members.html b/docs/unstable/structitertools_1_1detail_1_1transformed-members.html new file mode 100644 index 0000000..c08d754 --- /dev/null +++ b/docs/unstable/structitertools_1_1detail_1_1transformed-members.html @@ -0,0 +1,129 @@ + + + + + + + +TRIQS/itertools: Member List + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    transformed< R, F > Member List
    +
    +
    + +

    This is the complete list of members for transformed< R, F >, including all inherited members.

    + + + + + + + + + +
    begin() const noexcepttransformed< R, F >inline
    cbegin() const noexcepttransformed< R, F >inline
    cend() const noexcepttransformed< R, F >inline
    const_iterator typedeftransformed< R, F >
    end() const noexcepttransformed< R, F >inline
    iterator typedeftransformed< R, F >
    lambdatransformed< R, F >
    rgtransformed< R, F >
    +
    + + + + diff --git a/docs/unstable/structitertools_1_1detail_1_1transformed.html b/docs/unstable/structitertools_1_1detail_1_1transformed.html new file mode 100644 index 0000000..e70798e --- /dev/null +++ b/docs/unstable/structitertools_1_1detail_1_1transformed.html @@ -0,0 +1,385 @@ + + + + + + + +TRIQS/itertools: transformed< R, F > + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    + +

    #include <itertools/transform.hpp>

    +

    Detailed Description

    +
    template<typename R, typename F>
    +struct itertools::detail::transformed< R, F >

    Represents a transformed range.

    +

    See itertools::transform(R &&, F) for more details.

    +
    Template Parameters
    + + + +
    RRange type.
    FCallable type.
    +
    +
    + +

    Definition at line 128 of file transform.hpp.

    +
    + + + + + + + +

    +Public Types

    using const_iterator = transform_iter<decltype(std::cbegin(rg)), F>
     Const iterator type of the transformed range.
     
    using iterator = const_iterator
     Iterator type of the transformed range.
     
    + + + + + + + + + + + + + +

    +Public Member Functions

    const_iterator begin () const noexcept
     The same as cbegin().
     
    const_iterator cbegin () const noexcept
     Beginning of the transformed range.
     
    auto cend () const noexcept
     End of the transformed range.
     
    auto end () const noexcept
     The same as cend().
     
    + + + + + + + +

    +Public Attributes

    lambda
     Callable doing the transformation.
     
    rg
     Original range.
     
    +

    Member Typedef Documentation

    + +

    ◆ const_iterator

    + +
    +
    +
    +template<typename R , typename F >
    + + + + +
    using const_iterator = transform_iter<decltype(std::cbegin(rg)), F>
    +
    + +

    Const iterator type of the transformed range.

    + +

    Definition at line 136 of file transform.hpp.

    + +
    +
    + +

    ◆ iterator

    + +
    +
    +
    +template<typename R , typename F >
    + + + + +
    using iterator = const_iterator
    +
    + +

    Iterator type of the transformed range.

    + +

    Definition at line 139 of file transform.hpp.

    + +
    +
    +

    Member Function Documentation

    + +

    ◆ begin()

    + +
    +
    +
    +template<typename R , typename F >
    + + + + + +
    + + + + + + + +
    const_iterator begin () const
    +
    +inlinenoexcept
    +
    + +

    The same as cbegin().

    + +

    Definition at line 148 of file transform.hpp.

    + +
    +
    + +

    ◆ cbegin()

    + +
    +
    +
    +template<typename R , typename F >
    + + + + + +
    + + + + + + + +
    const_iterator cbegin () const
    +
    +inlinenoexcept
    +
    + +

    Beginning of the transformed range.

    +
    Returns
    detail::transform_iter constructed from the beginning of the original range and the callable.
    + +

    Definition at line 145 of file transform.hpp.

    + +
    +
    + +

    ◆ cend()

    + +
    +
    +
    +template<typename R , typename F >
    + + + + + +
    + + + + + + + +
    auto cend () const
    +
    +inlinenoexcept
    +
    + +

    End of the transformed range.

    +
    Returns
    itertools::sentinel_t containing the end iterator of the original range.
    + +

    Definition at line 154 of file transform.hpp.

    + +
    +
    + +

    ◆ end()

    + +
    +
    +
    +template<typename R , typename F >
    + + + + + +
    + + + + + + + +
    auto end () const
    +
    +inlinenoexcept
    +
    + +

    The same as cend().

    + +

    Definition at line 157 of file transform.hpp.

    + +
    +
    +

    Member Data Documentation

    + +

    ◆ lambda

    + +
    +
    +
    +template<typename R , typename F >
    + + + + +
    F lambda
    +
    + +

    Callable doing the transformation.

    + +

    Definition at line 133 of file transform.hpp.

    + +
    +
    + +

    ◆ rg

    + +
    +
    +
    +template<typename R , typename F >
    + + + + +
    R rg
    +
    + +

    Original range.

    + +

    Definition at line 130 of file transform.hpp.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/unstable/structitertools_1_1detail_1_1zip__iter-members.html b/docs/unstable/structitertools_1_1detail_1_1zip__iter-members.html new file mode 100644 index 0000000..74a715f --- /dev/null +++ b/docs/unstable/structitertools_1_1detail_1_1zip__iter-members.html @@ -0,0 +1,128 @@ + + + + + + + +TRIQS/itertools: Member List + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    zip_iter< Iters > Member List
    +
    +
    + +

    This is the complete list of members for zip_iter< Iters >, including all inherited members.

    + + + + + + + + +
    dereference() constzip_iter< Iters >inline
    increment()zip_iter< Iters >inline
    itszip_iter< Iters >
    operator==(zip_iter const &other) constzip_iter< Iters >inline
    operator==(sentinel_t< SentinelIter > const &s) constzip_iter< Iters >inline
    zip_iter()=defaultzip_iter< Iters >
    zip_iter(std::tuple< Iters... > its)zip_iter< Iters >inline
    +
    + + + + diff --git a/docs/unstable/structitertools_1_1detail_1_1zip__iter.html b/docs/unstable/structitertools_1_1detail_1_1zip__iter.html new file mode 100644 index 0000000..f94d1b7 --- /dev/null +++ b/docs/unstable/structitertools_1_1detail_1_1zip__iter.html @@ -0,0 +1,385 @@ + + + + + + + +TRIQS/itertools: zip_iter< Iters > + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    + +

    #include <itertools/zip.hpp>

    +

    Detailed Description

    +
    template<typename... Iters>
    +struct itertools::detail::zip_iter< Iters >

    Iterator for a detail::zipped range.

    +

    It stores iterators of the original ranges in a tuple. Incrementing simply increments each iterator individually. Dereferencing returns a tuple containing the results of dereferencing each iterator.

    +

    See itertools::zip(Rs &&...rgs) for more details.

    +
    Template Parameters
    + + +
    ItersIterator types.
    +
    +
    + +

    Definition at line 49 of file zip.hpp.

    +
    +Inheritance diagram for zip_iter< Iters >:
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    zip_iter ()=default
     Default constructor.
     
     zip_iter (std::tuple< Iters... > its)
     Constructs a zipped iterator from given iterators.
     
    decltype(auto) dereference () const
     Dereference the iterator.
     
    void increment ()
     Increment the iterator by incrementing all original iterators stored in the tuple.
     
    template<typename SentinelIter >
    bool operator== (sentinel_t< SentinelIter > const &s) const
     Equal-to operator for a detail::zip_iter and an itertools::sentinel_t.
     
    bool operator== (zip_iter const &other) const
     Equal-to operator for two detail::zip_iter objects.
     
    + + + + +

    +Public Attributes

    std::tuple< Iters... > its
     Tuple containing iterators of the original ranges.
     
    +

    Constructor & Destructor Documentation

    + +

    ◆ zip_iter()

    + +
    +
    +
    +template<typename... Iters>
    + + + + + +
    + + + + + + + +
    zip_iter (std::tuple< Iters... > its)
    +
    +inline
    +
    + +

    Constructs a zipped iterator from given iterators.

    +
    Parameters
    + + +
    itsTuple containing iterators of the original ranges.
    +
    +
    + +

    Definition at line 60 of file zip.hpp.

    + +
    +
    +

    Member Function Documentation

    + +

    ◆ dereference()

    + +
    +
    +
    +template<typename... Iters>
    + + + + + +
    + + + + + + + +
    decltype(auto) dereference () const
    +
    +inline
    +
    + +

    Dereference the iterator.

    +
    Returns
    Tuple containing the dereferenced values of all original iterators.
    + +

    Definition at line 105 of file zip.hpp.

    + +
    +
    + +

    ◆ increment()

    + +
    +
    +
    +template<typename... Iters>
    + + + + + +
    + + + + + + + +
    void increment ()
    +
    +inline
    +
    + +

    Increment the iterator by incrementing all original iterators stored in the tuple.

    + +

    Definition at line 68 of file zip.hpp.

    + +
    +
    + +

    ◆ operator==() [1/2]

    + +
    +
    +
    +template<typename... Iters>
    +
    +template<typename SentinelIter >
    + + + + + +
    + + + + + + + +
    bool operator== (sentinel_t< SentinelIter > const & s) const
    +
    +inline
    +
    + +

    Equal-to operator for a detail::zip_iter and an itertools::sentinel_t.

    +

    Only one of the iterators has to be equal to the corresponding iterator of the sentinel. In case the original ranges have different lengths, the detail::zipped range should have the length of the shortest range.

    +
    Template Parameters
    + + +
    SentinelIterIterator type of the sentinel.
    +
    +
    +
    Parameters
    + + +
    sitertools::sentinel_t to compare with.
    +
    +
    +
    Returns
    True, if one of the original iterators is equal to the corresponding iterator of the sentinel.
    + +

    Definition at line 88 of file zip.hpp.

    + +
    +
    + +

    ◆ operator==() [2/2]

    + +
    +
    +
    +template<typename... Iters>
    + + + + + +
    + + + + + + + +
    bool operator== (zip_iter< Iters > const & other) const
    +
    +inline
    +
    + +

    Equal-to operator for two detail::zip_iter objects.

    +
    Parameters
    + + +
    otherdetail::zip_iter to compare with.
    +
    +
    +
    Returns
    True, if all original iterators are equal.
    + +

    Definition at line 76 of file zip.hpp.

    + +
    +
    +

    Member Data Documentation

    + +

    ◆ its

    + +
    +
    +
    +template<typename... Iters>
    + + + + +
    std::tuple<Iters...> its
    +
    + +

    Tuple containing iterators of the original ranges.

    + +

    Definition at line 51 of file zip.hpp.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/unstable/structitertools_1_1detail_1_1zip__iter.png b/docs/unstable/structitertools_1_1detail_1_1zip__iter.png new file mode 100644 index 0000000..4d609a5 Binary files /dev/null and b/docs/unstable/structitertools_1_1detail_1_1zip__iter.png differ diff --git a/docs/unstable/structitertools_1_1detail_1_1zipped-members.html b/docs/unstable/structitertools_1_1detail_1_1zipped-members.html new file mode 100644 index 0000000..3381d47 --- /dev/null +++ b/docs/unstable/structitertools_1_1detail_1_1zipped-members.html @@ -0,0 +1,133 @@ + + + + + + + +TRIQS/itertools: Member List + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    zipped< Rs > Member List
    +
    +
    + +

    This is the complete list of members for zipped< Rs >, including all inherited members.

    + + + + + + + + + + + + + +
    begin() noexceptzipped< Rs >inline
    begin() const noexceptzipped< Rs >inline
    cbegin() const noexceptzipped< Rs >inline
    cend() const noexceptzipped< Rs >inline
    const_iterator typedefzipped< Rs >
    end() noexceptzipped< Rs >inline
    end() const noexceptzipped< Rs >inline
    iterator typedefzipped< Rs >
    operator==(zipped const &) const =defaultzipped< Rs >
    seq_t typedefzipped< Rs >
    tuzipped< Rs >
    zipped(Us &&...rgs)zipped< Rs >inline
    +
    + + + + diff --git a/docs/unstable/structitertools_1_1detail_1_1zipped.html b/docs/unstable/structitertools_1_1detail_1_1zipped.html new file mode 100644 index 0000000..f162554 --- /dev/null +++ b/docs/unstable/structitertools_1_1detail_1_1zipped.html @@ -0,0 +1,506 @@ + + + + + + + +TRIQS/itertools: zipped< Rs > + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    + +

    #include <itertools/zip.hpp>

    +

    Detailed Description

    +
    template<typename... Rs>
    +struct itertools::detail::zipped< Rs >

    Represents a zipped range.

    +

    See itertools::zip(Rs &&...rgs) for more details.

    +
    Template Parameters
    + + +
    RsRange types.
    +
    +
    + +

    Definition at line 116 of file zip.hpp.

    +
    + + + + + + + + + + +

    +Public Types

    using const_iterator = zip_iter<decltype(std::cbegin(std::declval<Rs &>()))...>
     Const iterator type of the zipped range.
     
    using iterator = zip_iter<decltype(std::begin(std::declval<Rs &>()))...>
     Iterator type of the zipped range.
     
    using seq_t = std::index_sequence_for<Rs...>
     Convenience typedef for an std::index_sequence.
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    template<typename... Us>
     zipped (Us &&...rgs)
     Construct a zipped range from the given ranges.
     
    const_iterator begin () const noexcept
     Const overload of begin().
     
    iterator begin () noexcept
     Beginning of the zipped range.
     
    const_iterator cbegin () const noexcept
     Const version of begin().
     
    auto cend () const noexcept
     Const version of end().
     
    auto end () const noexcept
     Const overload of end().
     
    auto end () noexcept
     End of the zipped range.
     
    +bool operator== (zipped const &) const =default
     Default equal-to operator.
     
    + + + + +

    +Public Attributes

    std::tuple< Rs... > tu
     Tuple containing the original ranges.
     
    +

    Member Typedef Documentation

    + +

    ◆ const_iterator

    + +
    +
    +
    +template<typename... Rs>
    + + + + +
    using const_iterator = zip_iter<decltype(std::cbegin(std::declval<Rs &>()))...>
    +
    + +

    Const iterator type of the zipped range.

    + +

    Definition at line 127 of file zip.hpp.

    + +
    +
    + +

    ◆ iterator

    + +
    +
    +
    +template<typename... Rs>
    + + + + +
    using iterator = zip_iter<decltype(std::begin(std::declval<Rs &>()))...>
    +
    + +

    Iterator type of the zipped range.

    + +

    Definition at line 124 of file zip.hpp.

    + +
    +
    + +

    ◆ seq_t

    + +
    +
    +
    +template<typename... Rs>
    + + + + +
    using seq_t = std::index_sequence_for<Rs...>
    +
    + +

    Convenience typedef for an std::index_sequence.

    + +

    Definition at line 121 of file zip.hpp.

    + +
    +
    +

    Constructor & Destructor Documentation

    + +

    ◆ zipped()

    + +
    +
    +
    +template<typename... Rs>
    +
    +template<typename... Us>
    + + + + + +
    + + + + + + + +
    zipped (Us &&... rgs)
    +
    +inline
    +
    + +

    Construct a zipped range from the given ranges.

    +
    Template Parameters
    + + +
    UsRange types.
    +
    +
    +
    Parameters
    + + +
    rgsRanges to zip.
    +
    +
    + +

    Definition at line 135 of file zip.hpp.

    + +
    +
    +

    Member Function Documentation

    + +

    ◆ begin() [1/2]

    + +
    +
    +
    +template<typename... Rs>
    + + + + + +
    + + + + + + + +
    const_iterator begin () const
    +
    +inlinenoexcept
    +
    + +

    Const overload of begin().

    + +

    Definition at line 166 of file zip.hpp.

    + +
    +
    + +

    ◆ begin() [2/2]

    + +
    +
    +
    +template<typename... Rs>
    + + + + + +
    + + + + + + + +
    iterator begin ()
    +
    +inlinenoexcept
    +
    + +

    Beginning of the zipped range.

    +
    Returns
    detail::zip_iter constructed from the begin iterators of the original ranges.
    + +

    Definition at line 156 of file zip.hpp.

    + +
    +
    + +

    ◆ cbegin()

    + +
    +
    +
    +template<typename... Rs>
    + + + + + +
    + + + + + + + +
    const_iterator cbegin () const
    +
    +inlinenoexcept
    +
    + +

    Const version of begin().

    + +

    Definition at line 161 of file zip.hpp.

    + +
    +
    + +

    ◆ cend()

    + +
    +
    +
    +template<typename... Rs>
    + + + + + +
    + + + + + + + +
    auto cend () const
    +
    +inlinenoexcept
    +
    + +

    Const version of end().

    + +

    Definition at line 177 of file zip.hpp.

    + +
    +
    + +

    ◆ end() [1/2]

    + +
    +
    +
    +template<typename... Rs>
    + + + + + +
    + + + + + + + +
    auto end () const
    +
    +inlinenoexcept
    +
    + +

    Const overload of end().

    + +

    Definition at line 182 of file zip.hpp.

    + +
    +
    + +

    ◆ end() [2/2]

    + +
    +
    +
    +template<typename... Rs>
    + + + + + +
    + + + + + + + +
    auto end ()
    +
    +inlinenoexcept
    +
    + +

    End of the zipped range.

    +
    Returns
    itertools::sentinel_t containing a tuple of end iterators of the original ranges.
    + +

    Definition at line 172 of file zip.hpp.

    + +
    +
    +

    Member Data Documentation

    + +

    ◆ tu

    + +
    +
    +
    +template<typename... Rs>
    + + + + +
    std::tuple<Rs...> tu
    +
    + +

    Tuple containing the original ranges.

    + +

    Definition at line 118 of file zip.hpp.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/unstable/structitertools_1_1iterator__facade_3_01Iter_00_01Value_00_01std_1_1forward__iterator__tag_00_01Reference_00_01Difference_01_4.html b/docs/unstable/structitertools_1_1iterator__facade_3_01Iter_00_01Value_00_01std_1_1forward__iterator__tag_00_01Reference_00_01Difference_01_4.html new file mode 100644 index 0000000..ea85ba1b --- /dev/null +++ b/docs/unstable/structitertools_1_1iterator__facade_3_01Iter_00_01Value_00_01std_1_1forward__iterator__tag_00_01Reference_00_01Difference_01_4.html @@ -0,0 +1,414 @@ + + + + + + + +TRIQS/itertools: iterator_facade< Iter, Value, std::forward_iterator_tag, Reference, Difference > + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    iterator_facade< Iter, Value, std::forward_iterator_tag, Reference, Difference >
    +
    +
    + +

    #include <itertools/iterator_facade.hpp>

    +

    Detailed Description

    +
    template<typename Iter, typename Value, typename Reference, typename Difference>
    +struct itertools::iterator_facade< Iter, Value, std::forward_iterator_tag, Reference, Difference >

    CRTP base class for various iterator types in itertools.

    +

    All iterator types defined in itertools are derived from this class. It uses the forward iterator category. Derived classes are required to implement the following member functions:

    +
    // used by operator++() and operator++(int)
    +
    void increment();
    +
    +
    // used by operator*() and operator->()
    +
    value_type [const] [&] dereference() [const];
    + +

    The [..] are optional and depend on the actual iterator type.

    +
    Template Parameters
    + + + + + +
    IterDerived iterator type.
    ValueValue type of the iterator.
    ReferenceReference type of the iterator.
    DifferenceDifference type of the iterator.
    +
    +
    + +

    Definition at line 61 of file iterator_facade.hpp.

    +
    + + + + + + + + + + + + + + + + +

    +Public Types

    using difference_type = Difference
     Difference type of the derived iterator.
     
    using iterator_category = std::forward_iterator_tag
     Iterator category of the derived iterator.
     
    using pointer = Value *
     Pointer type of the derived iterator.
     
    using reference = Reference
     Reference type of the derived iterator.
     
    using value_type = Value
     Value type of the derived iterator.
     
    + + + + + + + + + + + + + +

    +Public Member Functions

    decltype(auto) operator* () const
     Dereference operator.
     
    Iter & operator++ ()
     Pre-increment operator.
     
    Iter operator++ (int)
     Post-increment operator.
     
    decltype(auto) operator-> () const
     Member access operator.
     
    +

    Member Typedef Documentation

    + +

    ◆ difference_type

    + +
    +
    +
    +template<typename Iter , typename Value , typename Reference , typename Difference >
    + + + + +
    using difference_type = Difference
    +
    + +

    Difference type of the derived iterator.

    + +

    Definition at line 80 of file iterator_facade.hpp.

    + +
    +
    + +

    ◆ iterator_category

    + +
    +
    +
    +template<typename Iter , typename Value , typename Reference , typename Difference >
    + + + + +
    using iterator_category = std::forward_iterator_tag
    +
    + +

    Iterator category of the derived iterator.

    + +

    Definition at line 83 of file iterator_facade.hpp.

    + +
    +
    + +

    ◆ pointer

    + +
    +
    +
    +template<typename Iter , typename Value , typename Reference , typename Difference >
    + + + + +
    using pointer = Value *
    +
    + +

    Pointer type of the derived iterator.

    + +

    Definition at line 77 of file iterator_facade.hpp.

    + +
    +
    + +

    ◆ reference

    + +
    +
    +
    +template<typename Iter , typename Value , typename Reference , typename Difference >
    + + + + +
    using reference = Reference
    +
    + +

    Reference type of the derived iterator.

    + +

    Definition at line 74 of file iterator_facade.hpp.

    + +
    +
    + +

    ◆ value_type

    + +
    +
    +
    +template<typename Iter , typename Value , typename Reference , typename Difference >
    + + + + +
    using value_type = Value
    +
    + +

    Value type of the derived iterator.

    + +

    Definition at line 71 of file iterator_facade.hpp.

    + +
    +
    +

    Member Function Documentation

    + +

    ◆ operator*()

    + +
    +
    +
    +template<typename Iter , typename Value , typename Reference , typename Difference >
    + + + + + +
    + + + + + + + +
    decltype(auto) operator* () const
    +
    +inline
    +
    + +

    Dereference operator.

    +
    Returns
    Result of the derived iterator's dereference() function.
    + +

    Definition at line 108 of file iterator_facade.hpp.

    + +
    +
    + +

    ◆ operator++() [1/2]

    + +
    +
    +
    +template<typename Iter , typename Value , typename Reference , typename Difference >
    + + + + + +
    + + + + + + + +
    Iter & operator++ ()
    +
    +inline
    +
    + +

    Pre-increment operator.

    +
    Returns
    Reference to the derived iterator after calling the derived iterator's increment() function.
    + +

    Definition at line 89 of file iterator_facade.hpp.

    + +
    +
    + +

    ◆ operator++() [2/2]

    + +
    +
    +
    +template<typename Iter , typename Value , typename Reference , typename Difference >
    + + + + + +
    + + + + + + + +
    Iter operator++ (int )
    +
    +inline
    +
    + +

    Post-increment operator.

    +
    Returns
    Copy of the derived iterator before calling the derived iterator's increment() function.
    + +

    Definition at line 98 of file iterator_facade.hpp.

    + +
    +
    + +

    ◆ operator->()

    + +
    +
    +
    +template<typename Iter , typename Value , typename Reference , typename Difference >
    + + + + + +
    + + + + + + + +
    decltype(auto) operator-> () const
    +
    +inline
    +
    + +

    Member access operator.

    +
    Returns
    Result of the derived iterator's dereference() function.
    + +

    Definition at line 114 of file iterator_facade.hpp.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/unstable/structitertools_1_1iterator__facade_3_01Iter_00_01Value_00_01std_1_1forward__iterator__tag_00_01a11806ec86b98e77421e9b01495f47a2.html b/docs/unstable/structitertools_1_1iterator__facade_3_01Iter_00_01Value_00_01std_1_1forward__iterator__tag_00_01a11806ec86b98e77421e9b01495f47a2.html new file mode 100644 index 0000000..b50ff39 --- /dev/null +++ b/docs/unstable/structitertools_1_1iterator__facade_3_01Iter_00_01Value_00_01std_1_1forward__iterator__tag_00_01a11806ec86b98e77421e9b01495f47a2.html @@ -0,0 +1,130 @@ + + + + + + + +TRIQS/itertools: Member List + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + + + + + + diff --git a/docs/unstable/structitertools_1_1range_1_1all__t.html b/docs/unstable/structitertools_1_1range_1_1all__t.html new file mode 100644 index 0000000..3ae66f2 --- /dev/null +++ b/docs/unstable/structitertools_1_1range_1_1all__t.html @@ -0,0 +1,129 @@ + + + + + + + +TRIQS/itertools: range::all_t + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    range::all_t
    +
    +
    + +

    #include <itertools/range.hpp>

    +

    Detailed Description

    +

    Denote a full range at compile-time.

    +

    Can be used for accessing slices of multi-dimensional arrays.

    + +

    Definition at line 95 of file range.hpp.

    +

    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/unstable/structitertools_1_1range_1_1const__iterator-members.html b/docs/unstable/structitertools_1_1range_1_1const__iterator-members.html new file mode 100644 index 0000000..9964dda --- /dev/null +++ b/docs/unstable/structitertools_1_1range_1_1const__iterator-members.html @@ -0,0 +1,136 @@ + + + + + + + +TRIQS/itertools: Member List + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    range::const_iterator Member List
    +
    +
    + +

    This is the complete list of members for range::const_iterator, including all inherited members.

    + + + + + + + + + + + + + + + + +
    atEnd() const noexceptrange::const_iteratorinline
    difference_type typedefrange::const_iterator
    iterator_category typedefrange::const_iterator
    lastrange::const_iterator
    operator!=(const_iterator const &other) const noexceptrange::const_iteratorinline
    operator*() const noexceptrange::const_iteratorinline
    operator++() noexceptrange::const_iteratorinline
    operator++(int) noexceptrange::const_iteratorinline
    operator->() const noexceptrange::const_iteratorinline
    operator==(const_iterator const &other) const noexceptrange::const_iteratorinline
    pointer typedefrange::const_iterator
    posrange::const_iterator
    reference typedefrange::const_iterator
    steprange::const_iterator
    value_type typedefrange::const_iterator
    +
    + + + + diff --git a/docs/unstable/structitertools_1_1range_1_1const__iterator.html b/docs/unstable/structitertools_1_1range_1_1const__iterator.html new file mode 100644 index 0000000..5d49a73 --- /dev/null +++ b/docs/unstable/structitertools_1_1range_1_1const__iterator.html @@ -0,0 +1,557 @@ + + + + + + + +TRIQS/itertools: range::const_iterator + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    + +

    #include <itertools/range.hpp>

    +

    Detailed Description

    +

    Const iterator type for itertools::range.

    + +

    Definition at line 175 of file range.hpp.

    +
    + + + + + + + + + + + + + + + + +

    +Public Types

    using difference_type = std::ptrdiff_t
     Difference type.
     
    using iterator_category = std::forward_iterator_tag
     Iterator category.
     
    using pointer = value_type *
     Pointer type.
     
    using reference = value_type const &
     Reference type.
     
    using value_type = long
     Value type.
     
    + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    bool atEnd () const noexcept
     Has the iterator reached the end of the range?
     
    bool operator!= (const_iterator const &other) const noexcept
     Not-equal-to operator for two iterators.
     
    long operator* () const noexcept
     Dereference operator.
     
    const_iteratoroperator++ () noexcept
     Pre-increment operator increments the current value by the step size.
     
    const_iterator operator++ (int) noexcept
     Post-increment operator increments the current value by the step size.
     
    long operator-> () const noexcept
     Member access operator.
     
    bool operator== (const_iterator const &other) const noexcept
     Equal-to operator for two iterators.
     
    + + + + + + + + + + +

    +Public Attributes

    long last
     Last value of the range (excluded).
     
    long pos
     Current value.
     
    long step
     Step size.
     
    +

    Member Typedef Documentation

    + +

    ◆ difference_type

    + +
    +
    + + + + +
    using difference_type = std::ptrdiff_t
    +
    + +

    Difference type.

    + +

    Definition at line 195 of file range.hpp.

    + +
    +
    + +

    ◆ iterator_category

    + +
    +
    + + + + +
    using iterator_category = std::forward_iterator_tag
    +
    + +

    Iterator category.

    + +

    Definition at line 189 of file range.hpp.

    + +
    +
    + +

    ◆ pointer

    + +
    +
    + + + + +
    using pointer = value_type *
    +
    + +

    Pointer type.

    + +

    Definition at line 192 of file range.hpp.

    + +
    +
    + +

    ◆ reference

    + +
    +
    + + + + +
    using reference = value_type const &
    +
    + +

    Reference type.

    + +

    Definition at line 198 of file range.hpp.

    + +
    +
    + +

    ◆ value_type

    + +
    +
    + + + + +
    using value_type = long
    +
    + +

    Value type.

    + +

    Definition at line 186 of file range.hpp.

    + +
    +
    +

    Member Function Documentation

    + +

    ◆ atEnd()

    + +
    +
    + + + + + +
    + + + + + + + +
    bool atEnd () const
    +
    +inlinenoexcept
    +
    + +

    Has the iterator reached the end of the range?

    +
    Returns
    True, if the current value of the iterator is >= the last value of the range for positive step size or if the current value of the iterator is <= the last value of the range for negative step size.
    + +

    Definition at line 224 of file range.hpp.

    + +
    +
    + +

    ◆ operator!=()

    + +
    +
    + + + + + +
    + + + + + + + +
    bool operator!= (const_iterator const & other) const
    +
    +inlinenoexcept
    +
    + +

    Not-equal-to operator for two iterators.

    +
    Parameters
    + + +
    otherIterator to compare with.
    +
    +
    +
    Returns
    True, if the iterators are not equal.
    + +

    Definition at line 242 of file range.hpp.

    + +
    +
    + +

    ◆ operator*()

    + +
    +
    + + + + + +
    + + + + + + + +
    long operator* () const
    +
    +inlinenoexcept
    +
    + +

    Dereference operator.

    +
    Returns
    Current value of the iterator.
    + +

    Definition at line 248 of file range.hpp.

    + +
    +
    + +

    ◆ operator++() [1/2]

    + +
    +
    + + + + + +
    + + + + + + + +
    const_iterator & operator++ ()
    +
    +inlinenoexcept
    +
    + +

    Pre-increment operator increments the current value by the step size.

    +
    Returns
    Reference to the incremented iterator.
    + +

    Definition at line 204 of file range.hpp.

    + +
    +
    + +

    ◆ operator++() [2/2]

    + +
    +
    + + + + + +
    + + + + + + + +
    const_iterator operator++ (int )
    +
    +inlinenoexcept
    +
    + +

    Post-increment operator increments the current value by the step size.

    +
    Returns
    Copy of the iterator before incrementing.
    + +

    Definition at line 213 of file range.hpp.

    + +
    +
    + +

    ◆ operator->()

    + +
    +
    + + + + + +
    + + + + + + + +
    long operator-> () const
    +
    +inlinenoexcept
    +
    + +

    Member access operator.

    +
    Returns
    Current value of the iterator.
    + +

    Definition at line 254 of file range.hpp.

    + +
    +
    + +

    ◆ operator==()

    + +
    +
    + + + + + +
    + + + + + + + +
    bool operator== (const_iterator const & other) const
    +
    +inlinenoexcept
    +
    + +

    Equal-to operator for two iterators.

    +
    Parameters
    + + +
    otherIterator to compare with.
    +
    +
    +
    Returns
    True, if the current values of both iterators are equal or both iterators are at the end of the range.
    + +

    Definition at line 232 of file range.hpp.

    + +
    +
    +

    Member Data Documentation

    + +

    ◆ last

    + +
    +
    + + + + +
    long last
    +
    + +

    Last value of the range (excluded).

    + +

    Definition at line 180 of file range.hpp.

    + +
    +
    + +

    ◆ pos

    + +
    +
    + + + + +
    long pos
    +
    + +

    Current value.

    + +

    Definition at line 177 of file range.hpp.

    + +
    +
    + +

    ◆ step

    + +
    +
    + + + + +
    long step
    +
    + +

    Step size.

    + +

    Definition at line 183 of file range.hpp.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/unstable/structitertools_1_1sentinel__t-members.html b/docs/unstable/structitertools_1_1sentinel__t-members.html new file mode 100644 index 0000000..4d8492d --- /dev/null +++ b/docs/unstable/structitertools_1_1sentinel__t-members.html @@ -0,0 +1,122 @@ + + + + + + + +TRIQS/itertools: Member List + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    sentinel_t< Iter > Member List
    +
    +
    + +

    This is the complete list of members for sentinel_t< Iter >, including all inherited members.

    + + +
    itsentinel_t< Iter >
    +
    + + + + diff --git a/docs/unstable/structitertools_1_1sentinel__t.html b/docs/unstable/structitertools_1_1sentinel__t.html new file mode 100644 index 0000000..4a5b055 --- /dev/null +++ b/docs/unstable/structitertools_1_1sentinel__t.html @@ -0,0 +1,166 @@ + + + + + + + +TRIQS/itertools: sentinel_t< Iter > + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    sentinel_t< Iter >
    +
    +
    + +

    #include <itertools/sentinel.hpp>

    +

    Detailed Description

    +
    template<typename Iter>
    +struct itertools::sentinel_t< Iter >

    Generic sentinel type that can be used to mark the end of a range.

    +
    Template Parameters
    + + +
    IterIterator type.
    +
    +
    + +

    Definition at line 38 of file sentinel.hpp.

    +
    + + + + +

    +Public Attributes

    Iter it
     End iterator of some range.
     
    +

    Member Data Documentation

    + +

    ◆ it

    + +
    +
    +
    +template<typename Iter >
    + + + + +
    Iter it
    +
    + +

    End iterator of some range.

    + +

    Definition at line 40 of file sentinel.hpp.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/unstable/sync_off.png b/docs/unstable/sync_off.png new file mode 100644 index 0000000..3b443fc Binary files /dev/null and b/docs/unstable/sync_off.png differ diff --git a/docs/unstable/sync_on.png b/docs/unstable/sync_on.png new file mode 100644 index 0000000..e08320f Binary files /dev/null and b/docs/unstable/sync_on.png differ diff --git a/docs/unstable/tab_a.png b/docs/unstable/tab_a.png new file mode 100644 index 0000000..3b725c4 Binary files /dev/null and b/docs/unstable/tab_a.png differ diff --git a/docs/unstable/tab_ad.png b/docs/unstable/tab_ad.png new file mode 100644 index 0000000..e34850a Binary files /dev/null and b/docs/unstable/tab_ad.png differ diff --git a/docs/unstable/tab_b.png b/docs/unstable/tab_b.png new file mode 100644 index 0000000..e2b4a86 Binary files /dev/null and b/docs/unstable/tab_b.png differ diff --git a/docs/unstable/tab_bd.png b/docs/unstable/tab_bd.png new file mode 100644 index 0000000..91c2524 Binary files /dev/null and b/docs/unstable/tab_bd.png differ diff --git a/docs/unstable/tab_h.png b/docs/unstable/tab_h.png new file mode 100644 index 0000000..fd5cb70 Binary files /dev/null and b/docs/unstable/tab_h.png differ diff --git a/docs/unstable/tab_hd.png b/docs/unstable/tab_hd.png new file mode 100644 index 0000000..2489273 Binary files /dev/null and b/docs/unstable/tab_hd.png differ diff --git a/docs/unstable/tab_s.png b/docs/unstable/tab_s.png new file mode 100644 index 0000000..ab478c9 Binary files /dev/null and b/docs/unstable/tab_s.png differ diff --git a/docs/unstable/tab_sd.png b/docs/unstable/tab_sd.png new file mode 100644 index 0000000..757a565 Binary files /dev/null and b/docs/unstable/tab_sd.png differ diff --git a/docs/unstable/tabs.css b/docs/unstable/tabs.css new file mode 100644 index 0000000..6c21d61 --- /dev/null +++ b/docs/unstable/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:#364D7C;-webkit-transition:all .25s;transition:all .25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px,1px,1px,1px)}#main-menu-state:not(:checked) ~ #main-menu{display:none}#main-menu-state:checked ~ #main-menu{display:block}@media(min-width:768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked) ~ #main-menu{display:block}}.sm-dox{background-image:url('tab_b.png')}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0px 1px 1px rgba(255, 255, 255, 0.9);color:#283A5D;outline:0}.sm-dox a:hover{background-image:url('tab_a.png');background-repeat:repeat-x;color:white;text-shadow:0px 1px 1px rgba(0, 0, 0, 1.0)}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255, 255, 255, 0.5);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:white}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url('tab_a.png');background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url('tab_b.png');line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283A5D transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:url('tab_s.png');background-repeat:no-repeat;background-position:right;-moz-border-radius:0 !important;-webkit-border-radius:0;border-radius:0 !important}.sm-dox a:hover{background-image:url('tab_a.png');background-repeat:repeat-x;color:white;text-shadow:0px 1px 1px rgba(0, 0, 0, 1.0)}.sm-dox a:hover span.sub-arrow{border-color:white transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent white transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:white;-moz-border-radius:5px !important;-webkit-border-radius:5px;border-radius:5px !important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555555;background-image:none;border:0 !important}.sm-dox ul a:hover{background-image:url('tab_a.png');background-repeat:repeat-x;color:white;text-shadow:0px 1px 1px rgba(0, 0, 0, 1.0)}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent white}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:white;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url('tab_b.png')}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:white}} \ No newline at end of file diff --git a/docs/unstable/transform_8hpp.html b/docs/unstable/transform_8hpp.html new file mode 100644 index 0000000..8e4cf09 --- /dev/null +++ b/docs/unstable/transform_8hpp.html @@ -0,0 +1,151 @@ + + + + + + + +TRIQS/itertools: itertools/transform.hpp File Reference + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    transform.hpp File Reference
    +
    +
    +
    #include "./iterator_facade.hpp"
    +#include "./sentinel.hpp"
    +#include <iterator>
    +#include <optional>
    +#include <type_traits>
    +#include <utility>
    +

    Detailed Description

    +

    Provides a range adapting function for transforming a given range/view.

    + +

    Definition in file transform.hpp.

    +
    +

    Go to the source code of this file.

    + + + + + + + + +

    +Classes

    struct  transform_iter< Iter, F, Value >
     Iterator for a detail::transformed range. More...
     
    struct  transformed< R, F >
     Represents a transformed range. More...
     
    + + + + + +

    +Functions

    template<typename R , typename F >
    auto transform (R &&rg, F lambda)
     Lazy-transform a given range by applying a unary callable object to every element of the original range.
     
    +
    +
    + + + + diff --git a/docs/unstable/transform_8hpp.js b/docs/unstable/transform_8hpp.js new file mode 100644 index 0000000..1996c7a --- /dev/null +++ b/docs/unstable/transform_8hpp.js @@ -0,0 +1,4 @@ +var transform_8hpp = +[ + [ "transform", "transform_8hpp.html#ga7b31d5cff96c3dd4a24cf8a63e4f41a7", null ] +]; \ No newline at end of file diff --git a/docs/unstable/transform_8hpp_source.html b/docs/unstable/transform_8hpp_source.html new file mode 100644 index 0000000..a5309b3 --- /dev/null +++ b/docs/unstable/transform_8hpp_source.html @@ -0,0 +1,343 @@ + + + + + + + +TRIQS/itertools: itertools/transform.hpp Source File + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    transform.hpp
    +
    +
    +Go to the documentation of this file.
    1// Copyright (c) 2019-2022 Simons Foundation
    +
    2//
    +
    3// Licensed under the Apache License, Version 2.0 (the "License");
    +
    4// you may not use this file except in compliance with the License.
    +
    5// You may obtain a copy of the License at
    +
    6//
    +
    7// http://www.apache.org/licenses/LICENSE-2.0.txt
    +
    8//
    +
    9// Unless required by applicable law or agreed to in writing, software
    +
    10// distributed under the License is distributed on an "AS IS" BASIS,
    +
    11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +
    12// See the License for the specific language governing permissions and
    +
    13// limitations under the License.
    +
    14//
    +
    15// Authors: Olivier Parcollet, Nils Wentzell, chuffa
    +
    16
    +
    17/**
    +
    18 * @file
    +
    19 * @brief Provides a range adapting function for transforming a given range/view.
    +
    20 */
    +
    21
    +
    22#ifndef _ITERTOOLS_TRANSFORM_HPP
    +
    23#define _ITERTOOLS_TRANSFORM_HPP
    +
    24
    +
    25#include "./iterator_facade.hpp"
    +
    26#include "./sentinel.hpp"
    +
    27
    +
    28#include <iterator>
    +
    29#include <optional>
    +
    30#include <type_traits>
    +
    31#include <utility>
    +
    32
    +
    33namespace itertools {
    +
    34
    +
    35 namespace detail {
    +
    36
    +
    37 /**
    +
    38 * @ingroup range_iterators
    +
    39 * @brief Iterator for a detail::transformed range.
    +
    40 *
    +
    41 * @details It stores an iterator of the original range and a callable object that is used to transform the
    +
    42 * elements of the original range. Incrementing simply increments the iterator. Dereferencing returns the
    +
    43 * result of the callable object applied to the dereferenced iterator, i.e. the transformed element.
    +
    44 *
    +
    45 * See itertools::transform(R &&, F) for more details.
    +
    46 *
    +
    47 * @tparam Iter Iterator type.
    +
    48 * @tparam F Callable type.
    +
    49 * @tparam Value Return type of the callable.
    +
    50 */
    +
    51 template <typename Iter, typename F, typename Value = std::invoke_result_t<F, typename std::iterator_traits<Iter>::value_type>>
    +
    52 struct transform_iter : iterator_facade<transform_iter<Iter, F>, Value> {
    +
    53 /// Iterator of the original range.
    +
    54 Iter it;
    +
    55
    +
    56 /// Callable doing the transformation.
    +
    57 mutable std::optional<F> lambda;
    +
    58
    +
    59 /// Default constructor.
    +
    60 transform_iter() = default;
    +
    61
    +
    62 /**
    +
    63 * @brief Construct a transformed iterator from a given iterator and callable.
    +
    64 *
    +
    65 * @param it Iterator of the original range.
    +
    66 * @param lambda Callable doing the transformation.
    +
    67 */
    +
    68 transform_iter(Iter it, F lambda) : it(std::move(it)), lambda(std::move(lambda)) {}
    +
    69
    +
    70 /// Increment the iterator by incrementing the original iterator.
    +
    71 void increment() { ++it; }
    +
    72
    +
    73 /// Default move constructor.
    + +
    75
    +
    76 /// Default copy constructor.
    +
    77 transform_iter(transform_iter const &) = default;
    +
    78
    +
    79 /// Default move assignment operator.
    + +
    81
    +
    82 /**
    +
    83 * @brief Custom copy assignment operator makes sure that the optional callable is correctly copied.
    +
    84 * @param other detail::transform_iter to copy from.
    +
    85 */
    + +
    87 it = other.it;
    +
    88 if (other.lambda.has_value())
    +
    89 lambda.emplace(other.lambda.value());
    +
    90 else
    +
    91 lambda.reset();
    +
    92 return *this;
    +
    93 }
    +
    94
    +
    95 /**
    +
    96 * @brief Equal-to operator for two detail::transform_iter objects.
    +
    97 *
    +
    98 * @param other detail::transform_iter to compare with.
    +
    99 * @return True, if the original iterators are equal.
    +
    100 */
    +
    101 [[nodiscard]] bool operator==(transform_iter const &other) const { return it == other.it; }
    +
    102
    +
    103 /**
    +
    104 * @brief Equal-to operator for a detail::transform_iter and an itertools::sentinel_t.
    +
    105 *
    +
    106 * @tparam SentinelIter Iterator type of the sentinel.
    +
    107 * @param s itertools::sentinel_t to compare with.
    +
    108 * @return True, if the original iterator is equal to the iterator stored in the sentinel.
    +
    109 */
    +
    110 template <typename SentinelIter> [[nodiscard]] bool operator==(sentinel_t<SentinelIter> const &s) const { return (it == s.it); }
    +
    111
    +
    112 /**
    +
    113 * @brief Dereference the iterator.
    +
    114 * @return Result of the callable applied to the dereferenced iterator, i.e. the transformed value.
    +
    115 */
    +
    116 [[nodiscard]] decltype(auto) dereference() const { return (*lambda)(*it); }
    +
    117 };
    +
    118
    +
    119 /**
    +
    120 * @ingroup adapted_ranges
    +
    121 * @brief Represents a transformed range.
    +
    122 *
    +
    123 * @details See itertools::transform(R &&, F) for more details.
    +
    124 *
    +
    125 * @tparam R Range type.
    +
    126 * @tparam F Callable type.
    +
    127 */
    +
    128 template <typename R, typename F> struct transformed {
    +
    129 /// Original range.
    +
    130 R rg;
    +
    131
    +
    132 /// Callable doing the transformation.
    + +
    134
    +
    135 /// Const iterator type of the transformed range.
    +
    136 using const_iterator = transform_iter<decltype(std::cbegin(rg)), F>;
    +
    137
    +
    138 /// Iterator type of the transformed range.
    +
    139 using iterator = const_iterator;
    +
    140
    +
    141 /**
    +
    142 * @brief Beginning of the transformed range.
    +
    143 * @return detail::transform_iter constructed from the beginning of the original range and the callable.
    +
    144 */
    +
    145 [[nodiscard]] const_iterator cbegin() const noexcept { return {std::cbegin(rg), lambda}; }
    +
    146
    +
    147 /// The same as cbegin().
    +
    148 [[nodiscard]] const_iterator begin() const noexcept { return cbegin(); }
    +
    149
    +
    150 /**
    +
    151 * @brief End of the transformed range.
    +
    152 * @return itertools::sentinel_t containing the end iterator of the original range.
    +
    153 */
    +
    154 [[nodiscard]] auto cend() const noexcept { return make_sentinel(std::cend(rg)); }
    +
    155
    +
    156 /// The same as cend().
    +
    157 [[nodiscard]] auto end() const noexcept { return cend(); }
    +
    158 };
    +
    159
    +
    160 } // namespace detail
    +
    161
    +
    162 /**
    +
    163 * @ingroup range_adapting_functions
    +
    164 * @brief Lazy-transform a given range by applying a unary callable object to every element of the original range.
    +
    165 *
    +
    166 * @details The value type of the transformed range depends on the return type of the callable.
    +
    167 * This function returns an iterable lazy object (a detail::transformed range), which can be used in range-based for loops:
    +
    168 *
    +
    169 * @code{.cpp}
    +
    170 * std::list<int> list { 1, 2, 3, 4, 5 };
    +
    171 *
    +
    172 * for (auto i : itertools::transform(list, [](int i) { return i * i; })) {
    +
    173 * std::cout << i << " ";
    +
    174 * }
    +
    175 * @endcode
    +
    176 *
    +
    177 * Output:
    +
    178 *
    +
    179 * ```
    +
    180 * 1 4 9 16 25
    +
    181 * ```
    +
    182 *
    +
    183 * See also <a href="https://en.cppreference.com/w/cpp/ranges/transform_view">std::ranges::views::transform</a>.
    +
    184 *
    +
    185 * @tparam R Range type.
    +
    186 * @tparam F Callable type.
    +
    187 * @param rg Range to transform.
    +
    188 * @param lambda Callable to be applied to the given range.
    +
    189 * @return A detail::transformed range.
    +
    190 */
    +
    191 template <typename R, typename F> [[nodiscard]] auto transform(R &&rg, F lambda) {
    +
    192 return detail::transformed<R, F>{std::forward<R>(rg), std::move(lambda)};
    +
    193 }
    +
    194
    +
    195} // namespace itertools
    +
    196
    +
    197#endif // _ITERTOOLS_TRANSFORM_HPP
    +
    auto transform(R &&rg, F lambda)
    Lazy-transform a given range by applying a unary callable object to every element of the original ran...
    +
    Iterator for a detail::transformed range.
    Definition transform.hpp:52
    +
    transform_iter()=default
    Default constructor.
    +
    transform_iter(Iter it, F lambda)
    Construct a transformed iterator from a given iterator and callable.
    Definition transform.hpp:68
    +
    bool operator==(transform_iter const &other) const
    Equal-to operator for two detail::transform_iter objects.
    +
    transform_iter & operator=(transform_iter const &other)
    Custom copy assignment operator makes sure that the optional callable is correctly copied.
    Definition transform.hpp:86
    +
    transform_iter & operator=(transform_iter &&)=default
    Default move assignment operator.
    +
    transform_iter(transform_iter &&)=default
    Default move constructor.
    +
    bool operator==(sentinel_t< SentinelIter > const &s) const
    Equal-to operator for a detail::transform_iter and an itertools::sentinel_t.
    +
    std::optional< F > lambda
    Callable doing the transformation.
    Definition transform.hpp:57
    +
    transform_iter(transform_iter const &)=default
    Default copy constructor.
    +
    decltype(auto) dereference() const
    Dereference the iterator.
    +
    Iter it
    Iterator of the original range.
    Definition transform.hpp:54
    +
    void increment()
    Increment the iterator by incrementing the original iterator.
    Definition transform.hpp:71
    +
    Represents a transformed range.
    +
    auto end() const noexcept
    The same as cend().
    + +
    const_iterator begin() const noexcept
    The same as cbegin().
    +
    auto cend() const noexcept
    End of the transformed range.
    +
    const_iterator cbegin() const noexcept
    Beginning of the transformed range.
    +
    F lambda
    Callable doing the transformation.
    +
    Generic sentinel type that can be used to mark the end of a range.
    Definition sentinel.hpp:38
    +
    +
    + + + + diff --git a/docs/unstable/utils_8hpp.html b/docs/unstable/utils_8hpp.html new file mode 100644 index 0000000..1687145 --- /dev/null +++ b/docs/unstable/utils_8hpp.html @@ -0,0 +1,147 @@ + + + + + + + +TRIQS/itertools: itertools/utils.hpp File Reference + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    utils.hpp File Reference
    +
    +
    +
    #include <cstddef>
    +#include <iterator>
    +#include <type_traits>
    +#include <utility>
    +#include <vector>
    +

    Detailed Description

    +

    Provides some utility functions for itertools.

    + +

    Definition in file utils.hpp.

    +
    +

    Go to the source code of this file.

    + + + + + + + + + + + + + +

    +Functions

    std::pair< std::ptrdiff_t, std::ptrdiff_t > chunk_range (std::ptrdiff_t first, std::ptrdiff_t last, long n_chunks, long rank)
     Given an integer range [first, last), divide it as equally as possible into N chunks.
     
    template<typename Iter1 , typename Iter2 >
    std::iterator_traits< Iter1 >::difference_type distance (Iter1 first, Iter2 last)
     Calculate the distance between two iterators.
     
    template<typename R >
    auto make_vector_from_range (R const &rg)
     Create a vector from a range.
     
    +
    +
    + + + + diff --git a/docs/unstable/utils_8hpp.js b/docs/unstable/utils_8hpp.js new file mode 100644 index 0000000..e51b2b3 --- /dev/null +++ b/docs/unstable/utils_8hpp.js @@ -0,0 +1,6 @@ +var utils_8hpp = +[ + [ "chunk_range", "utils_8hpp.html#gaaab750a8b80fe5326464d04ade5f072c", null ], + [ "distance", "utils_8hpp.html#gac0fa2fb9ac9b6525d934afa733f1104e", null ], + [ "make_vector_from_range", "utils_8hpp.html#ga8aa90a982e5cb521f6cdfbb11e6cb459", null ] +]; \ No newline at end of file diff --git a/docs/unstable/utils_8hpp_source.html b/docs/unstable/utils_8hpp_source.html new file mode 100644 index 0000000..757e9ba --- /dev/null +++ b/docs/unstable/utils_8hpp_source.html @@ -0,0 +1,233 @@ + + + + + + + +TRIQS/itertools: itertools/utils.hpp Source File + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    utils.hpp
    +
    +
    +Go to the documentation of this file.
    1// Copyright (c) 2019-2022 Simons Foundation
    +
    2//
    +
    3// Licensed under the Apache License, Version 2.0 (the "License");
    +
    4// you may not use this file except in compliance with the License.
    +
    5// You may obtain a copy of the License at
    +
    6//
    +
    7// http://www.apache.org/licenses/LICENSE-2.0.txt
    +
    8//
    +
    9// Unless required by applicable law or agreed to in writing, software
    +
    10// distributed under the License is distributed on an "AS IS" BASIS,
    +
    11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +
    12// See the License for the specific language governing permissions and
    +
    13// limitations under the License.
    +
    14//
    +
    15// Authors: Olivier Parcollet, Nils Wentzell, chuffa
    +
    16
    +
    17/**
    +
    18 * @file
    +
    19 * @brief Provides some utility functions for itertools.
    +
    20 */
    +
    21
    +
    22#ifndef _ITERTOOLS_UTILS_HPP
    +
    23#define _ITERTOOLS_UTILS_HPP
    +
    24
    +
    25#include <cstddef>
    +
    26#include <iterator>
    +
    27#include <type_traits>
    +
    28#include <utility>
    +
    29#include <vector>
    +
    30
    +
    31namespace itertools {
    +
    32
    +
    33 /**
    +
    34 * @addtogroup utilities
    +
    35 * @{
    +
    36 */
    +
    37
    +
    38 /**
    +
    39 * @brief Calculate the distance between two iterators.
    +
    40 *
    +
    41 * @details It is similar to <a href="https://en.cppreference.com/w/cpp/iterator/distance">std::distance</a>,
    +
    42 * except that it can be used for two different iterator types, e.g. in case one of them is a const iterator.
    +
    43 *
    +
    44 * @tparam Iter1 Iterator type #1.
    +
    45 * @tparam Iter2 Iterator type #2.
    +
    46 * @param first Iterator #1.
    +
    47 * @param last Iterator #2.
    +
    48 * @return Number of elements between the two iterators.
    +
    49 */
    +
    50 template <typename Iter1, typename Iter2>
    +
    51 [[nodiscard]] inline typename std::iterator_traits<Iter1>::difference_type distance(Iter1 first, Iter2 last) {
    +
    52 // O(1) for random access iterators
    +
    53 if constexpr (std::is_same_v<typename std::iterator_traits<Iter1>::iterator_category, std::random_access_iterator_tag>) {
    +
    54 return last - first;
    +
    55 } else { // O(n) for other iterators
    +
    56 typename std::iterator_traits<Iter1>::difference_type r(0);
    +
    57 for (; first != last; ++first) ++r;
    +
    58 return r;
    +
    59 }
    +
    60 }
    +
    61
    +
    62 /**
    +
    63 * @brief Create a vector from a range.
    +
    64 *
    +
    65 * @tparam R Range type.
    +
    66 * @param rg Range.
    +
    67 * @return std::vector<T> containing the elements of the range, where T denotes the value type of the range.
    +
    68 */
    +
    69 template <typename R> [[nodiscard]] auto make_vector_from_range(R const &rg) {
    +
    70 std::vector<std::decay_t<decltype(*(std::begin(rg)))>> vec{};
    +
    71 // do we really want to reserve memory here? maybe only for random access ranges?
    +
    72 if constexpr (std::is_same_v<decltype(std::cbegin(rg)), decltype(std::cend(rg))>) {
    +
    73 auto total_size = distance(std::cbegin(rg), std::cend(rg));
    +
    74 vec.reserve(total_size);
    +
    75 }
    +
    76 for (auto const &x : rg) vec.emplace_back(x);
    +
    77 return vec;
    +
    78 }
    +
    79
    +
    80 /**
    +
    81 * @brief Given an integer range `[first, last)`, divide it as equally as possible into N chunks.
    +
    82 *
    +
    83 * @details It is intended to divide a range among different processes. If the size of the range is not
    +
    84 * divisible by N without a remainder, i.e. `r = (last - first) % N`, then the first `r` chunks have one more element.
    +
    85 *
    +
    86 * @param first First value of the range.
    +
    87 * @param last Last value of the range (excluded).
    +
    88 * @param n_chunks Number of chunks to divide the range into.
    +
    89 * @param rank Rank of the calling process.
    +
    90 * @return Pair of indices specifying the first and last (excluded) value of the chunk assigned to the calling process.
    +
    91 */
    +
    92 [[nodiscard]] inline std::pair<std::ptrdiff_t, std::ptrdiff_t> chunk_range(std::ptrdiff_t first, std::ptrdiff_t last, long n_chunks, long rank) {
    +
    93 auto total_size = last - first;
    +
    94 auto chunk_size = total_size / n_chunks;
    +
    95 auto n_large_nodes = total_size - n_chunks * chunk_size;
    +
    96 if (rank < n_large_nodes)
    +
    97 return {first + rank * (chunk_size + 1), first + (rank + 1) * (chunk_size + 1)};
    +
    98 else
    +
    99 return {first + n_large_nodes + rank * chunk_size, first + n_large_nodes + (rank + 1) * chunk_size};
    +
    100 }
    +
    101
    +
    102 /** @} */
    +
    103
    +
    104} // namespace itertools
    +
    105
    +
    106#endif // _ITERTOOLS_UTILS_HPP
    +
    auto make_vector_from_range(R const &rg)
    Create a vector from a range.
    Definition utils.hpp:69
    +
    std::pair< std::ptrdiff_t, std::ptrdiff_t > chunk_range(std::ptrdiff_t first, std::ptrdiff_t last, long n_chunks, long rank)
    Given an integer range [first, last), divide it as equally as possible into N chunks.
    Definition utils.hpp:92
    +
    std::iterator_traits< Iter1 >::difference_type distance(Iter1 first, Iter2 last)
    Calculate the distance between two iterators.
    Definition utils.hpp:51
    +
    +
    + + + + diff --git a/docs/unstable/zip_8hpp.html b/docs/unstable/zip_8hpp.html new file mode 100644 index 0000000..36a73e2 --- /dev/null +++ b/docs/unstable/zip_8hpp.html @@ -0,0 +1,151 @@ + + + + + + + +TRIQS/itertools: itertools/zip.hpp File Reference + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    zip.hpp File Reference
    +
    +
    +
    #include "./iterator_facade.hpp"
    +#include "./sentinel.hpp"
    +#include <cstddef>
    +#include <iterator>
    +#include <tuple>
    +#include <utility>
    +

    Detailed Description

    +

    Provides a range adapting function for zipping a given number of ranges/views.

    + +

    Definition in file zip.hpp.

    +
    +

    Go to the source code of this file.

    + + + + + + + + +

    +Classes

    struct  zip_iter< Iters >
     Iterator for a detail::zipped range. More...
     
    struct  zipped< Rs >
     Represents a zipped range. More...
     
    + + + + + +

    +Functions

    template<typename... Rs>
    detail::zipped< Rs... > zip (Rs &&...rgs)
     Lazy-zip ranges together (similar to Python's zip).
     
    +
    +
    + + + + diff --git a/docs/unstable/zip_8hpp.js b/docs/unstable/zip_8hpp.js new file mode 100644 index 0000000..31ba52c --- /dev/null +++ b/docs/unstable/zip_8hpp.js @@ -0,0 +1,4 @@ +var zip_8hpp = +[ + [ "zip", "zip_8hpp.html#gaf7196a84296d770614fc47322e4ae8cd", null ] +]; \ No newline at end of file diff --git a/docs/unstable/zip_8hpp_source.html b/docs/unstable/zip_8hpp_source.html new file mode 100644 index 0000000..e672f21 --- /dev/null +++ b/docs/unstable/zip_8hpp_source.html @@ -0,0 +1,369 @@ + + + + + + + +TRIQS/itertools: itertools/zip.hpp Source File + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    TRIQS/itertools 1.2.0 +
    +
    C++ range library
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    zip.hpp
    +
    +
    +Go to the documentation of this file.
    1// Copyright (c) 2019-2022 Simons Foundation
    +
    2//
    +
    3// Licensed under the Apache License, Version 2.0 (the "License");
    +
    4// you may not use this file except in compliance with the License.
    +
    5// You may obtain a copy of the License at
    +
    6//
    +
    7// http://www.apache.org/licenses/LICENSE-2.0.txt
    +
    8//
    +
    9// Unless required by applicable law or agreed to in writing, software
    +
    10// distributed under the License is distributed on an "AS IS" BASIS,
    +
    11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +
    12// See the License for the specific language governing permissions and
    +
    13// limitations under the License.
    +
    14//
    +
    15// Authors: Olivier Parcollet, Nils Wentzell, chuffa
    +
    16
    +
    17/**
    +
    18 * @file
    +
    19 * @brief Provides a range adapting function for zipping a given number of ranges/views.
    +
    20 */
    +
    21
    +
    22#ifndef _ITERTOOLS_ZIP_HPP
    +
    23#define _ITERTOOLS_ZIP_HPP
    +
    24
    +
    25#include "./iterator_facade.hpp"
    +
    26#include "./sentinel.hpp"
    +
    27
    +
    28#include <cstddef>
    +
    29#include <iterator>
    +
    30#include <tuple>
    +
    31#include <utility>
    +
    32
    +
    33namespace itertools {
    +
    34
    +
    35 namespace detail {
    +
    36
    +
    37 /**
    +
    38 * @ingroup range_iterators
    +
    39 * @brief Iterator for a detail::zipped range.
    +
    40 *
    +
    41 * @details It stores iterators of the original ranges in a tuple. Incrementing simply increments each iterator
    +
    42 * individually. Dereferencing returns a tuple containing the results of dereferencing each iterator.
    +
    43 *
    +
    44 * See itertools::zip(Rs &&...rgs) for more details.
    +
    45 *
    +
    46 * @tparam Iters Iterator types.
    +
    47 */
    +
    48 template <typename... Iters>
    +
    49 struct zip_iter : iterator_facade<zip_iter<Iters...>, std::tuple<typename std::iterator_traits<Iters>::value_type...>> {
    +
    50 /// Tuple containing iterators of the original ranges.
    +
    51 std::tuple<Iters...> its;
    +
    52
    +
    53 /// Default constructor.
    +
    54 zip_iter() = default;
    +
    55
    +
    56 /**
    +
    57 * @brief Constructs a zipped iterator from given iterators.
    +
    58 * @param its Tuple containing iterators of the original ranges.
    +
    59 */
    +
    60 zip_iter(std::tuple<Iters...> its) : its(std::move(its)) {}
    +
    61
    +
    62 private:
    +
    63 // Helper function which increments all original iterators.
    +
    64 template <size_t... Is> [[gnu::always_inline]] void increment_all(std::index_sequence<Is...>) { ((void)(++std::get<Is>(its)), ...); }
    +
    65
    +
    66 public:
    +
    67 /// Increment the iterator by incrementing all original iterators stored in the tuple.
    +
    68 void increment() { increment_all(std::index_sequence_for<Iters...>{}); }
    +
    69
    +
    70 /**
    +
    71 * @brief Equal-to operator for two detail::zip_iter objects.
    +
    72 *
    +
    73 * @param other detail::zip_iter to compare with.
    +
    74 * @return True, if all original iterators are equal.
    +
    75 */
    +
    76 [[nodiscard]] bool operator==(zip_iter const &other) const { return its == other.its; }
    +
    77
    +
    78 /**
    +
    79 * @brief Equal-to operator for a detail::zip_iter and an itertools::sentinel_t.
    +
    80 *
    +
    81 * @details Only one of the iterators has to be equal to the corresponding iterator of the sentinel. In case
    +
    82 * the original ranges have different lengths, the detail::zipped range should have the length of the shortest range.
    +
    83 *
    +
    84 * @tparam SentinelIter Iterator type of the sentinel.
    +
    85 * @param s itertools::sentinel_t to compare with.
    +
    86 * @return True, if one of the original iterators is equal to the corresponding iterator of the sentinel.
    +
    87 */
    +
    88 template <typename SentinelIter> [[nodiscard]] bool operator==(sentinel_t<SentinelIter> const &s) const {
    +
    89 return [&]<size_t... Is>(std::index_sequence<Is...>) {
    +
    90 return ((std::get<Is>(its) == std::get<Is>(s.it)) || ...);
    +
    91 }(std::index_sequence_for<Iters...>{});
    +
    92 }
    +
    93
    +
    94 private:
    +
    95 // Helper function to dereference all original iterators.
    +
    96 template <size_t... Is> [[nodiscard]] auto tuple_map_impl(std::index_sequence<Is...>) const {
    +
    97 return std::tuple<decltype(*std::get<Is>(its))...>(*std::get<Is>(its)...);
    +
    98 }
    +
    99
    +
    100 public:
    +
    101 /**
    +
    102 * @brief Dereference the iterator.
    +
    103 * @return Tuple containing the dereferenced values of all original iterators.
    +
    104 */
    +
    105 [[nodiscard]] decltype(auto) dereference() const { return tuple_map_impl(std::index_sequence_for<Iters...>{}); }
    +
    106 };
    +
    107
    +
    108 /**
    +
    109 * @ingroup adapted_ranges
    +
    110 * @brief Represents a zipped range.
    +
    111 *
    +
    112 * @details See itertools::zip(Rs &&...rgs) for more details.
    +
    113 *
    +
    114 * @tparam Rs Range types.
    +
    115 */
    +
    116 template <typename... Rs> struct zipped {
    +
    117 /// Tuple containing the original ranges.
    +
    118 std::tuple<Rs...> tu;
    +
    119
    +
    120 /// Convenience typedef for an std::index_sequence.
    +
    121 using seq_t = std::index_sequence_for<Rs...>;
    +
    122
    +
    123 /// Iterator type of the zipped range.
    +
    124 using iterator = zip_iter<decltype(std::begin(std::declval<Rs &>()))...>;
    +
    125
    +
    126 /// Const iterator type of the zipped range.
    +
    127 using const_iterator = zip_iter<decltype(std::cbegin(std::declval<Rs &>()))...>;
    +
    128
    +
    129 /**
    +
    130 * @brief Construct a zipped range from the given ranges.
    +
    131 *
    +
    132 * @tparam Us Range types.
    +
    133 * @param rgs Ranges to zip.
    +
    134 */
    +
    135 template <typename... Us> zipped(Us &&...rgs) : tu{std::forward<Us>(rgs)...} {}
    +
    136
    +
    137 /// Default equal-to operator.
    +
    138 [[nodiscard]] bool operator==(zipped const &) const = default;
    +
    139
    +
    140 private:
    +
    141 // Helper function that applies a given callable to each range in the stored tuple and returns a new tuple with the results.
    +
    142 template <typename F, size_t... Is> [[gnu::always_inline]] auto tuple_map(F &&f, std::index_sequence<Is...>) {
    +
    143 return std::make_tuple(std::forward<F>(f)(std::get<Is>(tu))...);
    +
    144 }
    +
    145
    +
    146 // Const overload of tuple_map(F &&, std::index_sequence<Is...>).
    +
    147 template <typename F, size_t... Is> [[gnu::always_inline]] auto tuple_map(F &&f, std::index_sequence<Is...>) const {
    +
    148 return std::make_tuple(std::forward<F>(f)(std::get<Is>(tu))...);
    +
    149 }
    +
    150
    +
    151 public:
    +
    152 /**
    +
    153 * @brief Beginning of the zipped range.
    +
    154 * @return detail::zip_iter constructed from the begin iterators of the original ranges.
    +
    155 */
    +
    156 [[nodiscard]] iterator begin() noexcept {
    +
    157 return tuple_map([](auto &&rg) { return std::begin(rg); }, seq_t{});
    +
    158 }
    +
    159
    +
    160 /// Const version of begin().
    +
    161 [[nodiscard]] const_iterator cbegin() const noexcept {
    +
    162 return tuple_map([](auto &&rg) { return std::cbegin(rg); }, seq_t{});
    +
    163 }
    +
    164
    +
    165 /// Const overload of begin().
    +
    166 [[nodiscard]] const_iterator begin() const noexcept { return cbegin(); }
    +
    167
    +
    168 /**
    +
    169 * @brief End of the zipped range.
    +
    170 * @return itertools::sentinel_t containing a tuple of end iterators of the original ranges.
    +
    171 */
    +
    172 [[nodiscard]] auto end() noexcept {
    +
    173 return make_sentinel(tuple_map([](auto &&rg) { return std::end(rg); }, seq_t{}));
    +
    174 }
    +
    175
    +
    176 /// Const version of end().
    +
    177 [[nodiscard]] auto cend() const noexcept {
    +
    178 return make_sentinel(tuple_map([](auto &&rg) { return std::cend(rg); }, seq_t{}));
    +
    179 }
    +
    180
    +
    181 /// Const overload of end().
    +
    182 [[nodiscard]] auto end() const noexcept { return cend(); }
    +
    183 };
    +
    184
    +
    185 } // namespace detail
    +
    186
    +
    187 /**
    +
    188 * @ingroup range_adapting_functions
    +
    189 * @brief Lazy-zip ranges together (similar to Python's zip).
    +
    190 *
    +
    191 * @details An arbitrary number of ranges are zipped together into a tuple. The zipped range will have as many
    +
    192 * elements as the shortest given range. This function returns an iterable lazy object, which can be used in
    +
    193 * range-based for loops:
    +
    194 *
    +
    195 * @code{.cpp}
    +
    196 * std::vector<int> v1 { 1, 2, 3 };
    +
    197 * std::vector<char> v2 { 'a', 'b', 'c', 'd', 'e' };
    +
    198 *
    +
    199 * for (auto [i1, i2] : zip(v1, v1)) {
    +
    200 * std::cout << "(" << i1 << ", " << i2 << ") ";
    +
    201 * }
    +
    202 *
    +
    203 * for (auto [i1, i2, c3] : zip(v1, v1, v2)) {
    +
    204 * std::cout << "(" << i1 << ", " << i2 << ", " << c3 << ") ";
    +
    205 * }
    +
    206 * @endcode
    +
    207 *
    +
    208 * Output:
    +
    209 *
    +
    210 * ```
    +
    211 * (1, 1) (2, 2) (3, 3)
    +
    212 * (1, 1, a) (2, 2, b) (3, 3, c)
    +
    213 * ```
    +
    214 *
    +
    215 * See also <a href="https://en.cppreference.com/w/cpp/ranges/zip_view">std::ranges::views::zip</a>.
    +
    216 *
    +
    217 * @tparam Rs Range types.
    +
    218 * @param rgs Ranges to zip.
    +
    219 * @return A detail::zipped range.
    +
    220 */
    +
    221 template <typename... Rs> [[nodiscard]] detail::zipped<Rs...> zip(Rs &&...rgs) { return {std::forward<Rs>(rgs)...}; }
    +
    222
    +
    223} // namespace itertools
    +
    224
    +
    225#endif // _ITERTOOLS_ZIP_HPP
    +
    detail::zipped< Rs... > zip(Rs &&...rgs)
    Lazy-zip ranges together (similar to Python's zip).
    Definition zip.hpp:221
    +
    Iterator for a detail::zipped range.
    Definition zip.hpp:49
    +
    std::tuple< Iters... > its
    Tuple containing iterators of the original ranges.
    Definition zip.hpp:51
    +
    zip_iter()=default
    Default constructor.
    +
    zip_iter(std::tuple< Iters... > its)
    Constructs a zipped iterator from given iterators.
    Definition zip.hpp:60
    +
    bool operator==(sentinel_t< SentinelIter > const &s) const
    Equal-to operator for a detail::zip_iter and an itertools::sentinel_t.
    Definition zip.hpp:88
    +
    bool operator==(zip_iter const &other) const
    Equal-to operator for two detail::zip_iter objects.
    Definition zip.hpp:76
    +
    decltype(auto) dereference() const
    Dereference the iterator.
    Definition zip.hpp:105
    +
    void increment()
    Increment the iterator by incrementing all original iterators stored in the tuple.
    Definition zip.hpp:68
    +
    Represents a zipped range.
    Definition zip.hpp:116
    +
    auto end() const noexcept
    Const overload of end().
    Definition zip.hpp:182
    +
    const_iterator begin() const noexcept
    Const overload of begin().
    Definition zip.hpp:166
    +
    auto cend() const noexcept
    Const version of end().
    Definition zip.hpp:177
    +
    std::tuple< Rs... > tu
    Tuple containing the original ranges.
    Definition zip.hpp:118
    +
    iterator begin() noexcept
    Beginning of the zipped range.
    Definition zip.hpp:156
    +
    zipped(Us &&...rgs)
    Construct a zipped range from the given ranges.
    Definition zip.hpp:135
    +
    auto end() noexcept
    End of the zipped range.
    Definition zip.hpp:172
    +
    const_iterator cbegin() const noexcept
    Const version of begin().
    Definition zip.hpp:161
    +
    bool operator==(zipped const &) const =default
    Default equal-to operator.
    +
    Generic sentinel type that can be used to mark the end of a range.
    Definition sentinel.hpp:38
    +
    +
    + + + +