Initial clone in from local subversion server

This commit is contained in:
2011-05-26 02:24:33 +00:00
commit ccca81e04e
87 changed files with 20290 additions and 0 deletions

75
Common.cpp Executable file
View 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;
}