~swag/armagetronad/0.2.9-sty+ct+ap-fork

« back to all changes in this revision

Viewing changes to src/network/nObserver.h

  • Committer: luke-jr
  • Date: 2006-05-29 01:55:42 UTC
  • Revision ID: svn-v3-list-QlpoOTFBWSZTWZvbKhsAAAdRgAAQABK6798QIABURMgAAaeoNT1TxT1DQbKaeobXKiyAmlWT7Y5MkdJOtXDtB7w7DOGFBHiOBxaUIu7HQyyQSvxdyRThQkJvbKhs:7d95bf1e-0414-0410-9756-b78462a59f44:armagetronad%2Fbranches%2F0.2.8%2Farmagetronad:4612
Unify tags/branches of modules released together

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 
 
3
*************************************************************************
 
4
 
 
5
ArmageTron -- Just another Tron Lightcycle Game in 3D.
 
6
Copyright (C) 2000  Manuel Moos (manuel@moosnet.de)
 
7
 
 
8
**************************************************************************
 
9
 
 
10
This program is free software; you can redistribute it and/or
 
11
modify it under the terms of the GNU General Public License
 
12
as published by the Free Software Foundation; either version 2
 
13
of the License, or (at your option) any later version.
 
14
 
 
15
This program is distributed in the hope that it will be useful,
 
16
but WITHOUT ANY WARRANTY; without even the implied warranty of
 
17
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
18
GNU General Public License for more details.
 
19
 
 
20
You should have received a copy of the GNU General Public License
 
21
along with this program; if not, write to the Free Software
 
22
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
23
  
 
24
***************************************************************************
 
25
 
 
26
*/
 
27
 
 
28
#ifndef ArmageTron_OBSERVER_H
 
29
#define ArmageTron_OBSERVER_H
 
30
 
 
31
#include "tSafePTR.h"
 
32
 
 
33
class nNetObject;
 
34
 
 
35
// netobject observer
 
36
class nObserver: public tReferencable< nObserver >
 
37
{
 
38
    friend class tReferencable< nObserver >;
 
39
public:
 
40
    const nNetObject* GetNetObject()    const;  // returns the observed object
 
41
 
 
42
#ifdef DEBUG
 
43
    static void SetLastChecked( const nObserver* checked );
 
44
    static bool WasChecked( const nObserver* checked );
 
45
#endif
 
46
 
 
47
private:
 
48
    const nNetObject* object_;   // the observed object
 
49
 
 
50
    void SetObject( const nNetObject *);  // sets the observed object
 
51
 
 
52
    nObserver();
 
53
    ~nObserver();
 
54
 
 
55
    friend class nNetObject;
 
56
};
 
57
 
 
58
// observer pointer
 
59
template< class T >
 
60
class nObserverPtr
 
61
{
 
62
public:
 
63
    operator bool() const
 
64
    {
 
65
#ifdef DEBUG
 
66
        nObserver::SetLastChecked( this->observer_ );
 
67
#endif
 
68
 
 
69
        return ( bool( this->observer_ ) && this->observer_->GetNetObject() );
 
70
    }
 
71
 
 
72
    bool operator!() const
 
73
    {
 
74
        return !operator bool();
 
75
    }
 
76
 
 
77
    const T* GetPointer() const
 
78
    {
 
79
        if ( this->observer_ )
 
80
            return dynamic_cast< const T* >( observer_->GetNetObject() );
 
81
        else
 
82
            return NULL;
 
83
    }
 
84
 
 
85
    operator const T* () const
 
86
    {
 
87
        return this->GetPointer();
 
88
    }
 
89
 
 
90
    const T* operator->() const
 
91
    {
 
92
        const T* t = *this;
 
93
 
 
94
#ifdef DEBUG
 
95
        //              tASSERT( nObserver::WasChecked( this->observer_ ) );
 
96
#endif
 
97
 
 
98
        tASSERT(t);
 
99
 
 
100
        return t;
 
101
    }
 
102
 
 
103
    const T* operator*() const
 
104
    {
 
105
        const T* t = *this;
 
106
 
 
107
#ifdef DEBUG
 
108
        //              tASSERT( nObserver::WasChecked( this->observer_ ) );
 
109
#endif
 
110
 
 
111
        tASSERT(t);
 
112
 
 
113
        return t;
 
114
    }
 
115
 
 
116
    void SetObject ( const T* t)
 
117
    {
 
118
        if ( t == NULL )
 
119
            observer_ = NULL;
 
120
        else
 
121
            observer_ = &t->GetObserver();
 
122
    }
 
123
 
 
124
    nObserverPtr& operator = ( const T* t)
 
125
    {
 
126
        SetObject( t );
 
127
 
 
128
        return *this;
 
129
    }
 
130
 
 
131
    nObserverPtr( const T* t)
 
132
    {
 
133
        SetObject( t );
 
134
    }
 
135
 
 
136
    nObserverPtr()
 
137
    {
 
138
    }
 
139
private:
 
140
    tCONTROLLED_PTR( nObserver ) observer_;
 
141
};
 
142
 
 
143
#endif