ManaPlus
resource.cpp
Go to the documentation of this file.
1 /*
2  * The ManaPlus Client
3  * Copyright (C) 2004-2009 The Mana World Development Team
4  * Copyright (C) 2009-2010 The Mana Developers
5  * Copyright (C) 2011-2019 The ManaPlus Developers
6  * Copyright (C) 2019-2021 Andrei Karas
7  *
8  * This file is part of The ManaPlus Client.
9  *
10  * This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * 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, see <http://www.gnu.org/licenses/>.
22  */
23 
24 #include "resources/resource.h"
25 
26 #include "logger.h"
27 
28 #include "utils/cast.h"
29 
31 
32 #include "debug.h"
33 
35 {
36 }
37 
39 {
40 #ifdef DEBUG_IMAGES
41  logger->log("before incRef for: %p", static_cast<void*>(this));
42  mRefCount++;
43  logger->log("after incRef: %p, %u", static_cast<void*>(this), mRefCount);
44 #else // DEBUG_IMAGES
45 
46  mRefCount++;
47 #endif // DEBUG_IMAGES
48 }
49 
51 {
52 #ifdef DEBUG_IMAGES
53  logger->log("before decRef for: %p", static_cast<void*>(this));
54 #endif // DEBUG_IMAGES
55 
56  // Reference may not already have reached zero
57  if (mRefCount == 0)
58  {
59  logger->log("Warning: mRefCount already zero for %s", mIdPath.c_str());
60  return;
61  }
62 
63  mRefCount--;
64 
65 #ifdef DEBUG_IMAGES
66  logger->log("after decRef: %p, %u", static_cast<void*>(this), mRefCount);
67 #endif // DEBUG_IMAGES
68 
69  if (mRefCount == 0 && !mNotCount)
70  {
71  // Warn the manager that this resource is no longer used.
73  }
74 }
75 
77 {
78  return CAST_S32(sizeof(Resource)) +
79  CAST_S32(mIdPath.size()) +
80  CAST_S32(mSource.size());
81 }
#define CAST_S32
Definition: cast.h:30
void log(const char *const log_text,...)
Definition: logger.cpp:269
~Resource()
Definition: resource.cpp:34
std::string mIdPath
Definition: resource.h:84
virtual void incRef()
Definition: resource.cpp:38
virtual void decRef()
Definition: resource.cpp:50
std::string mSource
Definition: resource.h:85
unsigned int mRefCount
Definition: resource.h:87
int calcMemoryLocal() const
Definition: resource.cpp:76
bool mNotCount
Definition: resource.h:89
Logger * logger
Definition: logger.cpp:89
void release(Resource *const res)