libpappsomspp
Library for mass spectrometry
Loading...
Searching...
No Matches
cborstreamreaderinterface.cpp
Go to the documentation of this file.
1/**
2 * \file pappsomspp/processing/cbor/cborstreamreaderinterface.h
3 * \date 11/02/2025
4 * \author Olivier Langella
5 * \brief common interface to read CBOR streams with convenient framework
6 */
7
8/*******************************************************************************
9 * Copyright (c) 2025 Olivier Langella <Olivier.Langella@universite-paris-saclay.fr>.
10 *
11 * This file is part of PAPPSOms-tools.
12 *
13 * PAPPSOms-tools is free software: you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License as published by
15 * the Free Software Foundation, either version 3 of the License, or
16 * (at your option) any later version.
17 *
18 * PAPPSOms-tools is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU General Public License for more details.
22 *
23 * You should have received a copy of the GNU General Public License
24 * along with PAPPSOms-tools. If not, see <http://www.gnu.org/licenses/>.
25 *
26 ******************************************************************************/
27
29
33
37
38
39bool
41{
42 bool is_ok = false;
43 m_expectedString = "";
44 qDebug() << mpa_cborReader->type();
45 if(mpa_cborReader->type() == QCborStreamReader::String)
46 {
47 is_ok = mpa_cborReader->decodeString(m_expectedString);
48 }
49
50 return is_ok;
51}
52
53
54void
56{
57
58 if(mpa_cborReader != nullptr)
59 delete mpa_cborReader;
60 mpa_cborReader = nullptr;
61 mpa_cborReader = new CborStreamReader();
62 // try to mmap the file, this is faster
63 char *ptr =
64 reinterpret_cast<char *>(pcborfile->map(0, pcborfile->size(), QFile::MapPrivateOption));
65 if(ptr)
66 {
67 // worked
68 m_data = QByteArray::fromRawData(ptr, pcborfile->size());
69 mpa_cborReader->addData(m_data);
70 }
71 else if(pcborfile->isSequential())
72 {
73 // details requires full contents, so allocate memory
74 m_data = pcborfile->readAll();
75 mpa_cborReader->addData(m_data);
76 }
77 else
78 {
79 // just use the QIODevice
80 mpa_cborReader->setDevice(pcborfile);
81 }
82}