diff --git a/.gitsubprojects b/.gitsubprojects index 4565791..0190ce0 100644 --- a/.gitsubprojects +++ b/.gitsubprojects @@ -1,3 +1,3 @@ # -*- mode: cmake -*- -git_subproject(Lunchbox https://github.com/Eyescale/Lunchbox.git 21f4ed2) +git_subproject(Lunchbox https://github.com/Eyescale/Lunchbox.git 01507da) git_subproject(vmmlib https://github.com/Eyescale/vmmlib.git 2bec113) diff --git a/brion/plugin/spikeReportBinary.cpp b/brion/plugin/spikeReportBinary.cpp index a291d36..231f7bd 100644 --- a/brion/plugin/spikeReportBinary.cpp +++ b/brion/plugin/spikeReportBinary.cpp @@ -36,7 +36,8 @@ static const uint32_t version = 1; } SpikeReportBinary::SpikeReportBinary( const SpikeReportInitData& initData ) - : _filename( initData.getURI().getPath( )) + : _uri( initData.getURI( )) + , _filename( _uri.getPath( )) { if( initData.getAccessMode() & MODE_READ ) { @@ -82,6 +83,11 @@ bool SpikeReportBinary::handles( const SpikeReportInitData& initData ) return ext == BINARY_REPORT_FILE_EXT; } +const URI& SpikeReportBinary::getURI() const +{ + return _uri; +} + float SpikeReportBinary::getStartTime() const { return _spikes.empty() ? std::numeric_limits< float >::max() : diff --git a/brion/plugin/spikeReportBinary.h b/brion/plugin/spikeReportBinary.h index c2268fa..a33feb4 100644 --- a/brion/plugin/spikeReportBinary.h +++ b/brion/plugin/spikeReportBinary.h @@ -46,6 +46,9 @@ class SpikeReportBinary : public SpikeReportPlugin /** Check if this plugin can handle the given uri. */ static bool handles( const SpikeReportInitData& initData ); + /** @copydoc brion::SpikeReport::getURI */ + const URI& getURI() const final; + /** @copydoc brion::SpikeReport::getStartTime */ float getStartTime() const final; @@ -66,6 +69,7 @@ class SpikeReportBinary : public SpikeReportPlugin { return SpikeReport::STATIC; } private: + const URI _uri; const std::string _filename; Spikes _spikes; }; diff --git a/brion/plugin/spikeReportBluron.cpp b/brion/plugin/spikeReportBluron.cpp index 7285f9a..ead8c7e 100644 --- a/brion/plugin/spikeReportBluron.cpp +++ b/brion/plugin/spikeReportBluron.cpp @@ -38,7 +38,8 @@ namespace } SpikeReportBluron::SpikeReportBluron( const SpikeReportInitData& initData ) - : _spikeReportFile( initData.getURI().getPath(), BLURON_SPIKE_REPORT, + : _uri( initData.getURI( )) + , _spikeReportFile( _uri.getPath(), BLURON_SPIKE_REPORT, initData.getAccessMode( )) { if( initData.getAccessMode() == MODE_READ ) @@ -57,6 +58,11 @@ bool SpikeReportBluron::handles( const SpikeReportInitData& initData ) return ext == BLURON_REPORT_FILE_EXT; } +const URI& SpikeReportBluron::getURI() const +{ + return _uri; +} + float SpikeReportBluron::getStartTime() const { if ( _spikes.empty( )) diff --git a/brion/plugin/spikeReportBluron.h b/brion/plugin/spikeReportBluron.h index 04717c9..2d12695 100644 --- a/brion/plugin/spikeReportBluron.h +++ b/brion/plugin/spikeReportBluron.h @@ -39,6 +39,9 @@ class SpikeReportBluron : public SpikeReportPlugin /** Check if this plugin can handle the given uri. */ static bool handles( const SpikeReportInitData& initData ); + /** @copydoc brion::SpikeReport::getURI */ + const URI& getURI() const final; + /** @copydoc brion::SpikeReport::getStartTime */ float getStartTime() const final; @@ -61,6 +64,7 @@ class SpikeReportBluron : public SpikeReportPlugin } private: + const URI _uri; Spikes _spikes; SpikeReportFile _spikeReportFile; }; diff --git a/brion/plugin/spikeReportNEST.cpp b/brion/plugin/spikeReportNEST.cpp index 0f83be1..59819f5 100644 --- a/brion/plugin/spikeReportNEST.cpp +++ b/brion/plugin/spikeReportNEST.cpp @@ -74,17 +74,17 @@ lunchbox::Strings expandShellWildcard( const std::string& filename ) } SpikeReportNEST::SpikeReportNEST( const SpikeReportInitData& initData ) + : _uri( initData.getURI( )) { - const lunchbox::URI& uri = initData.getURI(); const int accessMode = initData.getAccessMode(); if( accessMode == MODE_READ ) - _reportFiles = expandShellWildcard( uri.getPath( )); + _reportFiles = expandShellWildcard( _uri.getPath( )); if( accessMode & MODE_WRITE ) - _reportFiles.push_back( uri.getPath( ) ); + _reportFiles.push_back( _uri.getPath( )); - _spikeReportFiles.resize( _reportFiles.size() ); + _spikeReportFiles.resize( _reportFiles.size( )); bool emptyReport = true; size_t reportIndex = 0; @@ -110,6 +110,11 @@ SpikeReportNEST::~SpikeReportNEST() delete writer; } +const URI& SpikeReportNEST::getURI() const +{ + return _uri; +} + bool SpikeReportNEST::handles( const SpikeReportInitData& initData ) { const lunchbox::URI& uri = initData.getURI(); diff --git a/brion/plugin/spikeReportNEST.h b/brion/plugin/spikeReportNEST.h index 9fe327c..990318b 100644 --- a/brion/plugin/spikeReportNEST.h +++ b/brion/plugin/spikeReportNEST.h @@ -38,6 +38,9 @@ class SpikeReportNEST : public SpikeReportPlugin explicit SpikeReportNEST( const SpikeReportInitData& initData ); virtual ~SpikeReportNEST(); + /** @copydoc brion::SpikeReport::getURI */ + const URI& getURI() const final; + /** Check if this plugin can handle the given uri. */ static bool handles( const SpikeReportInitData& initData ); @@ -63,6 +66,7 @@ class SpikeReportNEST : public SpikeReportPlugin } private: + const URI _uri; Spikes _spikes; Strings _reportFiles; typedef std::vector< SpikeReportFile* > SpikeReportFiles; diff --git a/brion/plugin/spikeReportSimpleStreamer.cpp b/brion/plugin/spikeReportSimpleStreamer.cpp index fffa821..f8f6a60 100644 --- a/brion/plugin/spikeReportSimpleStreamer.cpp +++ b/brion/plugin/spikeReportSimpleStreamer.cpp @@ -34,7 +34,8 @@ const size_t DEFAULT_LINES_PER_BATCH = 5000; SpikeReportSimpleStreamer::SpikeReportSimpleStreamer( const SpikeReportInitData& initData ) - : _filename( initData.getURI().getPath( ) ) + : _uri( initData.getURI( )) + , _filename( _uri.getPath( )) , _lastTimeStamp( -1 ) // This means that nothing has been received yet , _lastEndTime( 0 ) { @@ -66,6 +67,11 @@ bool SpikeReportSimpleStreamer::handles( const SpikeReportInitData& initData ) return ext == NEST_REPORT_FILE_EXT; } +const URI& SpikeReportSimpleStreamer::getURI() const +{ + return _uri; +} + float SpikeReportSimpleStreamer::getStartTime() const { if ( _spikes.empty( )) diff --git a/brion/plugin/spikeReportSimpleStreamer.h b/brion/plugin/spikeReportSimpleStreamer.h index ee205f1..18dcb52 100644 --- a/brion/plugin/spikeReportSimpleStreamer.h +++ b/brion/plugin/spikeReportSimpleStreamer.h @@ -45,6 +45,9 @@ class SpikeReportSimpleStreamer : public SpikeReportPlugin /** Check if this plugin can handle the given uri. */ static bool handles( const SpikeReportInitData& initData ); + /** @copydoc brion::SpikeReport::getURI */ + const URI& getURI() const final; + /** @copydoc brion::SpikeReport::getStartTime */ float getStartTime() const final; @@ -76,7 +79,8 @@ class SpikeReportSimpleStreamer : public SpikeReportPlugin void close() final; private: - std::string _filename; + const URI _uri; + const std::string _filename; // This is the data set that is exposed to the user. This data set is // updated with cached incoming spikes by waitUntil. diff --git a/brion/spikeReport.cpp b/brion/spikeReport.cpp index 91404ea..dbb5483 100644 --- a/brion/spikeReport.cpp +++ b/brion/spikeReport.cpp @@ -76,6 +76,11 @@ SpikeReport::~SpikeReport() delete _impl; } +const URI& SpikeReport::getURI() const +{ + return _impl->plugin->getURI(); +} + SpikeReport::ReadMode SpikeReport::getReadMode() const { return _impl->plugin->getReadMode(); @@ -123,7 +128,7 @@ void SpikeReport::clear( const float startTime, const float endTime ) void SpikeReport::close() { - _impl->plugin->close( ); + _impl->plugin->close(); } } diff --git a/brion/spikeReport.h b/brion/spikeReport.h index 91f7a83..63ceec2 100644 --- a/brion/spikeReport.h +++ b/brion/spikeReport.h @@ -89,12 +89,22 @@ class SpikeReport : public boost::noncopyable * registered spike report plugin. * @version 1.4 */ - BRION_API explicit SpikeReport( const URI &uri, const int mode ); + BRION_API explicit SpikeReport( const URI& uri, const int mode ); /** Destructor. @version 1.3 */ BRION_API ~SpikeReport(); /** + * Get the URI used to instantiate the report. It could be different from + * the input URI, depending on the plugin implementation. + * + * @return The URI used in the instance. It could be the same as the input + * URI or a different one, depending on the implementation + * @version 1.6 + */ + BRION_API const URI& getURI() const; + + /** * @version 1.4 */ BRION_API ReadMode getReadMode() const; @@ -156,7 +166,6 @@ class SpikeReport : public boost::noncopyable BRION_API bool waitUntil( const float timeStamp, const uint32_t timeout = LB_TIMEOUT_INDEFINITE ); - /** * Return the time of the next spike available in the internal cache. * diff --git a/brion/spikeReportPlugin.h b/brion/spikeReportPlugin.h index 68d3e2d..b60ee5f 100644 --- a/brion/spikeReportPlugin.h +++ b/brion/spikeReportPlugin.h @@ -112,6 +112,9 @@ class SpikeReportPlugin : public boost::noncopyable "Operation not supported in spike report plugin" )); } + /** @copydoc brion::SpikeReport::getURI */ + virtual const URI& getURI() const = 0; + /** @copydoc brion::SpikeReport::getReadMode */ virtual SpikeReport::ReadMode getReadMode() const = 0; diff --git a/doc/Changelog.md b/doc/Changelog.md index 4a10e2a..3fb2285 100644 --- a/doc/Changelog.md +++ b/doc/Changelog.md @@ -3,6 +3,8 @@ Changelog {#Changelog} ## git master {master) +* [#24](https://github.com/BlueBrain/Brion/pull/24): + Add getURI() method in SpikeReport. * [#9](https://github.com/BlueBrain/Brion/issues/9): Extend SWC parser to support fork and end points and undefined section points. The Brion::SectionType enum has not been extended to include end and fork