Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
Reference.h
Go to the documentation of this file.
1
/*
2
* This file is part of Project SkyFire https://www.projectskyfire.org.
3
* See LICENSE.md file for Copyright information
4
*/
5
6
#ifndef _REFERENCE_H
7
#define _REFERENCE_H
8
9
#include "
Dynamic/LinkedList.h
"
10
#include "
Errors.h
"
// for ASSERT
11
12
//=====================================================
13
14
template
<
class
TO,
class
FROM>
class
Reference
:
public
LinkedListElement
15
{
16
private
:
17
TO*
iRefTo
;
18
FROM*
iRefFrom
;
19
protected
:
20
// Tell our refTo (target) object that we have a link
21
virtual
void
targetObjectBuildLink
() = 0;
22
23
// Tell our refTo (taget) object, that the link is cut
24
virtual
void
targetObjectDestroyLink
() = 0;
25
26
// Tell our refFrom (source) object, that the link is cut (Target destroyed)
27
virtual
void
sourceObjectDestroyLink
() = 0;
28
public
:
29
Reference
() {
iRefTo
= NULL;
iRefFrom
= NULL; }
30
virtual
~Reference
() { }
31
32
// Create new link
33
void
link
(TO* toObj, FROM* fromObj)
34
{
35
ASSERT
(fromObj);
// fromObj MUST not be NULL
36
if
(
isValid
())
37
unlink
();
38
if
(toObj != NULL)
39
{
40
iRefTo
= toObj;
41
iRefFrom
= fromObj;
42
targetObjectBuildLink
();
43
}
44
}
45
46
// We don't need the reference anymore. Call comes from the refFrom object
47
// Tell our refTo object, that the link is cut
48
void
unlink
()
49
{
50
targetObjectDestroyLink
();
51
delink
();
52
iRefTo
= NULL;
53
iRefFrom
= NULL;
54
}
55
56
// Link is invalid due to destruction of referenced target object. Call comes from the refTo object
57
// Tell our refFrom object, that the link is cut
58
void
invalidate
()
// the iRefFrom MUST remain!!
59
{
60
sourceObjectDestroyLink
();
61
delink
();
62
iRefTo
= NULL;
63
}
64
65
bool
isValid
() const
// Only check the iRefTo
66
{
67
return
iRefTo
!= NULL;
68
}
69
70
Reference<TO, FROM>
*
next
() {
return
((
Reference<TO, FROM>
*)
LinkedListElement::next
()); }
71
Reference<TO, FROM>
const
*
next
()
const
{
return
((
Reference<TO, FROM>
const
*)
LinkedListElement::next
()); }
72
Reference<TO, FROM>
*
prev
() {
return
((
Reference<TO, FROM>
*)
LinkedListElement::prev
()); }
73
Reference<TO, FROM>
const
*
prev
()
const
{
return
((
Reference<TO, FROM>
const
*)
LinkedListElement::prev
()); }
74
75
Reference<TO, FROM>
*
nocheck_next
() {
return
((
Reference<TO, FROM>
*)
LinkedListElement::nocheck_next
()); }
76
Reference<TO, FROM>
const
*
nocheck_next
()
const
{
return
((
Reference<TO, FROM>
const
*)
LinkedListElement::nocheck_next
()); }
77
Reference<TO, FROM>
*
nocheck_prev
() {
return
((
Reference<TO, FROM>
*)
LinkedListElement::nocheck_prev
()); }
78
Reference<TO, FROM>
const
*
nocheck_prev
()
const
{
return
((
Reference<TO, FROM>
const
*)
LinkedListElement::nocheck_prev
()); }
79
80
TO*
operator ->
()
const
{
return
iRefTo
; }
81
TO*
getTarget
()
const
{
return
iRefTo
; }
82
83
FROM*
GetSource
()
const
{
return
iRefFrom
; }
84
private
:
85
Reference
(
Reference
const
&);
86
Reference
&
operator=
(
Reference
const
&);
87
};
88
89
//=====================================================
90
#endif
Errors.h
ASSERT
#define ASSERT
Definition
Errors.h:29
LinkedList.h
LinkedListElement::nocheck_next
LinkedListElement * nocheck_next()
Definition
LinkedList.h:35
LinkedListElement::delink
void delink()
Definition
LinkedList.h:40
LinkedListElement::LinkedListElement
LinkedListElement()
Definition
LinkedList.h:23
LinkedListElement::prev
LinkedListElement * prev()
Definition
LinkedList.h:32
LinkedListElement::nocheck_prev
LinkedListElement * nocheck_prev()
Definition
LinkedList.h:37
LinkedListElement::next
LinkedListElement * next()
Definition
LinkedList.h:30
Reference::getTarget
TO * getTarget() const
Definition
Reference.h:81
Reference::unlink
void unlink()
Definition
Reference.h:48
Reference::prev
Reference< TO, FROM > const * prev() const
Definition
Reference.h:73
Reference::prev
Reference< TO, FROM > * prev()
Definition
Reference.h:72
Reference::next
Reference< TO, FROM > const * next() const
Definition
Reference.h:71
Reference::nocheck_next
Reference< TO, FROM > const * nocheck_next() const
Definition
Reference.h:76
Reference::targetObjectDestroyLink
virtual void targetObjectDestroyLink()=0
Reference::~Reference
virtual ~Reference()
Definition
Reference.h:30
Reference::sourceObjectDestroyLink
virtual void sourceObjectDestroyLink()=0
Reference::link
void link(TO *toObj, FROM *fromObj)
Definition
Reference.h:33
Reference::isValid
bool isValid() const
Definition
Reference.h:65
Reference::nocheck_prev
Reference< TO, FROM > * nocheck_prev()
Definition
Reference.h:77
Reference::nocheck_next
Reference< TO, FROM > * nocheck_next()
Definition
Reference.h:75
Reference::GetSource
FROM * GetSource() const
Definition
Reference.h:83
Reference::next
Reference< TO, FROM > * next()
Definition
Reference.h:70
Reference::targetObjectBuildLink
virtual void targetObjectBuildLink()=0
Reference::operator=
Reference & operator=(Reference const &)
Reference::invalidate
void invalidate()
Definition
Reference.h:58
Reference::iRefTo
TO * iRefTo
Definition
Reference.h:17
Reference::Reference
Reference()
Definition
Reference.h:29
Reference::Reference
Reference(Reference const &)
Reference::operator->
TO * operator->() const
Definition
Reference.h:80
Reference::iRefFrom
FROM * iRefFrom
Definition
Reference.h:18
Reference::nocheck_prev
Reference< TO, FROM > const * nocheck_prev() const
Definition
Reference.h:78
src
server
shared
Dynamic
LinkedReference
Reference.h
Generated on
for Project SkyFire Core by
1.17.0