Initial clone in from local subversion server
This commit is contained in:
75
Common.cpp
Executable file
75
Common.cpp
Executable file
@@ -0,0 +1,75 @@
|
||||
#include "Common.h"
|
||||
#include <iostream>
|
||||
|
||||
SharedCanvas2D::SharedCanvas2D()
|
||||
{
|
||||
this->canvas = NULL;
|
||||
}
|
||||
|
||||
SharedCanvas2D::~SharedCanvas2D()
|
||||
{
|
||||
this->releaseCanvas();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Return a pointer to the SDL_Surface pointer held by this shared canvas
|
||||
* @return SDL_Surface *
|
||||
*/
|
||||
SDL_Surface *SharedCanvas2D::getCanvas()
|
||||
{
|
||||
return this->canvas;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set the canvas pointer to the given object, and increment its refcount
|
||||
* @param obj A SharedCanvas2D object whose surface you want to share
|
||||
* @return 0 on success, 1 on failure
|
||||
*/
|
||||
int SharedCanvas2D::shareCanvas(SharedCanvas2D *obj)
|
||||
{
|
||||
if ( obj == NULL || this->canvas != NULL || obj->getCanvas() == NULL ) {
|
||||
std::cerr << "Unable to share canvas from object " << obj << "\n";
|
||||
return 1;
|
||||
}
|
||||
this->canvas = obj->getCanvas();
|
||||
this->canvas->refcount += 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set the canvas pointer to the given object, and increment its refcount
|
||||
* @param obj A SDL_Surface pointer who you want to share
|
||||
* @return 0 on success, 1 on failure
|
||||
*/
|
||||
int SharedCanvas2D::shareCanvas(SDL_Surface *obj)
|
||||
{
|
||||
if ( obj == NULL ) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
this->canvas = obj;
|
||||
obj->refcount += 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @fn SharedCanvas2D::releaseCanvas
|
||||
* @brief Decrement the refcount of the canvas we're currently sharing, and release it
|
||||
* @return 0 on success, 1 on failure
|
||||
*/
|
||||
int SharedCanvas2D::releaseCanvas()
|
||||
{
|
||||
if ( this->canvas == NULL ) {
|
||||
return 0;
|
||||
}
|
||||
if ( this->canvas->refcount >= 2 ) {
|
||||
this->canvas->refcount -= 1;
|
||||
this->canvas = NULL;
|
||||
return 1;
|
||||
} else if ( this->canvas->refcount == 1 ) {
|
||||
SDL_FreeSurface(this->canvas);
|
||||
return 1;
|
||||
}
|
||||
// do nothing if canvas refcount == 0 (thou shalt not double free)
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user