1#ifndef ADOLC_TAPE_RECORDING_CONTEXT_H
2#define ADOLC_TAPE_RECORDING_CONTEXT_H
50 moveData(std::move(other));
55 moveData(std::move(other));
116 signature = std::exchange(other.signature,
nullptr);
118 paramstore = std::exchange(other.paramstore,
nullptr);
129 template <InfoType<TapeRecordingContext, ErrorType> Info>
133 auto &buffer = Info::getBuffer(*
this);
134 if (buffer.file() ==
nullptr) {
135 if (Info::removeExistingBeforeWrite) {
136 buffer.openFile(fileName,
"rb");
137 if (buffer.file() !=
nullptr) {
139 if (remove(fileName)) {
144 buffer.openFile(fileName, Info::openWriteMode);
151 template <InfoType<TapeRecordingContext, ErrorType> Info>
152 void put_block(
const char *fileName,
size_t lengthBlock) {
153 using ADOLC::detail::write;
157 openFile<Info>(fileName);
158 const size_t numChunks = lengthBlock / Info::chunkSize;
160 for (
size_t chunk = 0; chunk < numChunks; chunk++) {
161 auto returnCode = write<TapeRecordingContext, ErrorType, Info>(
162 *
this, chunk, Info::chunkSize);
167 const size_t remain = lengthBlock % Info::chunkSize;
169 auto returnCode = write<TapeRecordingContext, ErrorType, Info>(
170 *
this, numChunks, remain);
175 auto &buffer = Info::getBuffer(*
this);
176 buffer.numOnTape(buffer.numOnTape() + lengthBlock);
184 for (
size_t i = 0; i < numVals; ++i) {
189 const char *val_fileName,
size_t reserveExtraLocations = 0);
191 const char *op_fileName,
const char *val_fileName);
206 const char *tay_fileName);
#define CURRENT_LOCATION
Definition adolcerror.h:26
size_t position() const
Returns the current buffer index.
Definition bufferstate.h:260
void writeAndAdvance(T val)
Stores val at position(), then advances to the next element.
Definition bufferstate.h:299
size_t capacity() const
Returns the capacity of the owned or viewed buffer.
Definition bufferstate.h:272
void ADOLC_API fail(ErrorType error, const source_location LocInfo, const FailInfo &failinfo=FailInfo())
Definition bufferstate.h:12
OPCODES
Definition oplate.h:23
@ mult_a_a
Definition oplate.h:39
Mutable buffers and bookkeeping used while recording a tape.
Definition taperecordingcontext.h:20
~TapeRecordingContext()
Definition taperecordingcontext.h:37
int upd_resloc(size_t temp, size_t lhs)
Definition taperecordingcontext.h:212
TapeRecordingContext & operator=(TapeRecordingContext &&other) noexcept
Definition taperecordingcontext.h:53
size_t nextBufferNumber
Definition taperecordingcontext.h:88
void put_vals_notWriteBlock(double *vals, size_t numVals)
Definition taperecordingcontext.h:183
static constexpr StatEntries VAL_BUFFER_SIZE
Definition taperecordingcontext.h:30
static constexpr StatEntries TAY_BUFFER_SIZE
Definition taperecordingcontext.h:34
bool nestedReverseEval
Definition taperecordingcontext.h:85
int deg_save
Definition taperecordingcontext.h:71
static constexpr StatEntries LOC_BUFFER_SIZE
Definition taperecordingcontext.h:26
size_t num_eq_prod
Definition taperecordingcontext.h:68
void put_loc(size_t loc)
Definition taperecordingcontext.h:123
ADOLC::detail::TayBuffer tayBuffer_
Definition taperecordingcontext.h:61
ADOLC::detail::OpBuffer opBuffer_
Definition taperecordingcontext.h:58
double * signature
Definition taperecordingcontext.h:93
int upd_resloc_check(const size_t temp)
Definition taperecordingcontext.h:225
void put_vals_writeBlock(double *vals, size_t numVals, const char *op_fileName, const char *val_fileName)
int keepTaylors
Definition taperecordingcontext.h:66
TapeRecordingContext(const TapeRecordingContext &)=delete
ADOLC::detail::LocBuffer locBuffer_
Definition taperecordingcontext.h:60
double * paramstore
Definition taperecordingcontext.h:94
static constexpr StatEntries OP_BUFFER_SIZE
Definition taperecordingcontext.h:22
static constexpr StatEntries LOC_FILE_ACCESS
Definition taperecordingcontext.h:28
void put_block(const char *fileName, size_t lengthBlock)
Flush the current in-memory tape buffer to disk.
Definition taperecordingcontext.h:152
static constexpr StatEntries NUM_LOCATIONS
Definition taperecordingcontext.h:27
void write_scaylors(const double *taylorCoefficientPos, std::ptrdiff_t size, const char *tay_fileName)
size_t numSwitches
Definition taperecordingcontext.h:77
size_t tay_numDeps
Definition taperecordingcontext.h:75
void write_scaylor(double val, const char *tay_fileName)
Definition taperecordingcontext.h:196
ADOLC::detail::ValBuffer valBuffer_
Definition taperecordingcontext.h:59
void put_op(OPCODES op, const char *loc_fileName, const char *op_fileName, const char *val_fileName, size_t reserveExtraLocations=0)
size_t numInds
Definition taperecordingcontext.h:63
static constexpr StatEntries NUM_OPERATIONS
Definition taperecordingcontext.h:23
size_t tay_numInds
Definition taperecordingcontext.h:73
TapeRecordingContext & operator=(const TapeRecordingContext &)=delete
static constexpr StatEntries VAL_FILE_ACCESS
Definition taperecordingcontext.h:32
TapeRecordingContext(TapeRecordingContext &&other) noexcept
Definition taperecordingcontext.h:49
size_t numDeps
Definition taperecordingcontext.h:64
static constexpr StatEntries NUM_VALUES
Definition taperecordingcontext.h:31
static constexpr StatEntries OP_FILE_ACCESS
Definition taperecordingcontext.h:24
char lastTayBlockInCore
Definition taperecordingcontext.h:92
int upd_resloc_inc_prod(size_t temp, size_t newlhs, unsigned char newop)
Definition taperecordingcontext.h:242
size_t get_val_space(const char *op_fileName, const char *val_fileName)
static constexpr StatEntries NUM_TAYS
Definition taperecordingcontext.h:35
void openFile(const char *fileName)
Ensure that the tape file associated with Info exists and is ready for writing.
Definition taperecordingcontext.h:130
TapeRecordingContext()=default
Adapter for the Taylor tape (tay tape).
Definition infotype.h:240
StatEntries
Definition tapeinfos.h:27
@ OP_FILE_ACCESS
Definition tapeinfos.h:34
@ NUM_TAYS
Definition tapeinfos.h:31
@ LOC_FILE_ACCESS
Definition tapeinfos.h:36
@ NUM_OPERATIONS
Definition tapeinfos.h:33
@ TAY_BUFFER_SIZE
Definition tapeinfos.h:41
@ VAL_BUFFER_SIZE
Definition tapeinfos.h:40
@ NUM_LOCATIONS
Definition tapeinfos.h:35
@ NUM_VALUES
Definition tapeinfos.h:37
@ LOC_BUFFER_SIZE
Definition tapeinfos.h:39
@ VAL_FILE_ACCESS
Definition tapeinfos.h:38
@ OP_BUFFER_SIZE
Definition tapeinfos.h:32