File: qwt_plot_dict.h

package info (click to toggle)
libqwt 4.2.0-2
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 9,856 kB
  • ctags: 5,512
  • sloc: cpp: 22,973; ansic: 244; makefile: 59
file content (78 lines) | stat: -rw-r--r-- 1,809 bytes parent folder | download | duplicates (5)
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
/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
 * Qwt Widget Library
 * Copyright (C) 1997   Josef Wilgen
 * Copyright (C) 2002   Uwe Rathmann
 * 
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the Qwt License, Version 1.0
 *****************************************************************************/

#ifndef QWT_PLOT_DICT
#define QWT_PLOT_DICT

#include "qwt_global.h"
#include "qwt_plot_classes.h"
#include <qintdict.h>

//
//   Template classes used by QwtPlot
//

template<class type>
class QWT_EXPORT QwtSeqDict : public QIntDict<type>
{
public:
    QwtSeqDict(): QIntDict<type>() {}
    void insert(long key, const type *item) 
    {
        uint prime;
        if ((uint(key) >= this->size()) && (prime = nextPrime(uint(key))))
            this->resize(prime);
        QIntDict<type>::insert(key, item);
    }
private:
    uint nextPrime(uint i) 
    {
        // first primes bigger than 1<<n for n = 2, 3, .., 15
        uint primes[] = 
        {
            17,
            37,
            67,
            131,
            257,
            521,
            1031,
            2053,
            4099,
            8209,
            16411,
            32771,
        };

        for (uint j=0; j<sizeof(primes); j++)
        {
            if (i<primes[j])
                return primes[j];
        }
        
        return 0;
    }
};

class QWT_EXPORT QwtCurveDict : public QwtSeqDict<QwtPlotCurve>
{
public:
    QwtCurveDict() { setAutoDelete(TRUE); }
};

class QWT_EXPORT QwtMarkerDict : public QwtSeqDict<QwtPlotMarker>
{
public:
    QwtMarkerDict() { setAutoDelete(TRUE); }
};

typedef QIntDictIterator<QwtPlotCurve> QwtPlotCurveIterator;
typedef QIntDictIterator<QwtPlotMarker> QwtPlotMarkerIterator;

#endif