File: cache.h

package info (click to toggle)
musescore 2.0.3%2Bdfsg1-2
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 202,532 kB
  • ctags: 58,769
  • sloc: cpp: 257,595; xml: 172,226; ansic: 139,931; python: 6,565; sh: 6,383; perl: 423; makefile: 290; awk: 142; pascal: 67; sed: 3
file content (86 lines) | stat: -rw-r--r-- 2,541 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86

#ifndef __CACHE_H__
#define __CACHE_H__

//---------------------------------------------------------
//   BaseCache
//---------------------------------------------------------

template<typename T> class BaseCache: public QCache<quint64, T> {
            bool _enabled;

      public:
            //! constructor
            BaseCache(int maxCost) : QCache<quint64, T>(maxCost), _enabled(true) {}
            explicit BaseCache() : _enabled(true) { }
            ~BaseCache() {}

            //! enable
            void setEnabled(bool value) {
                  _enabled = value;
                  }

            //! enable state
            bool enabled() const {
                  return _enabled;
                  }

            //! access
            T* object(const quint64& key) {
                  return _enabled ? QCache<quint64, T>::object(key) : 0;
                  }

            //! max cost
            void setMaxCost( int cost ) {
                  if ( cost <= 0 ) {
                        QCache<quint64, T>::clear();
                        QCache<quint64, T>::setMaxCost(1);
                        setEnabled( false );
                        }
                  else {
                        setEnabled(true);
                        QCache<quint64, T>::setMaxCost(cost);
                        }
                  }
      };

//---------------------------------------------------------
//   Cache
//---------------------------------------------------------

template<typename T> class Cache {
      public:
            Cache() {}
            ~Cache() {}

            //! return cache matching a given key
            //typedef QCache<quint64, T> Value;
            typedef BaseCache<T> Value;

            Value* get(const QColor& color) {
                  quint64 key = (quint64(color.rgba()) << 32);
                  Value* cache = data_.object(key);
                  if (!cache) {
                        cache = new Value( data_.maxCost() );
                        data_.insert(key, cache);
                        }
                  return cache;
                  }

            void clear() {
                  data_.clear();
                  }

            //! max cache size
            void setMaxCacheSize(int value) {
                  data_.setMaxCost(value);
                  foreach(quint64 key, data_.keys()) {
                        data_.object(key)->setMaxCost(value);
                        }
                  }
      private:
            BaseCache<Value> data_;
      };

#endif