1 #ifndef ARRAY_MAPPING_H 2 #define ARRAY_MAPPING_H 24 inline bool IsOffset()
const {
return mapping.empty(); }
25 inline int Size()
const {
return (IsOffset() ? imax : (
int)mapping.size()); }
26 inline void SetOffset(
int offset,
int imax);
28 inline int Map(
int i)
const;
29 inline int InvMap(
int imap)
const;
31 inline void Map(
const A& x,A& mapx)
const;
33 inline void InvMap(
const A& mapx,A& x)
const;
35 std::vector<int> mapping;
41 ArrayMapping::ArrayMapping()
45 void ArrayMapping::SetOffset(
int _offset,
int _imax)
52 int ArrayMapping::Map(
int i)
const 54 return (IsOffset() ? i+offset : mapping[i]);
57 int ArrayMapping::InvMap(
int imap)
const 62 for(
size_t i=0;i<mapping.size();i++)
63 if(mapping[i] == imap)
return (
int)i;
70 void ArrayMapping::Map(
const A& x,A& mapx)
const 73 for(
int i=0;i<imax;i++)
74 mapx[i+offset] = x[i];
77 for(
int i=0;i<(int)mapping.size();i++)
78 mapx[mapping[i]] = x[i];
83 void ArrayMapping::InvMap(
const A& mapx,A& x)
const 86 for(
int i=0;i<imax;i++)
87 x[i] = mapx[i+offset];
90 for(
int i=0;i<(int)mapping.size();i++)
91 x[i] = mapx[mapping[i]];
An invertible mapping from indices in [0,imax), which operates in two modes: offset mode adds an offs...
Definition: ArrayMapping.h:20