56,
id(p_FiffDirTree->
id)
79 if (p_Nodes.size() <= 0)
84 for (k = 0; k < p_Nodes.size(); ++k) {
85 p_pStreamOut->start_block(p_Nodes[k]->
type);
86 if (p_Nodes[k]->
id.version != -1) {
93 for (p = 0; p < p_Nodes[k]->nent(); ++p) {
103 if (!p_pStreamIn->device()->seek(p_Nodes[k]->dir[p]->pos))
105 qWarning(
"Could not seek to the tag\n");
110 auto tag = std::make_unique<FiffTag>();
113 in->setByteOrder(QDataStream::BigEndian);
128 if (tag->size() > 0) {
129 in->readRawData(tag->data(), tag->size());
137 out->setByteOrder(QDataStream::BigEndian);
139 *out << static_cast<qint32>(tag->kind);
140 *out << static_cast<qint32>(tag->type);
141 *out << static_cast<qint32>(tag->size());
144 out->writeRawData(tag->data(), tag->size());
146 for (p = 0; p < p_Nodes[k]->nchild(); ++p) {
147 QList<FiffDirNode::SPtr> childList;
148 childList << p_Nodes[k]->children[p];
151 p_pStreamOut->end_block(p_Nodes[k]->
type);
160 QList<FiffDirNode::SPtr> nodes;
161 if (this->
type == p_kind)
164 QList<FiffDirNode::SPtr>::const_iterator i;
165 for (i = this->
children.begin(); i != this->children.end(); ++i)
166 nodes.append((*i)->dir_tree_find(p_kind));
175 for (qint32 p = 0; p < this->
nent(); ++p) {
176 if (this->
dir[p]->kind == findkind) {
191 for (qint32 p = 0; p < this->
nent(); ++p)
192 if (this->
dir.at(p)->kind == findkind)
201 if (this->
type == p_kind)
204 QList<FiffDirNode::SPtr>::const_iterator i;
205 for (i = this->
children.begin(); i != this->children.end(); ++i)
206 if ((*i)->has_kind(p_kind))
215static QString explained(
int kind,
const QString& name,
int width)
217 return name.isEmpty() ? QStringLiteral(
"Cannot explain: %1").arg(kind)
218 : QStringLiteral(
"%1 = %2").arg(kind).arg(name, -width);
225 const QString pad(indent, QLatin1Char(
' '));
228 out << QString::asprintf(
"\t%d.%d 0x%x%x %d %d ",
id.version >> 16,
id.version & 0xFFFF,
id.machid[0],
id.machid[1],
id.time.secs,
id.time.usecs);
232 for (
int j = 0; j <
nent();) {
233 const int kind =
dir[j]->kind;
235 while (j + count <
nent() &&
dir[j + count]->kind == kind) {
240 out <<
" [" << count <<
']';
246 child->print(out, indent + 5);
constexpr auto FIFFV_NEXT_SEQ
FIFF tag: the 16-byte tag header (kind, type, size, next) plus its decoded payload.
FIFF binary tag-stream layer: wraps a QIODevice to read and write FIFF tags, directories,...
Human-readable names of FIFF tag kinds, block kinds, units, unit multipliers and channel kinds.
constexpr auto FIFF_PARENT_BLOCK_ID
constexpr auto FIFF_PARENT_FILE_ID
constexpr auto FIFF_BLOCK_ID
Recursive node of the parsed FIFF block tree (FIFFB_* hierarchy with directory entries and children).
FIFF file I/O, in-memory data structures and high-level readers/writers.
fiff_int_t nchild() const
QList< FiffDirNode::SPtr > children
QSharedPointer< FiffDirNode > SPtr
void print(QTextStream &out, int indent=0) const
QList< FiffDirNode::SPtr > dir_tree_find(fiff_int_t p_kind) const
bool has_kind(fiff_int_t p_kind) const
bool has_tag(fiff_int_t findkind)
QList< FiffDirEntry::SPtr > dir
bool find_tag(QSharedPointer< FiffStream > &p_pStream, fiff_int_t findkind, std::unique_ptr< FiffTag > &p_pTag) const
static bool copy_tree(QSharedPointer< FiffStream > &p_pStreamIn, const FiffId &in_id, const QList< QSharedPointer< FiffDirNode > > &p_Nodes, QSharedPointer< FiffStream > &p_pStreamOut)
static QString tag(int kind)
static QString block(int kind)
128-bit FIFF identifier: hardware machine ID plus creation time, stamped on every file and block.
FIFF tag-stream reader/writer: wraps a QIODevice and exposes typed read_* / write_* methods for every...
QSharedPointer< FiffStream > SPtr
bool read_tag(std::unique_ptr< FiffTag > &p_pTag, fiff_long_t pos=-1)
std::unique_ptr< FiffTag > UPtr