source: nrEngine/src/ResourceHolder.cpp @ 30

Revision 30, 3.6 KB checked in by art, 12 years ago (diff)

::std wurde durch std ueberall ersetzt!

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 "ResourceHolder.h"
18#include "Exception.h"
19#include "ResourceSystem.h"
20#include "Log.h"
21
22namespace nrEngine{
23       
24        //----------------------------------------------------------------------------------
25        ResourceHolder::~ResourceHolder()
26        {
27                mResource = NULL;
28        }
29               
30        //----------------------------------------------------------------------------------
31        ResourceHolder::ResourceHolder(IResource* res, IResource* empty):
32                        mResource(res), mEmptyResource(empty), countAccess(0)
33        {
34                NR_ASSERT(res != NULL && empty != NULL);
35                       
36                // empty the lock stack
37                for (int32 i=0; i < NR_RESOURCE_LOCK_STACK; i++)
38                        mLockStack[i] = false;
39                       
40                mLockStackTop = 0;
41       
42        }
43               
44        //----------------------------------------------------------------------------------
45        bool ResourceHolder::lockPure(){
46
47                // check whenever we've got the maximum, so do not lock
48                if (mLockStackTop >= NR_RESOURCE_LOCK_STACK){
49                        if (mResource){
50                                NR_Log(Log::LOG_ENGINE, Log::LL_DEBUG, 
51                                        "Can not lock %s anymore. Lock state stack is full!", mResource->getResName().c_str()); 
52                        }else{
53                                NR_Log(Log::LOG_ENGINE, Log::LL_DEBUG, 
54                                        "Can not lock anymore. Lock state stack is full!");
55                        }
56                       
57                        return false;
58                }else{         
59                        // lock it
60                        mLockStack[mLockStackTop++] = true;
61                }
62               
63                return true;
64        }       
65               
66        //----------------------------------------------------------------------------------
67        void ResourceHolder::unlockPure(){
68       
69                // check whenever we've got right top position
70                if (mLockStackTop > 0){
71                        // unlock it
72                        mLockStack[--mLockStackTop] = false;
73                }
74        }
75               
76        //----------------------------------------------------------------------------------
77        void ResourceHolder::resetRes(IResource* res){
78                mResource = (res);
79        }
80       
81       
82        //----------------------------------------------------------------------------------
83        void ResourceHolder::setEmptyResource(IResource* res){
84                mEmptyResource = (res);
85        }
86       
87        //----------------------------------------------------------------------------------
88        /*void ResourceHolder::setEmptyResource(SharedPtr<IResource> res){
89                mEmptyResource = res;
90        }*/
91
92       
93        //----------------------------------------------------------------------------------
94        IResource* ResourceHolder::getEmpty(){
95                return mEmptyResource;
96        }
97       
98               
99        //----------------------------------------------------------------------------------
100        IResource* ResourceHolder::getResource(){
101               
102                // touch the resource
103                touchResource();
104
105                // get resource only if it is exists and loaded or if it exists and locked
106                if (mResource!=NULL){
107                        if (mResource->isResLoaded() || isLocked()){
108                                return mResource;
109                        }
110                }
111
112                NR_ASSERT(getEmpty() != NULL && "Empty resource must be defined");
113
114                return getEmpty();
115        }
116
117};
118
Note: See TracBrowser for help on using the repository browser.