Scroom  0.14
bookkeeping.hh
Go to the documentation of this file.
1 /*
2  * Scroom - Generic viewer for 2D data
3  * Copyright (C) 2009-2022 Kees-Jan Dijkzeul
4  *
5  * SPDX-License-Identifier: LGPL-2.1
6  */
7 
8 #pragma once
9 
10 #include <list>
11 #include <map>
12 
13 #include <boost/noncopyable.hpp>
14 #include <boost/shared_ptr.hpp>
15 #include <boost/weak_ptr.hpp>
16 
17 #include <scroom/stuff.hh>
18 #include <scroom/utilities.hh>
19 
21 {
24 
25  namespace Detail
26  {
27  class TokenImpl;
28  class TokenAddition;
29 
30  template <typename V>
31  class ValueType;
32 
33  template <typename V>
34  class LValue;
35  } // namespace Detail
36 
37  class Token : public boost::shared_ptr<Detail::TokenImpl>
38  {
39  public:
40  explicit Token(const boost::shared_ptr<Detail::TokenImpl>& t);
41  explicit Token(const boost::weak_ptr<Detail::TokenImpl>& t);
42  Token();
43  explicit Token(const Stuff& s);
44  explicit Token(const StuffList& l);
45 
46  void add(const Stuff& s) const;
47  void add(const StuffList& l) const;
48  void merge(Token& rhs) const;
49  void merge(StuffList& l) const;
50 
51  public:
52  Detail::TokenAddition operator+(const Stuff& rhs) const;
53  Token const& operator+=(const Stuff& rhs) const;
54  };
55 
56  using WeakToken = boost::weak_ptr<Detail::TokenImpl>;
57 
58  template <typename K, typename V>
59  class MapBase
60  : public virtual Scroom::Utils::Base
61  , public boost::noncopyable
62  {
63  private:
64  using MapType = typename std::map<K, boost::weak_ptr<Detail::ValueType<V>>>;
65 
67  mutable boost::mutex mut;
68 
69  public:
70  Token reserve(const K& k);
71  Token reReserve(const K& k);
72  void remove(const K& k);
73  void remove(const K& k, const WeakToken& t);
74  Detail::LValue<V> at(const K& k);
75  void set(const K& k, const V& v);
76  V get(const K& k);
77  std::list<K> keys() const;
78  std::list<V> values() const;
79  };
80 
81  template <typename K, typename V>
82  class Map : public MapBase<K, V>
83  {
84  public:
85  using Ptr = boost::shared_ptr<Map<K, V>>;
86 
87  public:
88  static Ptr create();
89  };
90 
91  // template<typename V>
92  // class Map<Token, V> : public MapBase<Token,V>
93  // {
94  // public:
95  // typedef boost::shared_ptr<Map<Token, V> > Ptr;
96  //
97  // public:
98  // static Ptr create();
99  //
100  // public:
101  // void addMe(const Token& k, const V& v);
102  // Token add(const V& v);
103  // Token add(const Token& k, const V& v);
104  // };
105  //
106  // template<typename V>
107  // class Map<WeakToken, V> : public MapBase<WeakToken,V>
108  // {
109  // public:
110  // typedef boost::shared_ptr<Map<WeakToken, V> > Ptr;
111  //
112  // public:
113  // static Ptr create();
114  //
115  // public:
116  // void addMe(const WeakToken& k, const V& v);
117  // Token add(const V& v);
118  // Token add(const WeakToken& k, const V& v);
119  // };
120 
121 } // namespace Scroom::Bookkeeping
122 
Scroom::Bookkeeping::Detail::LValue
Definition: bookkeeping.hh:34
Scroom::Bookkeeping::Token::merge
void merge(Token &rhs) const
Definition: bookkeepingimpl.hh:195
Scroom::Utils::StuffList
std::list< Stuff > StuffList
Definition: stuff.hh:20
Scroom::Bookkeeping::MapBase::set
void set(const K &k, const V &v)
Definition: bookkeepingimpl.hh:313
Scroom::Bookkeeping::MapBase::keys
std::list< K > keys() const
Definition: bookkeepingimpl.hh:350
utilities.hh
Scroom::Bookkeeping::MapBase::map
MapType map
Definition: bookkeeping.hh:66
Scroom::Bookkeeping::Map
Definition: bookkeeping.hh:82
bookkeepingimpl.hh
Scroom::Bookkeeping::MapBase::reserve
Token reserve(const K &k)
Definition: bookkeepingimpl.hh:210
Scroom::Bookkeeping::MapBase::remove
void remove(const K &k)
Definition: bookkeepingimpl.hh:283
Scroom::Bookkeeping::MapBase::at
Detail::LValue< V > at(const K &k)
Definition: bookkeepingimpl.hh:295
Scroom::Utils::Base
Definition: utilities.hh:30
Scroom::Bookkeeping::Token::operator+
Detail::TokenAddition operator+(const Stuff &rhs) const
Definition: bookkeepingimpl.hh:199
Scroom::Bookkeeping::MapBase
Definition: bookkeeping.hh:59
stuff.hh
Scroom::Bookkeeping::MapBase::reReserve
Token reReserve(const K &k)
Definition: bookkeepingimpl.hh:228
Scroom::Utils::Stuff
boost::shared_ptr< void > Stuff
Definition: stuff.hh:18
Scroom::Bookkeeping::Detail::TokenAddition
Definition: bookkeepingimpl.hh:17
Scroom::Bookkeeping::Detail::TokenImpl
Definition: bookkeepingimpl.hh:50
Scroom::Bookkeeping::MapBase::mut
boost::mutex mut
Definition: bookkeeping.hh:67
Scroom::Bookkeeping::MapBase::values
std::list< V > values() const
Definition: bookkeepingimpl.hh:362
Scroom::Bookkeeping::Token::operator+=
Token const & operator+=(const Stuff &rhs) const
Definition: bookkeepingimpl.hh:201
Scroom::Bookkeeping::MapBase::get
V get(const K &k)
Definition: bookkeepingimpl.hh:332
Detail
Definition: async-deleter.hh:12
Scroom::Bookkeeping::Map< ObserverWeak, typename Registration::Ptr >::Ptr
boost::shared_ptr< Map< ObserverWeak, typename Registration::Ptr > > Ptr
Definition: bookkeeping.hh:85
Scroom::Bookkeeping::Token::Token
Token()
Definition: bookkeepingimpl.hh:174
Scroom::Bookkeeping::WeakToken
boost::weak_ptr< Detail::TokenImpl > WeakToken
Definition: bookkeeping.hh:56
Scroom::Bookkeeping::Token
Definition: bookkeeping.hh:37
Scroom::Bookkeeping
Definition: bookkeeping.hh:20
Scroom::Bookkeeping::MapBase< ObserverWeak, typename Registration::Ptr >::MapType
typename std::map< ObserverWeak, boost::weak_ptr< Detail::ValueType< typename Registration::Ptr > >> MapType
Definition: bookkeeping.hh:64
Scroom::Bookkeeping::Token::add
void add(const Stuff &s) const
Definition: bookkeepingimpl.hh:191
Scroom::Bookkeeping::Map::create
static Ptr create()
Definition: bookkeepingimpl.hh:424
Scroom::Bookkeeping::Detail::ValueType
Definition: bookkeeping.hh:31