OSHUN  beta
Arbitrary Order Spherical-Harmonic 1D-3P Vlasov-Fokker-Planck-Maxwell code
GSlice_iter< T > Class Template Reference

#include <lib-array.h>

Inheritance diagram for GSlice_iter< T >:
Collaboration diagram for GSlice_iter< T >:

Public Member Functions

 GSlice_iter (valarray< T > *vv, gslice gss)
 
GSlice_iter end () const
 
GSlice_iteroperator++ ()
 
GSlice_iter operator++ (int)
 
T & operator[] (size_t i)
 
T & operator() (size_t i)
 
T & operator* ()
 

Private Member Functions

T & ref (size_t i) const
 

Private Attributes

valarray< T > * v
 
gslice gs
 
size_t curr
 
valarray< size_t > gsizes
 

Friends

bool operator== (const GSlice_iter &p, const GSlice_iter &q)
 
bool operator!= (const GSlice_iter &p, const GSlice_iter &q)
 
bool operator< (const GSlice_iter &p, const GSlice_iter &q)
 

Detailed Description

template<class T>
class GSlice_iter< T >

Definition at line 65 of file lib-array.h.

Constructor & Destructor Documentation

◆ GSlice_iter()

template<class T >
GSlice_iter< T >::GSlice_iter ( valarray< T > *  vv,
gslice  gss 
)

Definition at line 125 of file lib-array.h.

References GSlice_iter< T >::gsizes.

125  :
126  v(vv), gs(gss), curr(0), gsizes(gs.size()){
127  for (size_t ic(1); ic < gsizes.size(); ++ic) {
128  gsizes[gss.size().size()-ic-1] *= gsizes[gss.size().size()-ic];
129  }
130 }
size_t curr
Definition: lib-array.h:80
valarray< size_t > gsizes
Definition: lib-array.h:81
valarray< T > * v
Definition: lib-array.h:78
gslice gs
Definition: lib-array.h:79

Member Function Documentation

◆ end()

template<class T>
GSlice_iter GSlice_iter< T >::end ( ) const
inline

Definition at line 89 of file lib-array.h.

References GSlice_iter< T >::curr.

89  {
90  GSlice_iter t = *this;
91  t.curr = gsizes[0];
92  return t;
93  }
size_t curr
Definition: lib-array.h:80
valarray< size_t > gsizes
Definition: lib-array.h:81

◆ operator()()

template<class T>
T& GSlice_iter< T >::operator() ( size_t  i)
inline

Definition at line 99 of file lib-array.h.

99 {return ref(i);} // Fortran style subscript
T & ref(size_t i) const
Definition: lib-array.h:111

◆ operator*()

template<class T>
T& GSlice_iter< T >::operator* ( )
inline

Definition at line 100 of file lib-array.h.

100 {return ref(curr);} // Current element
size_t curr
Definition: lib-array.h:80
T & ref(size_t i) const
Definition: lib-array.h:111

◆ operator++() [1/2]

template<class T>
GSlice_iter& GSlice_iter< T >::operator++ ( )
inline

Definition at line 95 of file lib-array.h.

95 {++curr; return *this;} //prefix
size_t curr
Definition: lib-array.h:80

◆ operator++() [2/2]

template<class T>
GSlice_iter GSlice_iter< T >::operator++ ( int  )
inline

Definition at line 96 of file lib-array.h.

96 {GSlice_iter t = *this; ++curr; return t;} //postfix
size_t curr
Definition: lib-array.h:80

◆ operator[]()

template<class T>
T& GSlice_iter< T >::operator[] ( size_t  i)
inline

Definition at line 98 of file lib-array.h.

98 {return ref(i);} // C style subscript
T & ref(size_t i) const
Definition: lib-array.h:111

◆ ref()

template<class T >
T & GSlice_iter< T >::ref ( size_t  i) const
private

Definition at line 111 of file lib-array.h.

Referenced by CGSlice_iter< T >::operator()(), CGSlice_iter< T >::operator*(), and CGSlice_iter< T >::operator[]().

111  {
112  size_t loc(0);
113  for (size_t ic = 0; ic < gsizes.size()-1; ++ic){
114  loc += (i/gsizes[ic+1]) * gs.stride()[ic];
115  i %= gsizes[ic+1];
116  }
117  loc += i * gs.stride()[gsizes.size()-1];
118  return (*v)[gs.start()+loc];
119 }
valarray< size_t > gsizes
Definition: lib-array.h:81
valarray< T > * v
Definition: lib-array.h:78
gslice gs
Definition: lib-array.h:79
Here is the caller graph for this function:

Friends And Related Function Documentation

◆ operator!=

template<class T>
bool operator!= ( const GSlice_iter< T > &  p,
const GSlice_iter< T > &  q 
)
friend

Definition at line 146 of file lib-array.h.

146  {
147  return !(p==q);
148 }

◆ operator<

template<class T>
bool operator< ( const GSlice_iter< T > &  p,
const GSlice_iter< T > &  q 
)
friend

Definition at line 151 of file lib-array.h.

151  {
152  size_t count(0);
153  if (p.curr<q.curr && p.gs.start() == q.gs.start())
154  while ( (p.gs.stride()[count] == p.gs.stride()[count])
155  && (p.gs.size()[count] == p.gs.size()[count] ))
156  if (count++ == q.gs.size().size()-1) return true;
157  return false;
158 }
size_t curr
Definition: lib-array.h:80
gslice gs
Definition: lib-array.h:79

◆ operator==

template<class T>
bool operator== ( const GSlice_iter< T > &  p,
const GSlice_iter< T > &  q 
)
friend

Definition at line 136 of file lib-array.h.

136  {
137  size_t count(0);
138  if (p.curr==q.curr && p.gs.start() == q.gs.start())
139  while ( (p.gs.stride()[count] == p.gs.stride()[count])
140  && (p.gs.size()[count] == p.gs.size()[count] ))
141  if (count++ == q.gs.size().size()-1) return true;
142  return false;
143 }
size_t curr
Definition: lib-array.h:80
gslice gs
Definition: lib-array.h:79

Field Documentation

◆ curr

template<class T>
size_t GSlice_iter< T >::curr
private

Definition at line 80 of file lib-array.h.

Referenced by GSlice_iter< T >::end(), CGSlice_iter< T >::operator++(), and operator==().

◆ gs

template<class T>
gslice GSlice_iter< T >::gs
private

Definition at line 79 of file lib-array.h.

Referenced by operator==(), and CGSlice_iter< T >::ref().

◆ gsizes

template<class T>
valarray<size_t> GSlice_iter< T >::gsizes
private

Definition at line 81 of file lib-array.h.

Referenced by GSlice_iter< T >::GSlice_iter(), and CGSlice_iter< T >::ref().

◆ v

template<class T>
valarray<T>* GSlice_iter< T >::v
private

Definition at line 78 of file lib-array.h.

Referenced by CGSlice_iter< T >::ref().


The documentation for this class was generated from the following file: