source: nrEngine/src/ResourcePtr.cpp @ 1

Revision 1, 3.5 KB checked in by art, 13 years ago (diff)
Line 
1/***************************************************************************
2 *                                                                         *
3 *   (c) Art Tevs, MPI Informatik Saarbruecken                             *
4 *       mailto: <tevs@mpi-sb.mpg.de>                                      *
5 *                                                                         *
6 *   This program is free software; you can redistribute it and/or modify  *
7 *   it under the terms of the GNU General Public License as published by  *
8 *   the Free Software Foundation; either version 2 of the License, or     *
9 *   (at your option) any later version.                                   *
10 *                                                                         *
11 ***************************************************************************/
12
13
14//----------------------------------------------------------------------------------
15// Includes
16//----------------------------------------------------------------------------------
17#include "ResourcePtr.h"
18#include "Exception.h"
19#include "ResourceSystem.h"
20
21namespace nrEngine{
22       
23        //----------------------------------------------------------------------------------
24        IResourcePtr::IResourcePtr(const IResourcePtr& resPtr){
25                mHolder = resPtr.getResourceHolder();
26        }
27
28        //----------------------------------------------------------------------------------
29        bool IResourcePtr::operator==(IResourcePtr& res) const{
30                // check whenver given one is null
31                if (res.isNull()){
32                        if (isNull())  return true;
33                        if (!isNull()) return false;
34                }else{
35                        if (isNull())  return false;           
36                }
37               
38                // check for holders
39                ResourceHolder* A = getResourceHolder().get();
40                ResourceHolder* B = res.getResourceHolder().get();
41                if (A == B) return true;
42               
43                // At this point, both holders cannot be NULL
44                if (A->getResource()->isResEmpty() || B->getResource()->isResEmpty()) return false;
45                if (A->getResource() == B->getResource()) return true;
46               
47                return false;
48        }
49
50       
51        //----------------------------------------------------------------------------------
52        bool IResourcePtr::operator==(const IResource* p) const{
53               
54                if (isNull()){
55                        return (p == NULL);
56                }
57               
58                return (getResourceHolder()->getResource() == p);
59        }
60               
61        //----------------------------------------------------------------------------------
62        bool IResourcePtr::operator!=(IResourcePtr& res) const{
63                        return !operator==(res);
64        }
65
66        //----------------------------------------------------------------------------------
67        bool IResourcePtr::operator!=(const IResource* res) const{
68                        return !operator==(res);
69        }
70       
71        //----------------------------------------------------------------------------------
72        Result IResourcePtr::lockPure(){
73                if (!isNull())
74                        if (!getResourceHolder()->lockPure())
75                                return RES_LOCK_STATE_STACK_IS_FULL;
76                else
77                        return RES_PTR_IS_NULL;
78                       
79                return OK;
80        }
81
82        //----------------------------------------------------------------------------------
83        Result IResourcePtr::unlockPure(){
84                if (!isNull())
85                        getResourceHolder()->unlockPure();
86                else
87                        return RES_PTR_IS_NULL;
88               
89                return OK;
90        }
91       
92        //----------------------------------------------------------------------------------
93        IResource* IResourcePtr::getBase() const{
94                NR_ASSERT(mHolder.get() != NULL && "Holder does not contain valid data");
95                return mHolder->getResource();
96        }
97
98        //----------------------------------------------------------------------------------
99        /*IResource& IResourcePtr::operator*() const{
100                NR_ASSERT(mHolder.get() != NULL && "Holder does not contain valid data");
101                return *mHolder->getResource();
102        }*/
103
104               
105};
106
Note: See TracBrowser for help on using the repository browser.