17 #ifndef IO_VAR_ASCII_H 18 #define IO_VAR_ASCII_H 25 template<
typename T,
int RANK>
57 static const int rank = RANK -
66 template<
typename T,
int RANK>
82 typename ASCIISliceMaker<T, RANK, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>::SliceType Slice(T0 s0,
98 void Print(std::ofstream& out)
override;
111 template<
typename T0,
122 bool VarRead(
typename SliceInfo<T, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>::T_slice& val,
136 template<
typename T0,
147 bool VarWrite(
const typename SliceInfo<T, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>::T_slice& val,
251 bool VarRead(std::string& val);
309 bool VarWrite(std::complex<double>& val);
320 template<
typename T,
int RANK>
326 template<
typename T,
int RANK>
332 template<
typename T,
int RANK>
339 template<
typename T,
int RANK>
342 return ArrayValue.extent(dim);
346 template<
typename T,
int RANK>
350 auto dims = ArrayValue.shape();
351 std::get<0>(
dims) =
n;
353 ArrayValue.resizeAndPreserve(
dims);
356 template<
typename T,
int RANK>
359 val.
resize(ArrayValue.shape());
364 template<
typename T,
int RANK>
365 template<
typename T0,
377 typename SliceInfo<T, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>::T_slice& val,
390 val.resize(ArrayValue(s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10).shape());
391 val = ArrayValue(s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10);
395 template<
typename T,
int RANK>
398 bool mustReshape =
false;
399 for (
int i = 0; i < RANK; i++)
400 if (ArrayValue.extent(i) != val.
extent(i))
403 ArrayValue.resize(val.
shape());
408 template<
typename T,
int RANK>
409 template<
typename T0,
421 const typename SliceInfo<T, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>::T_slice& val,
434 ArrayValue(s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10) = val;
439 template<
class T,
int RANK>
440 template<
typename T0,
451 typename ASCIISliceMaker<T, RANK, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>::SliceType IOVarASCII<T, RANK>:: 452 Slice(T0 s0, T1 s1, T2 s2, T3 s3, T4 s4, T5 s5, T6 s6, T7 s7, T8 s8, T9 s9, T10 s10)
454 using newSliceType =
typename ASCIISliceMaker<T, RANK, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>::SliceType;
455 newSliceType newVar(Name);
456 newVar.ArrayValue.reference(ArrayValue(s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10));
460 template<
class T,
int RANK>
466 out <<
TypeString(a) <<
" " << Name <<
" = " << std::endl;
470 out <<
"Array<" <<
TypeString(a) <<
"," << GetRank() <<
">(";
471 for (
int i = 0; i < RANK; i++)
473 out << ArrayValue.extent(i);
478 for (
int i = 0; i < ArrayValue.size(); i++)
480 out << *(ArrayValue.data() + i);
481 if (i < (ArrayValue.size() - 1))
484 out <<
" ];" << std::endl;
void Print(std::ofstream &out) override
IOVarASCII(std::string name, bool val)
bool VarRead(double &val)
int GetExtent(int dim) override
IOFileType GetFileType() override
IODataType GetType() override
IOVarASCII(std::string name, int val)
Array< T, RANK > ArrayValue
IOVarASCII(std::string name)
Default constructor.
The following are template tricks for converting a C++ type /// into an enumerated type variable...
IOVarASCII(std::string name, double val)
IOVarASCII(std::string name)
Default constructor.
void resize(const std::array< SIZET, D > &dims)
Resize the container.
std::ptrdiff_t extent(int d) const
IOVarASCII< T, RANK > & operator=(const IOVarASCII< T, RANK > &var)
Assignment operator.
The following is a template trick for counting how many /// dimension reductions we have made to a da...
void Resize(int n) override
Resizes the first dimension of the variable.
bool VarWrite(const Array< T, RANK > &val)
ASCIISliceMaker< T, RANK, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 >::SliceType Slice(T0 s0, T1 s1, T2 s2, T3 s3, T4 s4, T5 s5, T6 s6, T7 s7, T8 s8, T9 s9, T10 s10)
bool VarRead(Array< TT, 1 > &val)
IOVarASCII(std::string name)
Default constructor.
IOVarASCII(std::string name, const Array< T, RANK > &val)
std::complex< double > Value
IOVarASCII(std::string name, std::complex< double > val)
A D-dimensional Array class based on PETE.
std::string TypeString(T &val)
bool VarRead(std::complex< double > &val)
const std::array< size_t, D > & shape() const
IOVarASCII(std::string name)
Default constructor.
IOVarASCII(std::string name)
Default constructor.
IOVarASCII(std::string name, std::string val)
IOVarASCII(const IOVarASCII< T, RANK > &var)
Copy constructor.
bool VarRead(Array< T, RANK > &val)
IOVarASCII(std::string name)
Default constructor.