mirror of
https://github.com/love2d/love.git
synced 2026-08-12 08:30:56 +02:00
Reference counting for love objects in 0.9.2 is now atomic (using SDL's atomic operation functions.)
This commit is contained in:
@@ -21,33 +21,31 @@
|
||||
// LOVE
|
||||
#include "Object.h"
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
namespace love
|
||||
{
|
||||
|
||||
Object::Object()
|
||||
: count(1)
|
||||
{
|
||||
count.value = 1;
|
||||
}
|
||||
|
||||
Object::~Object()
|
||||
{
|
||||
}
|
||||
|
||||
int Object::getReferenceCount() const
|
||||
int Object::getReferenceCount()
|
||||
{
|
||||
return count;
|
||||
return SDL_AtomicGet(&count);
|
||||
}
|
||||
|
||||
void Object::retain()
|
||||
{
|
||||
++count;
|
||||
SDL_AtomicIncRef(&count);
|
||||
}
|
||||
|
||||
void Object::release()
|
||||
{
|
||||
if (--count <= 0)
|
||||
if (SDL_AtomicDecRef(&count))
|
||||
delete this;
|
||||
}
|
||||
|
||||
|
||||
+9
-2
@@ -21,6 +21,13 @@
|
||||
#ifndef LOVE_OBJECT_H
|
||||
#define LOVE_OBJECT_H
|
||||
|
||||
/**
|
||||
* NOTE: the fact that an SDL header is included in such a widely used header
|
||||
* file is only temporary - in the LOVE 0.10+ codebase we use atomics from
|
||||
* C++11's standard library.
|
||||
**/
|
||||
#include <SDL_atomic.h>
|
||||
|
||||
namespace love
|
||||
{
|
||||
|
||||
@@ -50,7 +57,7 @@ public:
|
||||
* Gets the reference count of this Object.
|
||||
* @returns The reference count.
|
||||
**/
|
||||
int getReferenceCount() const;
|
||||
int getReferenceCount();
|
||||
|
||||
/**
|
||||
* Retains the Object, i.e. increases the
|
||||
@@ -155,7 +162,7 @@ public:
|
||||
private:
|
||||
|
||||
// The reference count.
|
||||
int count;
|
||||
SDL_atomic_t count;
|
||||
|
||||
}; // Object
|
||||
|
||||
|
||||
@@ -247,7 +247,7 @@ int w_isConvex(lua_State *L)
|
||||
}
|
||||
}
|
||||
|
||||
lua_pushboolean(L, Math::instance.isConvex(vertices));
|
||||
luax_pushboolean(L, Math::instance.isConvex(vertices));
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user