Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
H
HEPnOS
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
sds
HEP
HEPnOS
Commits
300b1d0f
Commit
300b1d0f
authored
Jan 24, 2020
by
Matthieu Dorier
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
improved memory utilization by using shared ptrs to strings
parent
cc639c4d
Changes
21
Hide whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
148 additions
and
101 deletions
+148
-101
CMakeLists.txt
CMakeLists.txt
+1
-0
bin/CMakeLists.txt
bin/CMakeLists.txt
+1
-1
include/hepnos/DataSet.hpp
include/hepnos/DataSet.hpp
+15
-1
include/hepnos/Event.hpp
include/hepnos/Event.hpp
+1
-1
include/hepnos/Run.hpp
include/hepnos/Run.hpp
+2
-1
include/hepnos/SubRun.hpp
include/hepnos/SubRun.hpp
+1
-1
src/CMakeLists.txt
src/CMakeLists.txt
+1
-1
src/DataSet.cpp
src/DataSet.cpp
+25
-17
src/DataStore.cpp
src/DataStore.cpp
+6
-6
src/Event.cpp
src/Event.cpp
+8
-8
src/Run.cpp
src/Run.cpp
+16
-13
src/RunSet.cpp
src/RunSet.cpp
+5
-5
src/SubRun.cpp
src/SubRun.cpp
+15
-11
src/private/DataSetImpl.hpp
src/private/DataSetImpl.hpp
+2
-2
src/private/EventImpl.hpp
src/private/EventImpl.hpp
+7
-6
src/private/RunImpl.hpp
src/private/RunImpl.hpp
+4
-3
src/private/SubRunImpl.hpp
src/private/SubRunImpl.hpp
+4
-3
src/service/HEPnOSService.cpp
src/service/HEPnOSService.cpp
+18
-19
test/CMakeLists.txt
test/CMakeLists.txt
+4
-0
test/HEPnOSTestMain.cpp
test/HEPnOSTestMain.cpp
+9
-1
test/run-test.sh
test/run-test.sh
+3
-1
No files found.
CMakeLists.txt
View file @
300b1d0f
...
@@ -36,6 +36,7 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
...
@@ -36,6 +36,7 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
# packages we depend on
# packages we depend on
include
(
xpkg-import
)
include
(
xpkg-import
)
find_package
(
mercury CONFIG REQUIRED
)
find_package
(
mercury CONFIG REQUIRED
)
find_package
(
thallium CONFIG REQUIRED
)
find_package
(
Boost REQUIRED COMPONENTS serialization
)
find_package
(
Boost REQUIRED COMPONENTS serialization
)
include_directories
(
${
Boost_INCLUDE_DIRS
}
)
include_directories
(
${
Boost_INCLUDE_DIRS
}
)
xpkg_import_module
(
margo REQUIRED margo
)
xpkg_import_module
(
margo REQUIRED margo
)
...
...
bin/CMakeLists.txt
View file @
300b1d0f
add_executable
(
hepnos-daemon hepnos-daemon.cpp
)
add_executable
(
hepnos-daemon hepnos-daemon.cpp
)
target_link_libraries
(
hepnos-daemon hepnos-service yaml-cpp margo sdskv-server
)
target_link_libraries
(
hepnos-daemon hepnos-service yaml-cpp margo sdskv-server
thallium
)
add_executable
(
hepnos-shutdown hepnos-shutdown.cpp
)
add_executable
(
hepnos-shutdown hepnos-shutdown.cpp
)
target_link_libraries
(
hepnos-shutdown hepnos yaml-cpp margo
)
target_link_libraries
(
hepnos-shutdown hepnos yaml-cpp margo
)
...
...
include/hepnos/DataSet.hpp
View file @
300b1d0f
...
@@ -7,6 +7,7 @@
...
@@ -7,6 +7,7 @@
#define __HEPNOS_DATA_SET_H
#define __HEPNOS_DATA_SET_H
#include <memory>
#include <memory>
#include <mpi.h>
#include <hepnos/Exception.hpp>
#include <hepnos/Exception.hpp>
#include <hepnos/RunNumber.hpp>
#include <hepnos/RunNumber.hpp>
#include <hepnos/DataStore.hpp>
#include <hepnos/DataStore.hpp>
...
@@ -47,7 +48,7 @@ class DataSet : public KeyValueContainer {
...
@@ -47,7 +48,7 @@ class DataSet : public KeyValueContainer {
* @param container Full name of the parent DataSet ("" if no parent).
* @param container Full name of the parent DataSet ("" if no parent).
* @param name Name of the DataSet.
* @param name Name of the DataSet.
*/
*/
DataSet
(
DataStore
*
ds
,
uint8_t
level
,
const
std
::
s
tring
&
container
,
const
std
::
string
&
name
);
DataSet
(
DataStore
*
ds
,
uint8_t
level
,
const
std
::
s
hared_ptr
<
std
::
string
>
&
container
,
const
std
::
string
&
name
);
/**
/**
...
@@ -393,6 +394,19 @@ class DataSet : public KeyValueContainer {
...
@@ -393,6 +394,19 @@ class DataSet : public KeyValueContainer {
* @return a Run corresponding to the provided run number.
* @return a Run corresponding to the provided run number.
*/
*/
Run
operator
[](
const
RunNumber
&
runNumber
)
const
;
Run
operator
[](
const
RunNumber
&
runNumber
)
const
;
/**
* @brief Executes a callback for each event in the hierarchy down
* from this DataSet. The events are dispatched to members of the comm
* MPI communicator.
*
* The callback should not make MPI calls.
*
* @param comm MPI communicator.
* @param callback Callback that will be called on each item.
*/
void
foreach
(
MPI_Comm
comm
,
const
std
::
function
<
void
(
const
Run
&
,
const
SubRun
&
,
const
Event
&
)
>&
callback
);
};
};
}
}
...
...
include/hepnos/Event.hpp
View file @
300b1d0f
...
@@ -32,7 +32,7 @@ class Event : public KeyValueContainer {
...
@@ -32,7 +32,7 @@ class Event : public KeyValueContainer {
* @param container Full name of the container containing the event.
* @param container Full name of the container containing the event.
* @param n Event number.
* @param n Event number.
*/
*/
Event
(
DataStore
*
datastore
,
uint8_t
level
,
const
std
::
s
tring
&
container
,
const
EventNumber
&
n
);
Event
(
DataStore
*
datastore
,
uint8_t
level
,
const
std
::
s
hared_ptr
<
std
::
string
>
&
container
,
const
EventNumber
&
n
);
public:
public:
...
...
include/hepnos/Run.hpp
View file @
300b1d0f
...
@@ -36,7 +36,8 @@ class Run : public KeyValueContainer {
...
@@ -36,7 +36,8 @@ class Run : public KeyValueContainer {
* @param container Full name of the dataset containing the run.
* @param container Full name of the dataset containing the run.
* @param run Run number.
* @param run Run number.
*/
*/
Run
(
DataStore
*
datastore
,
uint8_t
level
,
const
std
::
string
&
container
,
const
RunNumber
&
run
);
Run
(
DataStore
*
datastore
,
uint8_t
level
,
const
std
::
shared_ptr
<
std
::
string
>&
container
,
const
RunNumber
&
run
);
public:
public:
...
...
include/hepnos/SubRun.hpp
View file @
300b1d0f
...
@@ -33,7 +33,7 @@ class SubRun : public KeyValueContainer {
...
@@ -33,7 +33,7 @@ class SubRun : public KeyValueContainer {
* @param container Full name of the dataset containing the run.
* @param container Full name of the dataset containing the run.
* @param run SubRun number.
* @param run SubRun number.
*/
*/
SubRun
(
DataStore
*
datastore
,
uint8_t
level
,
const
std
::
s
tring
&
container
,
const
SubRunNumber
&
run
);
SubRun
(
DataStore
*
datastore
,
uint8_t
level
,
const
std
::
s
hared_ptr
<
std
::
string
>
&
container
,
const
SubRunNumber
&
run
);
public:
public:
...
...
src/CMakeLists.txt
View file @
300b1d0f
...
@@ -41,7 +41,7 @@ set_target_properties (hepnos
...
@@ -41,7 +41,7 @@ set_target_properties (hepnos
SOVERSION
${
HEPNOS_VERSION_MAJOR
}
)
SOVERSION
${
HEPNOS_VERSION_MAJOR
}
)
add_library
(
hepnos-service
${
hepnos-service-src
}
)
add_library
(
hepnos-service
${
hepnos-service-src
}
)
target_link_libraries
(
hepnos mercury margo yaml-cpp sdskv-client sdskv-server ch-placement
)
target_link_libraries
(
hepnos
thallium
mercury margo yaml-cpp sdskv-client sdskv-server ch-placement
)
target_include_directories
(
hepnos-service PUBLIC $<INSTALL_INTERFACE:include>
)
target_include_directories
(
hepnos-service PUBLIC $<INSTALL_INTERFACE:include>
)
# local include's BEFORE, in case old incompatable .h files in prefix/include
# local include's BEFORE, in case old incompatable .h files in prefix/include
...
...
src/DataSet.cpp
View file @
300b1d0f
...
@@ -15,20 +15,20 @@
...
@@ -15,20 +15,20 @@
namespace
hepnos
{
namespace
hepnos
{
DataSet
::
DataSet
()
DataSet
::
DataSet
()
:
m_impl
(
std
::
make_unique
<
DataSet
::
Impl
>
(
this
,
nullptr
,
0
,
""
,
""
))
{}
:
m_impl
(
std
::
make_unique
<
DataSet
::
Impl
>
(
this
,
nullptr
,
0
,
std
::
make_shared
<
std
::
string
>
(
""
)
,
""
))
{}
DataSet
::
DataSet
(
DataStore
*
ds
,
uint8_t
level
,
const
std
::
string
&
fullname
)
DataSet
::
DataSet
(
DataStore
*
ds
,
uint8_t
level
,
const
std
::
string
&
fullname
)
:
m_impl
(
std
::
make_unique
<
DataSet
::
Impl
>
(
this
,
ds
,
level
,
""
,
""
))
{
:
m_impl
(
std
::
make_unique
<
DataSet
::
Impl
>
(
this
,
ds
,
level
,
std
::
make_shared
<
std
::
string
>
(
""
)
,
""
))
{
size_t
p
=
fullname
.
find_last_of
(
'/'
);
size_t
p
=
fullname
.
find_last_of
(
'/'
);
if
(
p
==
std
::
string
::
npos
)
{
if
(
p
==
std
::
string
::
npos
)
{
m_impl
->
m_name
=
fullname
;
m_impl
->
m_name
=
fullname
;
}
else
{
}
else
{
m_impl
->
m_name
=
fullname
.
substr
(
p
+
1
);
m_impl
->
m_name
=
fullname
.
substr
(
p
+
1
);
m_impl
->
m_container
=
fullname
.
substr
(
0
,
p
);
m_impl
->
m_container
=
std
::
make_shared
<
std
::
string
>
(
fullname
.
substr
(
0
,
p
)
);
}
}
}
}
DataSet
::
DataSet
(
DataStore
*
ds
,
uint8_t
level
,
const
std
::
s
tring
&
container
,
const
std
::
string
&
name
)
DataSet
::
DataSet
(
DataStore
*
ds
,
uint8_t
level
,
const
std
::
s
hared_ptr
<
std
::
string
>
&
container
,
const
std
::
string
&
name
)
:
m_impl
(
std
::
make_unique
<
DataSet
::
Impl
>
(
this
,
ds
,
level
,
container
,
name
))
{}
:
m_impl
(
std
::
make_unique
<
DataSet
::
Impl
>
(
this
,
ds
,
level
,
container
,
name
))
{}
DataSet
::
DataSet
(
const
DataSet
&
other
)
{
DataSet
::
DataSet
(
const
DataSet
&
other
)
{
...
@@ -85,7 +85,7 @@ DataSet DataSet::next() const {
...
@@ -85,7 +85,7 @@ DataSet DataSet::next() const {
std
::
vector
<
std
::
string
>
keys
;
std
::
vector
<
std
::
string
>
keys
;
size_t
s
=
m_impl
->
m_datastore
->
m_impl
->
nextKeys
(
size_t
s
=
m_impl
->
m_datastore
->
m_impl
->
nextKeys
(
m_impl
->
m_level
,
m_impl
->
m_container
,
m_impl
->
m_name
,
keys
,
1
);
m_impl
->
m_level
,
*
m_impl
->
m_container
,
m_impl
->
m_name
,
keys
,
1
);
if
(
s
==
0
)
return
DataSet
();
if
(
s
==
0
)
return
DataSet
();
return
DataSet
(
m_impl
->
m_datastore
,
m_impl
->
m_level
,
keys
[
0
]);
return
DataSet
(
m_impl
->
m_datastore
,
m_impl
->
m_level
,
keys
[
0
]);
}
}
...
@@ -136,10 +136,10 @@ bool DataSet::operator==(const DataSet& other) const {
...
@@ -136,10 +136,10 @@ bool DataSet::operator==(const DataSet& other) const {
if
(
!
v1
&&
!
v2
)
return
true
;
if
(
!
v1
&&
!
v2
)
return
true
;
if
(
v1
&&
!
v2
)
return
false
;
if
(
v1
&&
!
v2
)
return
false
;
if
(
!
v2
&&
v2
)
return
false
;
if
(
!
v2
&&
v2
)
return
false
;
return
m_impl
->
m_datastore
==
other
.
m_impl
->
m_datastore
return
m_impl
->
m_datastore
==
other
.
m_impl
->
m_datastore
&&
m_impl
->
m_level
==
other
.
m_impl
->
m_level
&&
m_impl
->
m_level
==
other
.
m_impl
->
m_level
&&
m_impl
->
m_container
==
other
.
m_impl
->
m_container
&&
*
m_impl
->
m_container
==
*
other
.
m_impl
->
m_container
&&
m_impl
->
m_name
==
other
.
m_impl
->
m_name
;
&&
m_impl
->
m_name
==
other
.
m_impl
->
m_name
;
}
}
bool
DataSet
::
operator
!=
(
const
DataSet
&
other
)
const
{
bool
DataSet
::
operator
!=
(
const
DataSet
&
other
)
const
{
...
@@ -157,7 +157,7 @@ const std::string& DataSet::container() const {
...
@@ -157,7 +157,7 @@ const std::string& DataSet::container() const {
if
(
!
valid
())
{
if
(
!
valid
())
{
throw
Exception
(
"Calling DataSet member function on an invalid DataSet"
);
throw
Exception
(
"Calling DataSet member function on an invalid DataSet"
);
}
}
return
m_impl
->
m_container
;
return
*
m_impl
->
m_container
;
}
}
std
::
string
DataSet
::
fullname
()
const
{
std
::
string
DataSet
::
fullname
()
const
{
...
@@ -175,7 +175,7 @@ DataSet DataSet::createDataSet(const std::string& name) {
...
@@ -175,7 +175,7 @@ DataSet DataSet::createDataSet(const std::string& name) {
}
}
std
::
string
parent
=
fullname
();
std
::
string
parent
=
fullname
();
m_impl
->
m_datastore
->
m_impl
->
store
(
m_impl
->
m_level
+
1
,
parent
,
name
,
std
::
string
());
m_impl
->
m_datastore
->
m_impl
->
store
(
m_impl
->
m_level
+
1
,
parent
,
name
,
std
::
string
());
return
DataSet
(
m_impl
->
m_datastore
,
m_impl
->
m_level
+
1
,
parent
,
name
);
return
DataSet
(
m_impl
->
m_datastore
,
m_impl
->
m_level
+
1
,
std
::
make_shared
<
std
::
string
>
(
parent
)
,
name
);
}
}
Run
DataSet
::
createRun
(
const
RunNumber
&
runNumber
)
{
Run
DataSet
::
createRun
(
const
RunNumber
&
runNumber
)
{
...
@@ -185,7 +185,8 @@ Run DataSet::createRun(const RunNumber& runNumber) {
...
@@ -185,7 +185,8 @@ Run DataSet::createRun(const RunNumber& runNumber) {
std
::
string
parent
=
fullname
();
std
::
string
parent
=
fullname
();
std
::
string
runStr
=
Run
::
Impl
::
makeKeyStringFromRunNumber
(
runNumber
);
std
::
string
runStr
=
Run
::
Impl
::
makeKeyStringFromRunNumber
(
runNumber
);
m_impl
->
m_datastore
->
m_impl
->
store
(
m_impl
->
m_level
+
1
,
parent
,
runStr
,
std
::
string
());
m_impl
->
m_datastore
->
m_impl
->
store
(
m_impl
->
m_level
+
1
,
parent
,
runStr
,
std
::
string
());
return
Run
(
m_impl
->
m_datastore
,
m_impl
->
m_level
+
1
,
parent
,
runNumber
);
return
Run
(
m_impl
->
m_datastore
,
m_impl
->
m_level
+
1
,
std
::
make_shared
<
std
::
string
>
(
parent
),
runNumber
);
}
}
Run
DataSet
::
createRun
(
WriteBatch
&
batch
,
const
RunNumber
&
runNumber
)
{
Run
DataSet
::
createRun
(
WriteBatch
&
batch
,
const
RunNumber
&
runNumber
)
{
...
@@ -195,7 +196,8 @@ Run DataSet::createRun(WriteBatch& batch, const RunNumber& runNumber) {
...
@@ -195,7 +196,8 @@ Run DataSet::createRun(WriteBatch& batch, const RunNumber& runNumber) {
std
::
string
parent
=
fullname
();
std
::
string
parent
=
fullname
();
std
::
string
runStr
=
Run
::
Impl
::
makeKeyStringFromRunNumber
(
runNumber
);
std
::
string
runStr
=
Run
::
Impl
::
makeKeyStringFromRunNumber
(
runNumber
);
batch
.
m_impl
->
store
(
m_impl
->
m_level
+
1
,
parent
,
runStr
,
std
::
string
());
batch
.
m_impl
->
store
(
m_impl
->
m_level
+
1
,
parent
,
runStr
,
std
::
string
());
return
Run
(
m_impl
->
m_datastore
,
m_impl
->
m_level
+
1
,
parent
,
runNumber
);
return
Run
(
m_impl
->
m_datastore
,
m_impl
->
m_level
+
1
,
std
::
make_shared
<
std
::
string
>
(
parent
),
runNumber
);
}
}
DataSet
DataSet
::
operator
[](
const
std
::
string
&
datasetName
)
const
{
DataSet
DataSet
::
operator
[](
const
std
::
string
&
datasetName
)
const
{
...
@@ -241,7 +243,7 @@ DataSet::iterator DataSet::find(const std::string& datasetPath) {
...
@@ -241,7 +243,7 @@ DataSet::iterator DataSet::find(const std::string& datasetPath) {
if
(
!
b
)
{
if
(
!
b
)
{
return
m_impl
->
m_datastore
->
end
();
return
m_impl
->
m_datastore
->
end
();
}
}
return
iterator
(
DataSet
(
m_impl
->
m_datastore
,
level
,
containerName
,
datasetName
));
return
iterator
(
DataSet
(
m_impl
->
m_datastore
,
level
,
std
::
make_shared
<
std
::
string
>
(
containerName
)
,
datasetName
));
}
}
DataSet
::
const_iterator
DataSet
::
find
(
const
std
::
string
&
datasetName
)
const
{
DataSet
::
const_iterator
DataSet
::
find
(
const
std
::
string
&
datasetName
)
const
{
...
@@ -255,7 +257,7 @@ DataSet::iterator DataSet::begin() {
...
@@ -255,7 +257,7 @@ DataSet::iterator DataSet::begin() {
}
}
// we use the prefix "&" because we need something that comes after "%"
// we use the prefix "&" because we need something that comes after "%"
// (which represents runs) and is not going to be in a dataset name
// (which represents runs) and is not going to be in a dataset name
DataSet
ds
(
m_impl
->
m_datastore
,
m_impl
->
m_level
+
1
,
fullname
(
),
"&"
);
DataSet
ds
(
m_impl
->
m_datastore
,
m_impl
->
m_level
+
1
,
std
::
make_shared
<
std
::
string
>
(
fullname
()
),
"&"
);
ds
=
ds
.
next
();
ds
=
ds
.
next
();
if
(
ds
.
valid
())
return
iterator
(
ds
);
if
(
ds
.
valid
())
return
iterator
(
ds
);
else
return
end
();
else
return
end
();
...
@@ -303,7 +305,7 @@ DataSet::iterator DataSet::lower_bound(const std::string& lb) {
...
@@ -303,7 +305,7 @@ DataSet::iterator DataSet::lower_bound(const std::string& lb) {
++
it
;
++
it
;
return
it
;
return
it
;
}
}
DataSet
ds
(
m_impl
->
m_datastore
,
m_impl
->
m_level
+
1
,
fullname
(
),
lb2
);
DataSet
ds
(
m_impl
->
m_datastore
,
m_impl
->
m_level
+
1
,
std
::
make_shared
<
std
::
string
>
(
fullname
()
),
lb2
);
ds
=
ds
.
next
();
ds
=
ds
.
next
();
if
(
!
ds
.
valid
())
return
end
();
if
(
!
ds
.
valid
())
return
end
();
else
return
iterator
(
ds
);
else
return
iterator
(
ds
);
...
@@ -318,7 +320,7 @@ DataSet::iterator DataSet::upper_bound(const std::string& ub) {
...
@@ -318,7 +320,7 @@ DataSet::iterator DataSet::upper_bound(const std::string& ub) {
if
(
!
valid
())
{
if
(
!
valid
())
{
throw
Exception
(
"Calling DataSet member function on an invalid DataSet"
);
throw
Exception
(
"Calling DataSet member function on an invalid DataSet"
);
}
}
DataSet
ds
(
m_impl
->
m_datastore
,
m_impl
->
m_level
+
1
,
fullname
(
),
ub
);
DataSet
ds
(
m_impl
->
m_datastore
,
m_impl
->
m_level
+
1
,
std
::
make_shared
<
std
::
string
>
(
fullname
()
),
ub
);
ds
=
ds
.
next
();
ds
=
ds
.
next
();
if
(
!
ds
.
valid
())
return
end
();
if
(
!
ds
.
valid
())
return
end
();
else
return
iterator
(
ds
);
else
return
iterator
(
ds
);
...
@@ -340,4 +342,10 @@ const RunSet& DataSet::runs() const {
...
@@ -340,4 +342,10 @@ const RunSet& DataSet::runs() const {
return
const_cast
<
DataSet
*>
(
this
)
->
runs
();
return
const_cast
<
DataSet
*>
(
this
)
->
runs
();
}
}
void
DataSet
::
foreach
(
MPI_Comm
comm
,
const
std
::
function
<
void
(
const
Run
&
,
const
SubRun
&
,
const
Event
&
)
>&
callback
)
{
// TODO
}
}
}
src/DataStore.cpp
View file @
300b1d0f
...
@@ -81,7 +81,7 @@ DataStore::iterator DataStore::find(const std::string& datasetPath) {
...
@@ -81,7 +81,7 @@ DataStore::iterator DataStore::find(const std::string& datasetPath) {
if
(
!
b
)
{
if
(
!
b
)
{
return
m_impl
->
m_end
;
return
m_impl
->
m_end
;
}
}
return
iterator
(
DataSet
(
this
,
level
,
containerName
,
datasetName
));
return
iterator
(
DataSet
(
this
,
level
,
std
::
make_shared
<
std
::
string
>
(
containerName
)
,
datasetName
));
}
}
DataSet
DataStore
::
operator
[](
const
std
::
string
&
datasetName
)
const
{
DataSet
DataStore
::
operator
[](
const
std
::
string
&
datasetName
)
const
{
...
@@ -100,7 +100,7 @@ DataStore::iterator DataStore::begin() {
...
@@ -100,7 +100,7 @@ DataStore::iterator DataStore::begin() {
if
(
!
m_impl
)
{
if
(
!
m_impl
)
{
throw
Exception
(
"Calling DataStore member function on an invalid DataStore object"
);
throw
Exception
(
"Calling DataStore member function on an invalid DataStore object"
);
}
}
DataSet
ds
(
this
,
1
,
""
,
""
);
DataSet
ds
(
this
,
1
,
std
::
make_shared
<
std
::
string
>
(
""
)
,
""
);
ds
=
ds
.
next
();
ds
=
ds
.
next
();
if
(
ds
.
valid
())
return
iterator
(
std
::
move
(
ds
));
if
(
ds
.
valid
())
return
iterator
(
std
::
move
(
ds
));
else
return
end
();
else
return
end
();
...
@@ -143,7 +143,7 @@ DataStore::iterator DataStore::lower_bound(const std::string& lb) {
...
@@ -143,7 +143,7 @@ DataStore::iterator DataStore::lower_bound(const std::string& lb) {
++
it
;
++
it
;
return
it
;
return
it
;
}
}
DataSet
ds
(
this
,
1
,
""
,
lb2
);
DataSet
ds
(
this
,
1
,
std
::
make_shared
<
std
::
string
>
(
""
)
,
lb2
);
ds
=
ds
.
next
();
ds
=
ds
.
next
();
if
(
!
ds
.
valid
())
return
end
();
if
(
!
ds
.
valid
())
return
end
();
else
return
iterator
(
std
::
move
(
ds
));
else
return
iterator
(
std
::
move
(
ds
));
...
@@ -158,7 +158,7 @@ DataStore::iterator DataStore::upper_bound(const std::string& ub) {
...
@@ -158,7 +158,7 @@ DataStore::iterator DataStore::upper_bound(const std::string& ub) {
if
(
!
m_impl
)
{
if
(
!
m_impl
)
{
throw
Exception
(
"Calling DataStore member function on an invalid DataStore object"
);
throw
Exception
(
"Calling DataStore member function on an invalid DataStore object"
);
}
}
DataSet
ds
(
this
,
1
,
""
,
ub
);
DataSet
ds
(
this
,
1
,
std
::
make_shared
<
std
::
string
>
(
""
)
,
ub
);
ds
=
ds
.
next
();
ds
=
ds
.
next
();
if
(
!
ds
.
valid
())
return
end
();
if
(
!
ds
.
valid
())
return
end
();
else
return
iterator
(
std
::
move
(
ds
));
else
return
iterator
(
std
::
move
(
ds
));
...
@@ -178,7 +178,7 @@ DataSet DataStore::createDataSet(const std::string& name) {
...
@@ -178,7 +178,7 @@ DataSet DataStore::createDataSet(const std::string& name) {
throw
Exception
(
"Invalid character ('/' or '%') in dataset name"
);
throw
Exception
(
"Invalid character ('/' or '%') in dataset name"
);
}
}
m_impl
->
store
(
1
,
""
,
name
,
std
::
string
());
m_impl
->
store
(
1
,
""
,
name
,
std
::
string
());
return
DataSet
(
this
,
1
,
""
,
name
);
return
DataSet
(
this
,
1
,
std
::
make_shared
<
std
::
string
>
(
""
)
,
name
);
}
}
DataSet
DataStore
::
createDataSet
(
WriteBatch
&
batch
,
const
std
::
string
&
name
)
{
DataSet
DataStore
::
createDataSet
(
WriteBatch
&
batch
,
const
std
::
string
&
name
)
{
...
@@ -190,7 +190,7 @@ DataSet DataStore::createDataSet(WriteBatch& batch, const std::string& name) {
...
@@ -190,7 +190,7 @@ DataSet DataStore::createDataSet(WriteBatch& batch, const std::string& name) {
throw
Exception
(
"Invalid character ('/' or '%') in dataset name"
);
throw
Exception
(
"Invalid character ('/' or '%') in dataset name"
);
}
}
batch
.
m_impl
->
store
(
1
,
""
,
name
,
std
::
string
());
batch
.
m_impl
->
store
(
1
,
""
,
name
,
std
::
string
());
return
DataSet
(
this
,
1
,
""
,
name
);
return
DataSet
(
this
,
1
,
std
::
make_shared
<
std
::
string
>
(
""
)
,
name
);
}
}
void
DataStore
::
shutdown
()
{
void
DataStore
::
shutdown
()
{
...
...
src/Event.cpp
View file @
300b1d0f
...
@@ -11,9 +11,9 @@
...
@@ -11,9 +11,9 @@
namespace
hepnos
{
namespace
hepnos
{
Event
::
Event
()
Event
::
Event
()
:
m_impl
(
std
::
make_unique
<
Impl
>
(
nullptr
,
0
,
""
,
InvalidEventNumber
))
{}
:
m_impl
(
std
::
make_unique
<
Impl
>
(
nullptr
,
0
,
std
::
make_shared
<
std
::
string
>
(
""
)
,
InvalidEventNumber
))
{}
Event
::
Event
(
DataStore
*
ds
,
uint8_t
level
,
const
std
::
s
tring
&
container
,
const
EventNumber
&
rn
)
Event
::
Event
(
DataStore
*
ds
,
uint8_t
level
,
const
std
::
s
hared_ptr
<
std
::
string
>
&
container
,
const
EventNumber
&
rn
)
:
m_impl
(
std
::
make_unique
<
Impl
>
(
ds
,
level
,
container
,
rn
))
{
}
:
m_impl
(
std
::
make_unique
<
Impl
>
(
ds
,
level
,
container
,
rn
))
{
}
Event
::
Event
(
const
Event
&
other
)
{
Event
::
Event
(
const
Event
&
other
)
{
...
@@ -46,10 +46,10 @@ Event Event::next() const {
...
@@ -46,10 +46,10 @@ Event Event::next() const {
std
::
vector
<
std
::
string
>
keys
;
std
::
vector
<
std
::
string
>
keys
;
size_t
s
=
m_impl
->
m_datastore
->
m_impl
->
nextKeys
(
size_t
s
=
m_impl
->
m_datastore
->
m_impl
->
nextKeys
(
m_impl
->
m_level
,
m_impl
->
m_container
,
m_impl
->
m_level
,
*
m_impl
->
m_container
,
m_impl
->
makeKeyStringFromEventNumber
(),
keys
,
1
);
m_impl
->
makeKeyStringFromEventNumber
(),
keys
,
1
);
if
(
s
==
0
)
return
Event
();
if
(
s
==
0
)
return
Event
();
size_t
i
=
m_impl
->
m_container
.
size
()
+
1
;
size_t
i
=
m_impl
->
m_container
->
size
()
+
1
;
if
(
keys
[
0
].
size
()
<=
i
)
return
Event
();
if
(
keys
[
0
].
size
()
<=
i
)
return
Event
();
if
(
keys
[
0
][
i
]
!=
'%'
)
return
Event
();
if
(
keys
[
0
][
i
]
!=
'%'
)
return
Event
();
std
::
stringstream
strEventNumber
;
std
::
stringstream
strEventNumber
;
...
@@ -107,10 +107,10 @@ bool Event::operator==(const Event& other) const {
...
@@ -107,10 +107,10 @@ bool Event::operator==(const Event& other) const {
if
(
!
v1
&&
!
v2
)
return
true
;
if
(
!
v1
&&
!
v2
)
return
true
;
if
(
!
v1
&&
v2
)
return
false
;
if
(
!
v1
&&
v2
)
return
false
;
if
(
v1
&&
!
v2
)
return
false
;
if
(
v1
&&
!
v2
)
return
false
;
return
m_impl
->
m_datastore
==
other
.
m_impl
->
m_datastore
return
m_impl
->
m_datastore
==
other
.
m_impl
->
m_datastore
&&
m_impl
->
m_level
==
other
.
m_impl
->
m_level
&&
m_impl
->
m_level
==
other
.
m_impl
->
m_level
&&
m_impl
->
m_container
==
other
.
m_impl
->
m_container
&&
*
m_impl
->
m_container
==
*
other
.
m_impl
->
m_container
&&
m_impl
->
m_event_nr
==
other
.
m_impl
->
m_event_nr
;
&&
m_impl
->
m_event_nr
==
other
.
m_impl
->
m_event_nr
;
}
}
bool
Event
::
operator
!=
(
const
Event
&
other
)
const
{
bool
Event
::
operator
!=
(
const
Event
&
other
)
const
{
...
...
src/Run.cpp
View file @
300b1d0f
...
@@ -12,9 +12,9 @@
...
@@ -12,9 +12,9 @@
namespace
hepnos
{
namespace
hepnos
{
Run
::
Run
()
Run
::
Run
()
:
m_impl
(
std
::
make_unique
<
Run
::
Impl
>
(
nullptr
,
0
,
""
,
InvalidRunNumber
))
{}
:
m_impl
(
std
::
make_unique
<
Run
::
Impl
>
(
nullptr
,
0
,
std
::
make_shared
<
std
::
string
>
(
""
)
,
InvalidRunNumber
))
{}
Run
::
Run
(
DataStore
*
ds
,
uint8_t
level
,
const
std
::
s
tring
&
container
,
const
RunNumber
&
rn
)
Run
::
Run
(
DataStore
*
ds
,
uint8_t
level
,
const
std
::
s
hared_ptr
<
std
::
string
>
&
container
,
const
RunNumber
&
rn
)
:
m_impl
(
std
::
make_unique
<
Run
::
Impl
>
(
ds
,
level
,
container
,
rn
))
{
}
:
m_impl
(
std
::
make_unique
<
Run
::
Impl
>
(
ds
,
level
,
container
,
rn
))
{
}
Run
::
Run
(
const
Run
&
other
)
{
Run
::
Run
(
const
Run
&
other
)
{
...
@@ -48,10 +48,10 @@ Run Run::next() const {
...
@@ -48,10 +48,10 @@ Run Run::next() const {
std
::
vector
<
std
::
string
>
keys
;
std
::
vector
<
std
::
string
>
keys
;
size_t
s
=
m_impl
->
m_datastore
->
m_impl
->
nextKeys
(
size_t
s
=
m_impl
->
m_datastore
->
m_impl
->
nextKeys
(
m_impl
->
m_level
,
m_impl
->
m_container
,
m_impl
->
m_level
,
*
m_impl
->
m_container
,
m_impl
->
makeKeyStringFromRunNumber
(),
keys
,
1
);
m_impl
->
makeKeyStringFromRunNumber
(),
keys
,
1
);
if
(
s
==
0
)
return
Run
();
if
(
s
==
0
)
return
Run
();
size_t
i
=
m_impl
->
m_container
.
size
()
+
1
;
size_t
i
=
m_impl
->
m_container
->
size
()
+
1
;
if
(
keys
[
0
].
size
()
<=
i
)
return
Run
();
if
(
keys
[
0
].
size
()
<=
i
)
return
Run
();
if
(
keys
[
0
][
i
]
!=
'%'
)
return
Run
();
if
(
keys
[
0
][
i
]
!=
'%'
)
return
Run
();
std
::
stringstream
strRunNumber
;
std
::
stringstream
strRunNumber
;
...
@@ -111,7 +111,7 @@ bool Run::operator==(const Run& other) const {
...
@@ -111,7 +111,7 @@ bool Run::operator==(const Run& other) const {
if
(
!
v1
&&
v2
)
return
false
;
if
(
!
v1
&&
v2
)
return
false
;
return
m_impl
->
m_datastore
==
other
.
m_impl
->
m_datastore
return
m_impl
->
m_datastore
==
other
.
m_impl
->
m_datastore
&&
m_impl
->
m_level
==
other
.
m_impl
->
m_level
&&
m_impl
->
m_level
==
other
.
m_impl
->
m_level
&&
m_impl
->
m_container
==
other
.
m_impl
->
m_container
&&
*
m_impl
->
m_container
==
*
other
.
m_impl
->
m_container
&&
m_impl
->
m_run_nr
==
other
.
m_impl
->
m_run_nr
;
&&
m_impl
->
m_run_nr
==
other
.
m_impl
->
m_run_nr
;
}
}
...
@@ -130,7 +130,7 @@ const std::string& Run::container() const {
...
@@ -130,7 +130,7 @@ const std::string& Run::container() const {
if
(
!
valid
())
{
if
(
!
valid
())
{
throw
Exception
(
"Calling Run member function on an invalid Run object"
);
throw
Exception
(
"Calling Run member function on an invalid Run object"
);
}
}
return
m_impl
->
m_container
;
return
*
m_impl
->
m_container
;
}
}
SubRun
Run
::
createSubRun
(
const
SubRunNumber
&
subRunNumber
)
{
SubRun
Run
::
createSubRun
(
const
SubRunNumber
&
subRunNumber
)
{
...
@@ -140,7 +140,8 @@ SubRun Run::createSubRun(const SubRunNumber& subRunNumber) {
...
@@ -140,7 +140,8 @@ SubRun Run::createSubRun(const SubRunNumber& subRunNumber) {
std
::
string
parent
=
m_impl
->
fullpath
();
std
::
string
parent
=
m_impl
->
fullpath
();
std
::
string
subRunStr
=
SubRun
::
Impl
::
makeKeyStringFromSubRunNumber
(
subRunNumber
);
std
::
string
subRunStr
=
SubRun
::
Impl
::
makeKeyStringFromSubRunNumber
(
subRunNumber
);
m_impl
->
m_datastore
->
m_impl
->
store
(
m_impl
->
m_level
+
1
,
parent
,
subRunStr
,
std
::
string
());
m_impl
->
m_datastore
->
m_impl
->
store
(
m_impl
->
m_level
+
1
,
parent
,
subRunStr
,
std
::
string
());
return
SubRun
(
m_impl
->
m_datastore
,
m_impl
->
m_level
+
1
,
parent
,
subRunNumber
);
return
SubRun
(
m_impl
->
m_datastore
,
m_impl
->
m_level
+
1
,
std
::
make_shared
<
std
::
string
>
(
parent
),
subRunNumber
);
}
}
SubRun
Run
::
createSubRun
(
WriteBatch
&
batch
,
const
SubRunNumber
&
subRunNumber
)
{
SubRun
Run
::
createSubRun
(
WriteBatch
&
batch
,
const
SubRunNumber
&
subRunNumber
)
{
...
@@ -150,7 +151,8 @@ SubRun Run::createSubRun(WriteBatch& batch, const SubRunNumber& subRunNumber) {
...
@@ -150,7 +151,8 @@ SubRun Run::createSubRun(WriteBatch& batch, const SubRunNumber& subRunNumber) {
std
::
string
parent
=
m_impl
->
fullpath
();
std
::
string
parent
=
m_impl
->
fullpath
();
std
::
string
subRunStr
=
SubRun
::
Impl
::
makeKeyStringFromSubRunNumber
(
subRunNumber
);
std
::
string
subRunStr
=
SubRun
::
Impl
::
makeKeyStringFromSubRunNumber
(
subRunNumber
);
batch
.
m_impl
->
store
(
m_impl
->
m_level
+
1
,
parent
,
subRunStr
,
std
::
string
());
batch
.
m_impl
->
store
(
m_impl
->
m_level
+
1
,
parent
,
subRunStr
,
std
::
string
());
return
SubRun
(
m_impl
->
m_datastore
,
m_impl
->
m_level
+
1
,
parent
,
subRunNumber
);
return
SubRun
(
m_impl
->
m_datastore
,
m_impl
->
m_level
+
1
,
std
::
make_shared
<
std
::
string
>
(
parent
),
subRunNumber
);
}
}
SubRun
Run
::
operator
[](
const
SubRunNumber
&
subRunNumber
)
const
{
SubRun
Run
::
operator
[](
const
SubRunNumber
&
subRunNumber
)
const
{
...
@@ -171,7 +173,8 @@ Run::iterator Run::find(const SubRunNumber& subRunNumber) {
...
@@ -171,7 +173,8 @@ Run::iterator Run::find(const SubRunNumber& subRunNumber) {
if
(
!
b
)
{
if
(
!
b
)
{
return
m_impl
->
m_end
;
return
m_impl
->
m_end
;
}
}
return
iterator
(
SubRun
(
m_impl
->
m_datastore
,
m_impl
->
m_level
+
1
,
parent
,
subRunNumber
));
return
iterator
(
SubRun
(
m_impl
->
m_datastore
,
m_impl
->
m_level
+
1
,
std
::
make_shared
<
std
::
string
>
(
parent
),
subRunNumber
));
}
}
Run
::
const_iterator
Run
::
find
(
const
SubRunNumber
&
subRunNumber
)
const
{
Run
::
const_iterator
Run
::
find
(
const
SubRunNumber
&
subRunNumber
)
const
{
...
@@ -186,7 +189,7 @@ Run::iterator Run::begin() {
...
@@ -186,7 +189,7 @@ Run::iterator Run::begin() {
auto
level
=
m_impl
->
m_level
;
auto
level
=
m_impl
->
m_level
;
auto
datastore
=
m_impl
->
m_datastore
;
auto
datastore
=
m_impl
->
m_datastore
;
std
::
string
container
=
m_impl
->
fullpath
();
std
::
string
container
=
m_impl
->
fullpath
();
SubRun
subrun
(
datastore
,
level
+
1
,
container
,
0
);
SubRun
subrun
(
datastore
,
level
+
1
,
std
::
make_shared
<
std
::
string
>
(
container
)
,
0
);
subrun
=
subrun
.
next
();
subrun
=
subrun
.
next
();
if
(
subrun
.
valid
())
return
iterator
(
subrun
);
if
(
subrun
.
valid
())
return
iterator
(
subrun
);
...
@@ -230,7 +233,7 @@ Run::iterator Run::lower_bound(const SubRunNumber& lb) {
...
@@ -230,7 +233,7 @@ Run::iterator Run::lower_bound(const SubRunNumber& lb) {
}
else
{
}
else
{
SubRun
subrun
(
m_impl
->
m_datastore
,
SubRun
subrun
(
m_impl
->
m_datastore
,
m_impl
->
m_level
+
1
,
m_impl
->
m_level
+
1
,
m_impl
->
fullpath
(
),
0
);
std
::
make_shared
<
std
::
string
>
(
m_impl
->
fullpath
()
),
0
);
subrun
=
subrun
.
next
();
subrun
=
subrun
.
next
();
if
(
!
subrun
.
valid
())
return
end
();
if
(
!
subrun
.
valid
())
return
end
();
else
return
iterator
(
subrun
);
else
return
iterator
(
subrun
);
...
@@ -243,7 +246,7 @@ Run::iterator Run::lower_bound(const SubRunNumber& lb) {
...
@@ -243,7 +246,7 @@ Run::iterator Run::lower_bound(const SubRunNumber& lb) {
}
}
SubRun
subrun
(
m_impl
->
m_datastore
,
SubRun
subrun
(
m_impl
->
m_datastore
,
m_impl
->
m_level
+
1
,
m_impl
->
m_level
+
1
,
m_impl
->
fullpath
(
),
lb
-
1
);
std
::
make_shared
<
std
::
string
>
(
m_impl
->
fullpath
()
),
lb
-
1
);
subrun
=
subrun
.
next
();
subrun
=
subrun
.
next
();
if
(
!
subrun
.
valid
())
return
end
();
if
(
!
subrun
.
valid
())
return
end
();
else
return
iterator
(
subrun
);
else
return
iterator
(
subrun
);
...
@@ -261,7 +264,7 @@ Run::iterator Run::upper_bound(const SubRunNumber& ub) {
...
@@ -261,7 +264,7 @@ Run::iterator Run::upper_bound(const SubRunNumber& ub) {
}
}
SubRun
subrun
(
m_impl
->
m_datastore
,
SubRun
subrun
(
m_impl
->
m_datastore
,
m_impl
->
m_level
+
1
,
m_impl
->
m_level
+
1
,
m_impl
->
fullpath
(
),
ub
);
std
::
make_shared
<
std
::
string
>
(
m_impl
->
fullpath
()
),
ub
);
subrun
=
subrun
.
next
();
subrun
=
subrun
.
next
();
if
(
!
subrun
.
valid
())
return
end
();
if
(
!
subrun
.
valid
())
return
end
();
else
return
iterator
(
subrun
);
else
return
iterator
(
subrun
);
...
...
src/RunSet.cpp
View file @
300b1d0f
...
@@ -40,7 +40,7 @@ RunSet::iterator RunSet::find(const RunNumber& runNumber) {
...
@@ -40,7 +40,7 @@ RunSet::iterator RunSet::find(const RunNumber& runNumber) {
auto
level
=
m_impl
->
m_dataset
->
m_impl
->
m_level
;
auto
level
=
m_impl
->
m_dataset
->
m_impl
->
m_level
;
bool
b
=
datastore
->
m_impl
->
exists
(
level
+
1
,
parent
,
strNum
);
bool
b
=
datastore
->
m_impl
->
exists
(
level
+
1
,
parent
,
strNum
);
if
(
!
b
)
return
end
();
if
(
!
b
)
return
end
();
return
iterator
(
Run
(
datastore
,
level
+
1
,
parent
,
runNumber
));
return
iterator
(
Run
(
datastore
,
level
+
1
,
std
::
make_shared
<
std
::
string
>
(
parent
)
,
runNumber
));
}
}
RunSet
::
const_iterator
RunSet
::
find
(
const
RunNumber
&
runNumber
)
const
{
RunSet
::
const_iterator
RunSet
::
find
(
const
RunNumber
&
runNumber
)
const
{
...
@@ -55,7 +55,7 @@ RunSet::iterator RunSet::begin() {
...
@@ -55,7 +55,7 @@ RunSet::iterator RunSet::begin() {
auto
ds_level
=
m_impl
->
m_dataset
->
m_impl
->
m_level
;
auto
ds_level
=
m_impl
->
m_dataset
->
m_impl
->
m_level
;
auto
datastore
=
m_impl
->
m_dataset
->
m_impl
->
m_datastore
;
auto
datastore
=
m_impl
->
m_dataset
->
m_impl
->
m_datastore
;
std
::
string
container
=
m_impl
->
m_dataset
->
fullname
();
std
::
string
container
=
m_impl
->
m_dataset
->
fullname
();
Run
run
(
datastore
,
ds_level
+
1
,
container
,
0
);
Run
run
(
datastore
,
ds_level
+
1
,
std
::
make_shared
<
std
::
string
>
(
container
)
,
0
);
run
=
run
.
next
();
run
=
run
.
next
();
if
(
run
.
valid
())
return
iterator
(
run
);
if
(
run
.
valid
())
return
iterator
(
run
);
...
@@ -90,7 +90,7 @@ RunSet::iterator RunSet::lower_bound(const RunNumber& lb) {
...
@@ -90,7 +90,7 @@ RunSet::iterator RunSet::lower_bound(const RunNumber& lb) {
}
else
{
}
else
{
Run
run
(
m_impl
->
m_dataset
->
m_impl
->
m_datastore
,
Run
run
(
m_impl
->
m_dataset
->
m_impl
->
m_datastore
,
m_impl
->
m_dataset
->
m_impl
->
m_level
+
1
,
m_impl
->
m_dataset
->
m_impl
->
m_level
+
1
,
m_impl
->
m_dataset
->
fullname
(
),
0
);
std
::
make_shared
<
std
::
string
>
(
m_impl
->
m_dataset
->
fullname
()
),
0
);
run
=
run
.
next
();
run
=
run
.
next
();
if
(
!
run
.
valid
())
return
end
();
if
(
!
run
.
valid
())
return
end
();
else
return
iterator
(
run
);
else
return
iterator
(
run
);
...
@@ -103,7 +103,7 @@ RunSet::iterator RunSet::lower_bound(const RunNumber& lb) {
...
@@ -103,7 +103,7 @@ RunSet::iterator RunSet::lower_bound(const RunNumber& lb) {
}
}
Run
run
(
m_impl
->
m_dataset
->
m_impl
->
m_datastore
,
Run
run
(
m_impl
->
m_dataset
->
m_impl
->
m_datastore
,
m_impl
->
m_dataset
->
m_impl
->
m_level
+
1
,
m_impl
->
m_dataset
->
m_impl
->
m_level
+
1
,
m_impl
->
m_dataset
->
fullname
(
),
lb
-
1
);
std
::
make_shared
<
std
::
string
>
(
m_impl
->
m_dataset
->
fullname
()
),
lb
-
1
);
run
=
run
.
next
();
run
=
run
.
next
();
if
(
!
run
.
valid
())
return
end
();
if
(
!
run
.
valid
())
return
end
();
else
return
iterator
(
run
);
else
return
iterator
(
run
);
...
@@ -118,7 +118,7 @@ RunSet::const_iterator RunSet::lower_bound(const RunNumber& lb) const {
...
@@ -118,7 +118,7 @@ RunSet::const_iterator RunSet::lower_bound(const RunNumber& lb) const {
RunSet
::
iterator
RunSet
::
upper_bound
(
const
RunNumber
&
ub
)
{
RunSet
::
iterator
RunSet
::
upper_bound
(
const
RunNumber
&
ub
)
{
Run
run
(
m_impl
->
m_dataset
->
m_impl
->
m_datastore
,
Run
run
(
m_impl
->
m_dataset
->
m_impl
->
m_datastore
,
m_impl
->
m_dataset
->
m_impl
->
m_level
+
1
,
m_impl
->
m_dataset
->
m_impl
->
m_level
+
1
,
m_impl
->
m_dataset
->
fullname
(
),
ub
);
std
::
make_shared
<
std
::
string
>
(
m_impl
->
m_dataset
->
fullname
()
),
ub
);
run
=
run
.
next
();
run
=
run
.
next
();
if
(
!
run
.
valid
())
return
end
();
if
(
!
run
.
valid
())
return
end
();
else
return
iterator
(
run
);