src/misc/documentPointer.cc

changeset 655
b376645315ab
equal deleted inserted replaced
654:a74f2ff353b8 655:b376645315ab
1 /*
2 * LDForge: LDraw parts authoring CAD
3 * Copyright (C) 2013, 2014 Santeri Piippo
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19 #include "documentPointer.h"
20 #include "../ldDocument.h"
21 #include "../miscallenous.h"
22
23 LDDocumentPointer::LDDocumentPointer() : m_pointer (null) {}
24
25 // =============================================================================
26 //
27 LDDocumentPointer::LDDocumentPointer (LDDocument* ptr) :
28 m_pointer (ptr)
29 {
30 addReference ();
31 }
32
33 // =============================================================================
34 //
35 LDDocumentPointer::LDDocumentPointer (const LDDocumentPointer& other) :
36 m_pointer (other.pointer())
37 {
38 addReference ();
39 }
40
41 // =============================================================================
42 //
43 LDDocumentPointer::~LDDocumentPointer()
44 {
45 removeReference();
46 }
47
48 // =============================================================================
49 //
50 void LDDocumentPointer::addReference()
51 {
52 if (pointer() != null)
53 pointer()->addReference (this);
54 }
55
56 // =============================================================================
57 //
58 void LDDocumentPointer::removeReference()
59 {
60 if (pointer() != null)
61 pointer()->removeReference (this);
62 }
63
64 // =============================================================================
65 //
66 LDDocumentPointer& LDDocumentPointer::operator= (LDDocument* ptr)
67 {
68 if (ptr != pointer())
69 {
70 removeReference();
71 setPointer (ptr);
72 addReference();
73 }
74
75 return *this;
76 }

mercurial