QDP++
qdp_disk_map_slice.h
Go to the documentation of this file.
1// -*- C++ -*-
5
6
7#ifndef __qdp_disk_map_slice_h__
8#define __qdp_disk_map_slice_h__
9
10#include "qdp.h"
11#include "qdp_util.h"
12
13
14namespace QDP
15{
17
21 template <typename T>
23 {
24 T& data;
25 int current_time;
26 int start_lexico;
27 int stop_lexico;
28
29 public:
30
31 TimeSliceIO(T& lattice, int time_slice);
33
34 void setTimeSlice(int time_slice);
35 int getTimeSlice() const {return current_time;}
36 T& getObject() const {return data;}
37
38 void binaryRead(BinaryReader& bin);
39 void binaryWrite(BinaryWriter& bin) const;
40
41 };
42
43
44 template <typename T>
45 TimeSliceIO<T>::TimeSliceIO(T& lattice, int time_slice) : data(lattice)
46 {
47 setTimeSlice(time_slice);
48 }
49
50 template <typename T>
51 void TimeSliceIO<T>::setTimeSlice(int time_slice)
52 {
53 current_time = time_slice;
54 int tDir = Nd-1;
55
56 if ((current_time < 0) || (current_time >= Layout::lattSize()[tDir]))
57 {
58 throw(std::string("Invalid time in Lattice TimeSliceIO"));
59 }
60
61 multi1d<int> coord(Nd);
62 coord = 0;
63 coord[tDir] = current_time;
64 start_lexico = QDP::local_site(coord,Layout::lattSize());
65 if (current_time == Layout::lattSize()[tDir]-1)
66 stop_lexico = Layout::vol();
67 else
68 {
69 coord[tDir]++;
70 stop_lexico = QDP::local_site(coord,Layout::lattSize());
71 }
72 }
73
74 template <typename T>
76 {
77 LatticeTimeSliceIO::readSlice(bin,data,start_lexico,stop_lexico);
78 }
79
80 template <typename T>
82 {
83 LatticeTimeSliceIO::writeSlice(bin,data,start_lexico,stop_lexico);
84 }
85
86
87 // overloaded read/write functions (used by MapObjDisk)
88 template <typename T>
90 {
91 val.binaryRead(bin);
92 }
93
94 template <typename T>
95 void write(BinaryWriter& bin, const TimeSliceIO<T>& val)
96 {
97 val.binaryWrite(bin);
98 }
99
100}
101#endif
Binary input base class.
Definition qdp_io.h:372
Binary writer base class.
Definition qdp_io.h:1010
Time-slice wrapper.
void binaryWrite(BinaryWriter &bin) const
void setTimeSlice(int time_slice)
TimeSliceIO(T &lattice, int time_slice)
void binaryRead(BinaryReader &bin)
Container for a multi-dimensional 1D array.
Definition qdp_multi.h:25
void write(BinaryWriter &bin, const std::string &output)
Definition qdp_io.cc:1204
void read(BinaryReader &bin, std::string &input, size_t maxBytes)
Definition qdp_io.cc:778
const int Nd
Definition qdp_params.h:24
void readSlice(BinaryReader &bin, OLattice< T > &data, int start_lexico, int stop_lexico)
void writeSlice(BinaryWriter &bin, const OLattice< T > &data, int start_lexico, int stop_lexico)
const multi1d< int > & lattSize()
Virtual grid (problem grid) lattice size.
int vol()
Total lattice volume.
Yet another random number generator.
int local_site(const multi1d< int > &coord, const multi1d< int > &latt_size)
Calculates the lexicographic site index from the coordinate of a site.
Primary include file for QDP.