GameLogic - Merge with util fixed
This commit is contained in:
commit
42fa756866
|
@ -1,73 +0,0 @@
|
||||||
/////////////////////////////////////////////////////////////////////
|
|
||||||
// Created by [Dennis Andersen] [2013]
|
|
||||||
/////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
#include "..\OResource.h"
|
|
||||||
#include "..\..\Utilities.h"
|
|
||||||
|
|
||||||
#include <fstream>
|
|
||||||
|
|
||||||
using namespace Oyster::Resource;
|
|
||||||
|
|
||||||
|
|
||||||
OResource* OResource::CustomLoader(const wchar_t filename[], CustomLoadFunction fnc)
|
|
||||||
{
|
|
||||||
<<<<<<< HEAD
|
|
||||||
CustomData &data = fnc(filename);
|
|
||||||
|
|
||||||
if(!data.loadedData) return 0;
|
|
||||||
if(!data.resourceUnloadFnc) return 0;
|
|
||||||
OHRESOURCE n = (OHRESOURCE)data.loadedData;
|
|
||||||
OResource *resource = new OResource(n, ResourceType_UNKNOWN, 0, 0, filename);
|
|
||||||
|
|
||||||
resource->customData = new CustomResourceData();
|
|
||||||
resource->customData->unloadingFunction = data.resourceUnloadFnc;
|
|
||||||
//resource->resourceData = (OHRESOURCE)data.loadedData;
|
|
||||||
=======
|
|
||||||
CustomData data;
|
|
||||||
memset(&data, 0, sizeof(CustomData));
|
|
||||||
|
|
||||||
fnc(filename, data);
|
|
||||||
|
|
||||||
if(!data.loadedData)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if(!data.resourceUnloadFnc)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/** For some wierd reason that i don't understand when trying to send data.loadedData directly as a
|
|
||||||
* parameter to OResource constructor, the value is changed when it arrives in the constructor.
|
|
||||||
* Doing it like this, storing in a temporary variable, the value stays correct. (What the fuck! I must be overloking something...)*/
|
|
||||||
//OHRESOURCE temp = data.loadedData;
|
|
||||||
OResource *resource = new OResource(data.loadedData, ResourceType_UNKNOWN, 0, 0, filename);
|
|
||||||
|
|
||||||
resource->customData = new CustomResourceData();
|
|
||||||
resource->customData->unloadingFunction = data.resourceUnloadFnc;
|
|
||||||
>>>>>>> d08644e8e1ecc56f4d9dfa6a9aa33df94d9e655a
|
|
||||||
resource->customData->loadingFunction = fnc;
|
|
||||||
|
|
||||||
return resource;
|
|
||||||
}
|
|
||||||
void OResource::CustomUnloader()
|
|
||||||
{
|
|
||||||
this->customData->unloadingFunction(this->resourceData);
|
|
||||||
}
|
|
||||||
OResource* OResource::CustomReloader()
|
|
||||||
{
|
|
||||||
CustomUnloader();
|
|
||||||
|
|
||||||
CustomData data;
|
|
||||||
memset(&data, 0, sizeof(CustomData));
|
|
||||||
|
|
||||||
this->customData->loadingFunction(this->resourceFilename.c_str(), data);
|
|
||||||
this->resourceData = (OHRESOURCE)data.loadedData;
|
|
||||||
|
|
||||||
if(data.resourceUnloadFnc)
|
|
||||||
{
|
|
||||||
this->customData->unloadingFunction = data.resourceUnloadFnc;
|
|
||||||
}
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
|
@ -208,6 +208,12 @@ namespace Utility
|
||||||
template<typename T> SmartPointer<T>::SmartPointer()
|
template<typename T> SmartPointer<T>::SmartPointer()
|
||||||
:_rc(0), _ptr(0)
|
:_rc(0), _ptr(0)
|
||||||
{ }
|
{ }
|
||||||
|
template<typename T> SmartPointer<T>::SmartPointer(UniquePointer<T>& p)
|
||||||
|
:_ptr(p.Release())
|
||||||
|
{
|
||||||
|
this->_rc = new ReferenceCount();
|
||||||
|
this->_rc->Incref();
|
||||||
|
}
|
||||||
template<typename T> SmartPointer<T>::SmartPointer(T* p)
|
template<typename T> SmartPointer<T>::SmartPointer(T* p)
|
||||||
:_ptr(p)
|
:_ptr(p)
|
||||||
{
|
{
|
||||||
|
@ -222,10 +228,7 @@ namespace Utility
|
||||||
}
|
}
|
||||||
template<typename T> SmartPointer<T>::~SmartPointer()
|
template<typename T> SmartPointer<T>::~SmartPointer()
|
||||||
{
|
{
|
||||||
if (this->_rc && this->_rc->Decref() == 0)
|
this->Release();
|
||||||
{
|
|
||||||
Destroy();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
template<typename T> SmartPointer<T>& SmartPointer<T>::operator= (const SmartPointer<T>& p)
|
template<typename T> SmartPointer<T>& SmartPointer<T>::operator= (const SmartPointer<T>& p)
|
||||||
{
|
{
|
||||||
|
@ -244,6 +247,30 @@ namespace Utility
|
||||||
}
|
}
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
template<typename T> SmartPointer<T>& SmartPointer<T>::operator= (UniquePointer<T>& p)
|
||||||
|
{
|
||||||
|
//Last to go?
|
||||||
|
if(this->_rc)
|
||||||
|
{
|
||||||
|
if(this->_rc->Decref() == 0)
|
||||||
|
{
|
||||||
|
//Call child specific
|
||||||
|
Destroy();
|
||||||
|
this->_rc = new ReferenceCount();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(p) this->_rc = new ReferenceCount();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(this->_rc)
|
||||||
|
this->_rc->Incref();
|
||||||
|
|
||||||
|
this->_ptr = p.Release();
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
template<typename T> SmartPointer<T>& SmartPointer<T>::operator= (T* p)
|
template<typename T> SmartPointer<T>& SmartPointer<T>::operator= (T* p)
|
||||||
{
|
{
|
||||||
if (this->_ptr != p)
|
if (this->_ptr != p)
|
||||||
|
@ -266,27 +293,51 @@ namespace Utility
|
||||||
}
|
}
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
template<typename T> inline bool SmartPointer<T>::operator== (const SmartPointer<T>& d)
|
template<typename T> inline bool SmartPointer<T>::operator== (const SmartPointer<T>& d) const
|
||||||
{
|
{
|
||||||
return d._ptr == this->_ptr;
|
return d._ptr == this->_ptr;
|
||||||
}
|
}
|
||||||
template<typename T> inline bool SmartPointer<T>::operator== (const T& p)
|
template<typename T> inline bool SmartPointer<T>::operator== (const T& p) const
|
||||||
{
|
{
|
||||||
return &p == this->_ptr;
|
return &p == this->_ptr;
|
||||||
}
|
}
|
||||||
|
template<typename T> inline bool SmartPointer<T>::operator!= (const SmartPointer<T>& d) const
|
||||||
|
{
|
||||||
|
return d._ptr != this->_ptr;
|
||||||
|
}
|
||||||
|
template<typename T> inline bool SmartPointer<T>::operator!= (const T& p) const
|
||||||
|
{
|
||||||
|
return &p != this->_ptr;
|
||||||
|
}
|
||||||
template<typename T> inline T& SmartPointer<T>::operator* ()
|
template<typename T> inline T& SmartPointer<T>::operator* ()
|
||||||
{
|
{
|
||||||
return *this->_ptr;
|
return *this->_ptr;
|
||||||
}
|
}
|
||||||
|
template<typename T> inline const T& SmartPointer<T>::operator* () const
|
||||||
|
{
|
||||||
|
return *this->_ptr;
|
||||||
|
}
|
||||||
template<typename T> inline T* SmartPointer<T>::operator-> ()
|
template<typename T> inline T* SmartPointer<T>::operator-> ()
|
||||||
{
|
{
|
||||||
return this->_ptr;
|
return this->_ptr;
|
||||||
}
|
}
|
||||||
template<typename T> inline SmartPointer<T>::operator T* ()
|
template<typename T> inline const T* SmartPointer<T>::operator-> () const
|
||||||
{
|
{
|
||||||
return this->_ptr;
|
return this->_ptr;
|
||||||
}
|
}
|
||||||
template<typename T> inline SmartPointer<T>::operator bool()
|
template<typename T> inline SmartPointer<T>::operator T* () const
|
||||||
|
{
|
||||||
|
return this->_ptr;
|
||||||
|
}
|
||||||
|
template<typename T> inline SmartPointer<T>::operator const T* () const
|
||||||
|
{
|
||||||
|
return this->_ptr;
|
||||||
|
}
|
||||||
|
template<typename T> inline SmartPointer<T>::operator T& () const
|
||||||
|
{
|
||||||
|
return *this->_ptr;
|
||||||
|
}
|
||||||
|
template<typename T> inline SmartPointer<T>::operator bool() const
|
||||||
{
|
{
|
||||||
return (this->_ptr != 0);
|
return (this->_ptr != 0);
|
||||||
}
|
}
|
||||||
|
@ -294,7 +345,21 @@ namespace Utility
|
||||||
{
|
{
|
||||||
return this->_ptr;
|
return this->_ptr;
|
||||||
}
|
}
|
||||||
template<typename T> inline bool SmartPointer<T>::IsValid()
|
template<typename T> inline T* SmartPointer<T>::Get() const
|
||||||
|
{
|
||||||
|
return this->_ptr;
|
||||||
|
}
|
||||||
|
template<typename T> int SmartPointer<T>::Release()
|
||||||
|
{
|
||||||
|
int returnVal = 0;
|
||||||
|
|
||||||
|
if(this->_rc && ((returnVal = this->_rc->Decref()) == 0))
|
||||||
|
{
|
||||||
|
Destroy();
|
||||||
|
}
|
||||||
|
return returnVal;
|
||||||
|
}
|
||||||
|
template<typename T> inline bool SmartPointer<T>::IsValid() const
|
||||||
{
|
{
|
||||||
return (this->_ptr != NULL) ? true : false;
|
return (this->_ptr != NULL) ? true : false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -205,27 +205,41 @@ namespace Utility
|
||||||
|
|
||||||
public:
|
public:
|
||||||
SmartPointer();
|
SmartPointer();
|
||||||
|
SmartPointer(UniquePointer<T>& up);
|
||||||
SmartPointer(T* p);
|
SmartPointer(T* p);
|
||||||
SmartPointer(const SmartPointer& d);
|
SmartPointer(const SmartPointer& d);
|
||||||
virtual~SmartPointer();
|
virtual~SmartPointer();
|
||||||
SmartPointer<T>& operator= (const SmartPointer<T>& p);
|
SmartPointer<T>& operator= (const SmartPointer<T>& p);
|
||||||
|
SmartPointer<T>& operator= (UniquePointer<T>& p);
|
||||||
SmartPointer<T>& operator= (T* p);
|
SmartPointer<T>& operator= (T* p);
|
||||||
bool operator== (const SmartPointer<T>& d);
|
bool operator== (const SmartPointer<T>& d) const;
|
||||||
bool operator== (const T& p);
|
bool operator== (const T& p) const;
|
||||||
|
bool operator!= (const SmartPointer<T>& d) const;
|
||||||
|
bool operator!= (const T& p) const;
|
||||||
T& operator* ();
|
T& operator* ();
|
||||||
|
const T& operator* () const;
|
||||||
T* operator-> ();
|
T* operator-> ();
|
||||||
operator T* ();
|
const T* operator-> () const;
|
||||||
operator bool();
|
operator T* () const;
|
||||||
|
operator const T* () const;
|
||||||
|
operator T& () const;
|
||||||
|
operator bool() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the connected pointer
|
* Returns the connected pointer
|
||||||
*/
|
*/
|
||||||
T* Get();
|
T* Get();
|
||||||
|
T* Get() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Releases one reference of the pointer and set value to null, making the current SmartPointer invalid.
|
||||||
|
*/
|
||||||
|
int Release();
|
||||||
|
|
||||||
/** Checks if the pointer is valid (not NULL)
|
/** Checks if the pointer is valid (not NULL)
|
||||||
* Returns true for valid, else false.
|
* Returns true for valid, else false.
|
||||||
*/
|
*/
|
||||||
bool IsValid();
|
bool IsValid() const;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue