Cadabra
Computer algebra system for field theory problems
Loading...
Searching...
No Matches
IndexIterator.hh
Go to the documentation of this file.
1
2#pragma once
3
4#include "Storage.hh"
5#include "Props.hh"
6
7namespace cadabra {
8
19
20 class index_iterator : public Ex::iterator_base {
21 public:
24
25 static index_iterator create(const Properties&, const iterator_base&);
26
27 static index_iterator begin(const Properties&, const iterator_base&, int offset=0);
28 static index_iterator end(const Properties&, const iterator_base&);
29
31 bool operator==(const index_iterator&) const;
32 bool operator!=(const index_iterator&) const;
35 index_iterator& operator+=(unsigned int);
36
37 Ex::iterator halt, walk, roof;
38 private:
40
41 bool is_index(Ex::iterator) const;
42 };
43
45 {
46 struct iterator {
52 using const_pointer = const value_type*;
53 using iterator_category = std::input_iterator_tag;
54
56
57 bool operator == (const iterator& other) { return it == other.it; }
58 bool operator != (const iterator& other) { return !(*this == other); }
59 reference operator* () { return it; }
60 pointer operator-> () { return ⁢ }
61 reference operator ++ () { return ++it; }
62 value_type operator ++ (int) { return it++; }
63
64
66 };
67
68 iter_indices(const Properties& properties, Ex::iterator it)
69 : it(it)
71
73 iterator begin(int offset) { return index_iterator::begin(properties, it, offset); }
75 size_t size() { return std::distance(begin(), end()); }
76
77 private:
78 Ex::iterator it;
80 };
81 //size_t number_of_indices(const Properties&, Ex::iterator);
82 }
Class holding a collection of properties attached to expressions.
Definition Props.hh:242
An iterator which iterates over indices even if they are at lower levels, i.e.
Definition IndexIterator.hh:20
bool is_index(Ex::iterator) const
bool operator!=(const index_iterator &) const
Definition IndexIterator.cc:31
index_iterator operator++(int)
bool operator==(const index_iterator &) const
Definition IndexIterator.cc:37
index_iterator & operator+=(unsigned int)
Definition IndexIterator.cc:74
Ex::iterator walk
Definition IndexIterator.hh:37
static index_iterator end(const Properties &, const iterator_base &)
Definition IndexIterator.cc:130
static index_iterator create(const Properties &, const iterator_base &)
Definition IndexIterator.cc:12
static index_iterator begin(const Properties &, const iterator_base &, int offset=0)
Definition IndexIterator.cc:122
Ex::iterator halt
Definition IndexIterator.hh:37
const Properties * properties
Definition IndexIterator.hh:39
Ex::iterator roof
Definition IndexIterator.hh:37
index_iterator & operator++()
Definition IndexIterator.cc:84
index_iterator & operator=(const index_iterator &)
Definition IndexIterator.cc:138
Functions to handle the exchange properties of two or more symbols in a product.
Definition Adjform.cc:83
void set(rset_t::iterator &num, multiplier_t fac)
Definition Storage.cc:1179
Definition IndexIterator.hh:46
reference operator*()
Definition IndexIterator.hh:59
pointer operator->()
Definition IndexIterator.hh:60
ptrdiff_t difference_type
Definition IndexIterator.hh:48
std::input_iterator_tag iterator_category
Definition IndexIterator.hh:53
iterator(index_iterator it)
Definition IndexIterator.hh:55
bool operator==(const iterator &other)
Definition IndexIterator.hh:57
reference operator++()
Definition IndexIterator.hh:61
index_iterator it
Definition IndexIterator.hh:65
bool operator!=(const iterator &other)
Definition IndexIterator.hh:58
Definition IndexIterator.hh:45
iterator end()
Definition IndexIterator.hh:74
Ex::iterator it
Definition IndexIterator.hh:78
iterator begin()
Definition IndexIterator.hh:72
iter_indices(const Properties &properties, Ex::iterator it)
Definition IndexIterator.hh:68
size_t size()
Definition IndexIterator.hh:75
iterator begin(int offset)
Definition IndexIterator.hh:73
const Properties & properties
Definition IndexIterator.hh:79