source: nrEngine/src/ResourcePtr.cpp @ 35

Revision 35, 3.8 KB checked in by art, 13 years ago (diff)

Big changes in resource managment system. Interface functions were renamed.
Resource loading is now done throughthe resource and not through the loader.

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()->isResourceEmpty() || B->getResource()->isResourceEmpty()) 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::lockResource()
73        {
74                if (!isNull())
75                        if (!getResourceHolder()->lockResource())
76                                return RES_LOCK_STATE_STACK_IS_FULL;
77                else
78                        return RES_PTR_IS_NULL;
79                       
80                return OK;
81        }
82
83        //----------------------------------------------------------------------------------
84        Result IResourcePtr::unlockResource()
85        {
86                if (!isNull())
87                        getResourceHolder()->unlockResource();
88                else
89                        return RES_PTR_IS_NULL;
90               
91                return OK;
92        }
93       
94        //----------------------------------------------------------------------------------
95        Result IResourcePtr::lockEmpty()
96        {
97                if (!isNull())
98                        if (!getResourceHolder()->lockEmpty())
99                                return RES_LOCK_STATE_STACK_IS_FULL;
100                else
101                        return RES_PTR_IS_NULL;
102                       
103                return OK;
104        }
105
106        //----------------------------------------------------------------------------------
107        Result IResourcePtr::unlockEmpty()
108        {
109                if (!isNull())
110                        getResourceHolder()->unlockEmpty();
111                else
112                        return RES_PTR_IS_NULL;
113               
114                return OK;
115        }
116       
117        //----------------------------------------------------------------------------------
118        IResource* IResourcePtr::getBase() const{
119                NR_ASSERT(mHolder.get() != NULL && "Holder does not contain valid data");
120                return mHolder->getResource();
121        }
122
123};
124
Note: See TracBrowser for help on using the repository browser.