SDDS ToolKit Programs and Libraries for C and Python
Loading...
Searching...
No Matches
sdds::Reader::Impl Struct Reference

Public Member Functions

 Impl (std::filesystem::path sourcePath, ReaderOptions readerOptions, std::unique_ptr< Stream > input, std::optional< Layout > suppliedLayout=std::nullopt, bool isPathBacked=false)
 
void rememberOffset (std::size_t index, std::uint64_t offset)
 
std::optional< DecodedPage > next (const ReadRequest &readRequest)
 

Public Attributes

std::filesystem::path path
 
ReaderOptions options
 
BufferedStream stream
 
std::shared_ptr< Layout > layout
 
std::optional< std::uint64_t > dataStart
 
std::vector< std::uint64_t > pageOffsets
 
std::optional< std::int64_t > indexedPages
 
std::int64_t pageNumber = 0
 
std::optional< std::uint64_t > disconnectedOffset
 
std::unique_ptr< PathLock > lock
 
FileIdentity identity
 
std::int64_t lastRawRows = 0
 
std::int64_t tailPageNumber = 0
 
std::int64_t tailRows = 0
 
bool tailInitialized = false
 
bool headerless = false
 
bool pathBacked = false
 
bool indexComplete = false
 
bool disconnected = false
 
bool closed = false
 

Detailed Description

Definition at line 3085 of file SDDSModern.cc.

Constructor & Destructor Documentation

◆ Impl()

sdds::Reader::Impl::Impl ( std::filesystem::path sourcePath,
ReaderOptions readerOptions,
std::unique_ptr< Stream > input,
std::optional< Layout > suppliedLayout = std::nullopt,
bool isPathBacked = false )
inline

Definition at line 3086 of file SDDSModern.cc.

3089 : path(std::move(sourcePath)), options(std::move(readerOptions)),
3090 stream(std::move(input), options.limits.maxDecompressedBytes, path),
3091 pathBacked(isPathBacked) {
3092 if (pathBacked) identity = fileIdentity(path);
3093 if (suppliedLayout) {
3094 validateLayout(*suppliedLayout);
3095 layout = std::make_shared<Layout>(std::move(*suppliedLayout));
3096 } else {
3097 Layout parsed;
3098 std::unordered_set<std::string> includeStack;
3099 std::optional<ByteOrder> commentOrder;
3100 bool fixedRowComment = false;
3101 parseLayoutStream(stream, parsed, options, path, 0, includeStack, commentOrder,
3102 fixedRowComment, true);
3103 const std::int32_t declaredVersion = parsed.version;
3104 validateLayout(parsed);
3105 if (declaredVersion < parsed.version)
3106 throwFormat("SDDS version is too old for its layout", path);
3107 parsed.version = declaredVersion;
3108 layout = std::make_shared<Layout>(std::move(parsed));
3109 }
3110 if (stream.seekable()) {
3111 dataStart = stream.tell();
3112 rememberOffset(0, *dataStart);
3113 }
3114 }

Member Function Documentation

◆ next()

std::optional< DecodedPage > sdds::Reader::Impl::next ( const ReadRequest & readRequest)
inline

Definition at line 3123 of file SDDSModern.cc.

3123 {
3124 if (closed)
3125 throwState("reader is closed");
3126 if (disconnected)
3127 throwState("reader is disconnected");
3128 const ResolvedReadRequest request = resolveRequest(*layout, readRequest, options);
3129 if (stream.seekable()) rememberOffset(static_cast<std::size_t>(pageNumber), stream.tell());
3130 std::optional<DecodedPage> result;
3131 if (layout->data.mode == DataMode::Ascii) {
3132 bool marker = false;
3133 auto first = findAsciiPage(stream, options, path, marker);
3134 if (first || marker)
3135 result = readAsciiPage(stream, layout, options, path, pageNumber + 1,
3136 std::move(first), request);
3137 } else {
3138 const auto first = stream.get();
3139 if (first) {
3140 stream.unget(*first);
3141 result = readBinaryPage(stream, layout, options, path, pageNumber + 1, request);
3142 }
3143 }
3144 if (!result) {
3145 indexComplete = true;
3146 indexedPages = pageNumber;
3147 if (!tailInitialized) {
3148 tailPageNumber = pageNumber;
3149 tailRows = lastRawRows;
3150 tailInitialized = true;
3151 }
3152 return std::nullopt;
3153 }
3154 if (stream.seekable()) rememberOffset(static_cast<std::size_t>(pageNumber + 1), stream.tell());
3155 return result;
3156 }

◆ rememberOffset()

void sdds::Reader::Impl::rememberOffset ( std::size_t index,
std::uint64_t offset )
inline

Definition at line 3116 of file SDDSModern.cc.

3116 {
3117 if (index >= options.limits.maxPageIndexEntries)
3118 throwLimit("page index exceeds configured entry limit", path);
3119 if (pageOffsets.size() <= index) pageOffsets.resize(index + 1);
3120 pageOffsets[index] = offset;
3121 }

Member Data Documentation

◆ closed

bool sdds::Reader::Impl::closed = false

Definition at line 3177 of file SDDSModern.cc.

◆ dataStart

std::optional<std::uint64_t> sdds::Reader::Impl::dataStart

Definition at line 3162 of file SDDSModern.cc.

◆ disconnected

bool sdds::Reader::Impl::disconnected = false

Definition at line 3176 of file SDDSModern.cc.

◆ disconnectedOffset

std::optional<std::uint64_t> sdds::Reader::Impl::disconnectedOffset

Definition at line 3166 of file SDDSModern.cc.

◆ headerless

bool sdds::Reader::Impl::headerless = false

Definition at line 3173 of file SDDSModern.cc.

◆ identity

FileIdentity sdds::Reader::Impl::identity

Definition at line 3168 of file SDDSModern.cc.

◆ indexComplete

bool sdds::Reader::Impl::indexComplete = false

Definition at line 3175 of file SDDSModern.cc.

◆ indexedPages

std::optional<std::int64_t> sdds::Reader::Impl::indexedPages

Definition at line 3164 of file SDDSModern.cc.

◆ lastRawRows

std::int64_t sdds::Reader::Impl::lastRawRows = 0

Definition at line 3169 of file SDDSModern.cc.

◆ layout

std::shared_ptr<Layout> sdds::Reader::Impl::layout

Definition at line 3161 of file SDDSModern.cc.

◆ lock

std::unique_ptr<PathLock> sdds::Reader::Impl::lock

Definition at line 3167 of file SDDSModern.cc.

◆ options

ReaderOptions sdds::Reader::Impl::options

Definition at line 3159 of file SDDSModern.cc.

◆ pageNumber

std::int64_t sdds::Reader::Impl::pageNumber = 0

Definition at line 3165 of file SDDSModern.cc.

◆ pageOffsets

std::vector<std::uint64_t> sdds::Reader::Impl::pageOffsets

Definition at line 3163 of file SDDSModern.cc.

◆ path

std::filesystem::path sdds::Reader::Impl::path

Definition at line 3158 of file SDDSModern.cc.

◆ pathBacked

bool sdds::Reader::Impl::pathBacked = false

Definition at line 3174 of file SDDSModern.cc.

◆ stream

BufferedStream sdds::Reader::Impl::stream

Definition at line 3160 of file SDDSModern.cc.

◆ tailInitialized

bool sdds::Reader::Impl::tailInitialized = false

Definition at line 3172 of file SDDSModern.cc.

◆ tailPageNumber

std::int64_t sdds::Reader::Impl::tailPageNumber = 0

Definition at line 3170 of file SDDSModern.cc.

◆ tailRows

std::int64_t sdds::Reader::Impl::tailRows = 0

Definition at line 3171 of file SDDSModern.cc.


The documentation for this struct was generated from the following file: