Browse Source

Fix pyMatrix44 memory leak

Adam Johnson 10 years ago
parent
commit
133098c18e
  1. 1
      Sources/Plasma/FeatureLib/pfPython/Pch.h
  2. 4
      Sources/Plasma/FeatureLib/pfPython/pyMatrix44.cpp
  3. 5
      Sources/Plasma/FeatureLib/pfPython/pyMatrix44.h
  4. 9
      Sources/Plasma/FeatureLib/pfPython/pyMatrix44Glue.cpp

1
Sources/Plasma/FeatureLib/pfPython/Pch.h

@ -50,6 +50,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
// Standard Library Includes
#include <algorithm>
#include <array>
#include <exception>
#include <locale>
#include <string>

4
Sources/Plasma/FeatureLib/pfPython/pyMatrix44.cpp

@ -132,9 +132,9 @@ PyObject* pyMatrix44::GetRightAxis() const
return pyVector3::New(fMatrix.GetAxis(hsMatrix44::kRight));
}
float* pyMatrix44::GetData() const
mat44_t pyMatrix44::GetData() const
{
float *res = new float[4*4];
mat44_t res;
res[0] = fMatrix.fMap[0][0]; res[1] = fMatrix.fMap[0][1]; res[2] = fMatrix.fMap[0][2]; res[3] = fMatrix.fMap[0][3];
res[4] = fMatrix.fMap[1][0]; res[5] = fMatrix.fMap[1][1]; res[6] = fMatrix.fMap[1][2]; res[7] = fMatrix.fMap[1][3];
res[8] = fMatrix.fMap[2][0]; res[9] = fMatrix.fMap[2][1]; res[10] = fMatrix.fMap[2][2]; res[11] = fMatrix.fMap[2][3];

5
Sources/Plasma/FeatureLib/pfPython/pyMatrix44.h

@ -42,12 +42,14 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
#ifndef pyMatrix44_h_inc
#define pyMatrix44_h_inc
#include <array>
#include "hsMatrix44.h"
#include "pyGlueHelpers.h"
class pyPoint3;
class pyVector3;
typedef std::array<float, 4*4> mat44_t;
class pyMatrix44
{
@ -93,7 +95,8 @@ public:
PyObject* GetUpAxis() const; // returns pyVector3
PyObject* GetRightAxis() const; // returns pyVector3
float* GetData() const;
/** Returns a copy of the 4x4 matrix data */
mat44_t GetData() const;
void SetData(const float mat[]);
};

9
Sources/Plasma/FeatureLib/pfPython/pyMatrix44Glue.cpp

@ -41,6 +41,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
*==LICENSE==*/
#include <Python.h>
#include "pyGeometry3.h"
#include "pyMatrix44.h"
#pragma hdrstop
@ -302,21 +303,19 @@ PYTHON_METHOD_DEFINITION_NOARGS(ptMatrix44, right)
PYTHON_METHOD_DEFINITION_NOARGS(ptMatrix44, getData)
{
float *mat = self->fThis->GetData();
mat44_t mat = self->fThis->GetData();
PyObject *retVal = Py_BuildValue("(ffff)(ffff)(ffff)(ffff)",
PyObject* retVal = Py_BuildValue("(ffff)(ffff)(ffff)(ffff)",
mat[0], mat[1], mat[2], mat[3],
mat[4], mat[5], mat[6], mat[7],
mat[8], mat[9], mat[10], mat[11],
mat[12], mat[13], mat[14], mat[15]);
if (retVal == NULL)
{
if (!retVal) {
PyErr_SetString(PyExc_TypeError, "setData expects a 4x4 tuple of floats");
PYTHON_RETURN_ERROR;
}
delete mat;
return retVal;
}

Loading…
Cancel
Save