1#ifndef ADOLC_INFO_TYPE_H
2#define ADOLC_INFO_TYPE_H
30template <
class Info,
class BufferContext>
32 std::declval<BufferContext &>()))>;
42template <
class T,
class BufferContext,
class ErrorType>
44 requires(BufferContext &context,
const BufferContext &constContext,
46 typename T::value_type;
48 typename T::value_type>;
50 { T::fileIndex } -> std::convertible_to<size_t>;
51 { T::num } -> std::same_as<const typename BufferContext::StatEntries &>;
52 { T::error } -> std::convertible_to<ErrorType>;
53 { T::chunkSize } -> std::convertible_to<size_t>;
54 { T::removeExistingBeforeWrite } -> std::convertible_to<bool>;
55 { T::openWriteMode } -> std::convertible_to<const char *>;
59 } -> std::same_as<InfoBufferType<T, BufferContext> &>;
61 T::getBuffer(constContext)
62 } -> std::same_as<const InfoBufferType<T, BufferContext> &>;
64 T::ensureReverseReadable(context, blockSize);
66 T::reverseSeekOffset(constContext, blockSize)
67 } -> std::convertible_to<long>;
68 T::updateBufferStatsForward(context, blockSize);
69 T::updateBufferStatsReverse(context, blockSize);
70 T::updateBufferPositionForward(context);
71 T::updateBufferPositionReverse(context, blockSize);
72 T::prepareForwardPosition(context, blockSize);
82template <
class Derived,
class BufferContext,
typename ValueType>
95 const auto &buffer = Derived::getBuffer(context);
97 (buffer.numOnTape() - blockSize));
102 auto &buffer = Derived::getBuffer(context);
103 buffer.numOnTape(buffer.numOnTape() - blockSize);
108 auto &buffer = Derived::getBuffer(context);
109 buffer.numOnTape(buffer.numOnTape() - blockSize);
113 Derived::getBuffer(context).position(0);
118 Derived::getBuffer(context).position(blockSize);
123 Derived::getBuffer(context).position(0);
130template <
class BufferContext,
class EType>
132 :
InfoAdapter<OpInfo<BufferContext, EType>, BufferContext, unsigned char> {
143 static constexpr EType
error = EType::OP_READ_FAILED;
147 return context.opBuffer_;
150 return context.opBuffer_;
157template <
class BufferContext,
class EType>
159 :
InfoAdapter<LocInfo<BufferContext, EType>, BufferContext, size_t> {
170 static constexpr EType
error = EType::LOC_READ_FAILED;
174 return context.locBuffer_;
177 return context.locBuffer_;
183 const auto loc = blockSize - buffer[blockSize - 1];
184 buffer.position(loc);
189 while (numLocsForStats >= blockSize) {
190 context.template loadBlockIntoBufferForward<Self>(blockSize);
191 numLocsForStats -= blockSize;
200template <
class BufferContext,
class EType>
202 :
InfoAdapter<ValInfo<BufferContext, EType>, BufferContext, double> {
213 static constexpr EType
error = EType::VAL_READ_FAILED;
217 return context.valBuffer_;
220 return context.valBuffer_;
225 context.locBuffer_.advance();
231 context.locBuffer_.retreatAndRead());
238template <
class BufferContext,
class EType>
240 :
InfoAdapter<TayInfo<BufferContext, EType>, BufferContext, double> {
252 static constexpr EType
error = EType::TAY_READ_FAILED;
256 return context.tayBuffer_;
259 return context.tayBuffer_;
263 if (
getBuffer(context).position() == 0) {
264 context.template loadBlockIntoBufferReverse<Self>(blockSize);
271 (context.nextBufferNumber * blockSize));
276 context.lastTayBlockInCore = 0;
277 --context.nextBufferNumber;
282template <
typename BufferContext,
typename ErrorType,
283 InfoType<BufferContext, ErrorType> Info>
284static size_t write(BufferContext &context,
size_t chunk,
size_t size) {
285 auto &buffer = Info::getBuffer(context);
286 return fwrite(buffer.begin() + (chunk * Info::chunkSize),
287 size *
sizeof(
typename Info::value_type), 1, buffer.file());
size_t position() const
Returns the current buffer index.
Definition bufferstate.h:260
Concept describing the primitive buffer/file interface used by tape I/O code.
Definition bufferstate.h:27
Concept describing the required interface of a tape Info adapter.
Definition infotype.h:43
#define statSpace
Definition dvlparms.h:44
Definition bufferstate.h:12
std::remove_cvref_t< decltype(Info::getBuffer(std::declval< BufferContext & >()))> InfoBufferType
Definition infotype.h:32
Common compile-time interface for operation, location, value, and Taylor tape buffers.
Definition infotype.h:83
static void ensureReverseReadable(BufferContext &, size_t)
Definition infotype.h:90
static constexpr bool removeExistingBeforeWrite
Definition infotype.h:87
static constexpr const char * openWriteMode
Definition infotype.h:88
static long reverseSeekOffset(const BufferContext &context, size_t blockSize)
Definition infotype.h:93
static void prepareForwardPosition(BufferContext &context, size_t)
Definition infotype.h:121
static void updateBufferPositionForward(BufferContext &context)
Definition infotype.h:112
static void updateBufferStatsForward(BufferContext &context, size_t blockSize)
Definition infotype.h:100
static void updateBufferStatsReverse(BufferContext &context, size_t blockSize)
Definition infotype.h:106
ValueType value_type
Definition infotype.h:84
static void updateBufferPositionReverse(BufferContext &context, size_t blockSize)
Definition infotype.h:116
typename BufferContext::StatEntries StatEntries
Definition infotype.h:85
Adapter for the locations tape (loc tape).
Definition infotype.h:159
static constexpr size_t chunkSize
Definition infotype.h:171
static void prepareForwardPosition(BufferContext &context, size_t blockSize)
Definition infotype.h:187
static constexpr EType error
Definition infotype.h:170
static void updateBufferPositionReverse(BufferContext &context, size_t blockSize)
Definition infotype.h:180
typename Base::StatEntries StatEntries
Definition infotype.h:163
static constexpr size_t fileIndex
Definition infotype.h:168
typename Base::value_type value_type
Definition infotype.h:162
static constexpr StatEntries bufferSize
Definition infotype.h:167
static LocBuffer & getBuffer(BufferContext &context)
Definition infotype.h:173
static constexpr StatEntries num
Definition infotype.h:165
static constexpr StatEntries fileAccess
Definition infotype.h:166
static const LocBuffer & getBuffer(const BufferContext &context)
Definition infotype.h:176
Adapter for the operations tape (op tape).
Definition infotype.h:132
typename Base::value_type value_type
Definition infotype.h:135
static constexpr StatEntries bufferSize
Definition infotype.h:140
static constexpr size_t chunkSize
Definition infotype.h:144
static constexpr StatEntries fileAccess
Definition infotype.h:139
static constexpr StatEntries num
Definition infotype.h:138
static constexpr size_t fileIndex
Definition infotype.h:141
static constexpr EType error
Definition infotype.h:143
static const OpBuffer & getBuffer(const BufferContext &context)
Definition infotype.h:149
typename Base::StatEntries StatEntries
Definition infotype.h:136
static OpBuffer & getBuffer(BufferContext &context)
Definition infotype.h:146
Adapter for the Taylor tape (tay tape).
Definition infotype.h:240
static constexpr size_t chunkSize
Definition infotype.h:253
typename Base::value_type value_type
Definition infotype.h:243
typename Base::StatEntries StatEntries
Definition infotype.h:244
static TayBuffer & getBuffer(BufferContext &context)
Definition infotype.h:255
static constexpr const char * openWriteMode
Definition infotype.h:250
static void updateBufferStatsReverse(BufferContext &context, size_t)
Definition infotype.h:274
static constexpr size_t fileIndex
Definition infotype.h:248
static constexpr StatEntries bufferSize
Definition infotype.h:247
static constexpr bool removeExistingBeforeWrite
Definition infotype.h:249
static long reverseSeekOffset(const BufferContext &context, size_t blockSize)
Definition infotype.h:268
static const TayBuffer & getBuffer(const BufferContext &context)
Definition infotype.h:258
static constexpr EType error
Definition infotype.h:252
static void ensureReverseReadable(BufferContext &context, size_t blockSize)
Definition infotype.h:262
static constexpr StatEntries num
Definition infotype.h:246
Adapter for the values tape (val tape).
Definition infotype.h:202
static const ValBuffer & getBuffer(const BufferContext &context)
Definition infotype.h:219
static constexpr StatEntries fileAccess
Definition infotype.h:209
typename Base::value_type value_type
Definition infotype.h:205
static constexpr size_t chunkSize
Definition infotype.h:214
static constexpr size_t fileIndex
Definition infotype.h:211
static constexpr EType error
Definition infotype.h:213
static constexpr StatEntries num
Definition infotype.h:208
static void updateBufferPositionForward(BufferContext &context)
Definition infotype.h:223
static ValBuffer & getBuffer(BufferContext &context)
Definition infotype.h:216
static constexpr StatEntries bufferSize
Definition infotype.h:210
typename Base::StatEntries StatEntries
Definition infotype.h:206
static void updateBufferPositionReverse(BufferContext &context, size_t blockSize)
Definition infotype.h:228
#define ADOLC_IO_CHUNK_SIZE
Definition usrparms.h:68