~ubuntu-branches/ubuntu/oneiric/psi/oneiric

« back to all changes in this revision

Viewing changes to cutestuff/legacy/safedelete.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Jan Niehusmann
  • Date: 2009-09-25 17:49:51 UTC
  • mfrom: (6.1.3 sid)
  • Revision ID: james.westby@ubuntu.com-20090925174951-lvm7kdap82o8xhn3
Tags: 0.13-1
* Updated to upstream version 0.13
* Set Standards-Version to 3.8.3

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#include "safedelete.h"
2
 
 
3
 
#include <qtimer.h>
4
 
 
5
 
//----------------------------------------------------------------------------
6
 
// SafeDelete
7
 
//----------------------------------------------------------------------------
8
 
SafeDelete::SafeDelete()
9
 
{
10
 
        lock = 0;
11
 
}
12
 
 
13
 
SafeDelete::~SafeDelete()
14
 
{
15
 
        if(lock)
16
 
                lock->dying();
17
 
}
18
 
 
19
 
void SafeDelete::deleteLater(QObject *o)
20
 
{
21
 
        if(!lock)
22
 
                deleteSingle(o);
23
 
        else
24
 
                list.append(o);
25
 
}
26
 
 
27
 
void SafeDelete::unlock()
28
 
{
29
 
        lock = 0;
30
 
        deleteAll();
31
 
}
32
 
 
33
 
void SafeDelete::deleteAll()
34
 
{
35
 
        if(list.isEmpty())
36
 
                return;
37
 
 
38
 
        QObjectList::Iterator it = list.begin();
39
 
        for(QObjectList::Iterator it = list.begin(); it != list.end(); ++it)
40
 
                deleteSingle(*it);
41
 
        list.clear();
42
 
}
43
 
 
44
 
void SafeDelete::deleteSingle(QObject *o)
45
 
{
46
 
        o->deleteLater();
47
 
}
48
 
 
49
 
//----------------------------------------------------------------------------
50
 
// SafeDeleteLock
51
 
//----------------------------------------------------------------------------
52
 
SafeDeleteLock::SafeDeleteLock(SafeDelete *sd)
53
 
{
54
 
        own = false;
55
 
        if(!sd->lock) {
56
 
                _sd = sd;
57
 
                _sd->lock = this;
58
 
        }
59
 
        else
60
 
                _sd = 0;
61
 
}
62
 
 
63
 
SafeDeleteLock::~SafeDeleteLock()
64
 
{
65
 
        if(_sd) {
66
 
                _sd->unlock();
67
 
                if(own)
68
 
                        delete _sd;
69
 
        }
70
 
}
71
 
 
72
 
void SafeDeleteLock::dying()
73
 
{
74
 
        _sd = new SafeDelete(*_sd);
75
 
        own = true;
76
 
}
77
 
 
78
 
//----------------------------------------------------------------------------
79
 
// SafeDeleteLater
80
 
//----------------------------------------------------------------------------
81
 
SafeDeleteLater *SafeDeleteLater::self = 0;
82
 
 
83
 
SafeDeleteLater *SafeDeleteLater::ensureExists()
84
 
{
85
 
        if(!self)
86
 
                new SafeDeleteLater();
87
 
        return self;
88
 
}
89
 
 
90
 
SafeDeleteLater::SafeDeleteLater()
91
 
{
92
 
        self = this;
93
 
        QTimer::singleShot(0, this, SLOT(explode()));
94
 
}
95
 
 
96
 
SafeDeleteLater::~SafeDeleteLater()
97
 
{
98
 
        while (!list.isEmpty())
99
 
                delete list.takeFirst();
100
 
        self = 0;
101
 
}
102
 
 
103
 
void SafeDeleteLater::deleteItLater(QObject *o)
104
 
{
105
 
        list.append(o);
106
 
}
107
 
 
108
 
void SafeDeleteLater::explode()
109
 
{
110
 
        delete this;
111
 
}