File indexing completed on 2025-01-31 10:08:57
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 #ifndef GAUDIKERNEL_DATASTOREITEM_H
0012 #define GAUDIKERNEL_DATASTOREITEM_H
0013
0014
0015 #include <string>
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027 class DataStoreItem {
0028 protected:
0029
0030 std::string m_path;
0031
0032 int m_depth;
0033
0034 public:
0035
0036 DataStoreItem( std::string path, int depth = 1 ) : m_path( std::move( path ) ), m_depth( depth ) { analyse(); }
0037
0038 DataStoreItem( const DataStoreItem& item ) : m_path( item.m_path ), m_depth( item.m_depth ) { analyse(); }
0039
0040 virtual ~DataStoreItem() = default;
0041
0042
0043 bool operator==( const DataStoreItem& cmp ) const { return m_path == cmp.path() && m_depth == cmp.depth(); }
0044
0045 bool operator!=( const DataStoreItem& cmp ) const { return !( m_path == cmp.path() && m_depth == cmp.depth() ); }
0046
0047 DataStoreItem& operator=( const DataStoreItem& cmp ) {
0048 m_path = cmp.path();
0049 m_depth = cmp.depth();
0050 analyse();
0051 return *this;
0052 }
0053
0054 void analyse() {
0055 if ( m_path.empty() ) return;
0056 const size_t len = m_path.length() - 1;
0057 if ( m_path[len] == '*' ) {
0058 m_depth = 99999999;
0059 ( len > 0 && m_path[len - 1] == '/' ) ? m_path.erase( len - 1, 2 ) : m_path.erase( len, 1 );
0060 } else if ( m_path[len] == '+' ) {
0061 ( len > 0 && m_path[len - 1] == '/' ) ? m_path.erase( len - 1, 2 ) : m_path.erase( len, 1 );
0062 m_depth = 2;
0063 }
0064 }
0065
0066 const std::string& path() const { return m_path; }
0067
0068 int depth() const { return m_depth; }
0069 };
0070 #endif