[GB.GSL]
* NEW: Added gsl_complex development files. git-svn-id: svn://localhost/gambas/trunk@4455 867c0c6c-44f3-4631-809d-bfa615b0a4ec
This commit is contained in:
parent
7b191a1c5d
commit
b624cddc67
3 changed files with 186 additions and 2 deletions
130
gb.gsl/src/c_complex.c
Normal file
130
gb.gsl/src/c_complex.c
Normal file
|
@ -0,0 +1,130 @@
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
gsl.c
|
||||||
|
|
||||||
|
gb.gsl component
|
||||||
|
|
||||||
|
(c) 2012 Randall Morgan <rmorgan62@gmail.com>
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 1, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||||
|
MA 02110-1301, USA.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#ifndef __C_GSL_COMPLEX_C
|
||||||
|
#define __C_GSL_COMPLEX_C
|
||||||
|
|
||||||
|
#include "c_complex.h"
|
||||||
|
#include "gambas.h"
|
||||||
|
#include "gb_common.h"
|
||||||
|
#include "c_gsl.h"
|
||||||
|
#include <gsl/gsl_math.h>
|
||||||
|
#include <gsl/gsl_complex.h>
|
||||||
|
#include <gsl/gsl_complex_math.h>
|
||||||
|
#include <gsl/gsl_sf.h>
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
BEGIN_PROPERTY(GslComplex_Real)
|
||||||
|
|
||||||
|
if (READ_PROPERTY)
|
||||||
|
GB.ReturnFloat(THIS->number.real);
|
||||||
|
else
|
||||||
|
THIS->number.real = (VPROP(GB_FLOAT));
|
||||||
|
|
||||||
|
END_PROPERTY
|
||||||
|
|
||||||
|
|
||||||
|
BEGIN_PROPERTY(GslComplex_Imagined)
|
||||||
|
|
||||||
|
if (READ_PROPERTY)
|
||||||
|
GB.ReturnFloat(THIS->number.imagined);
|
||||||
|
else
|
||||||
|
THIS->number.imagined = (VPROP(GB_FLOAT));
|
||||||
|
|
||||||
|
END_PROPERTY
|
||||||
|
|
||||||
|
/**************************************************
|
||||||
|
Elemntary math functions for complex numbers
|
||||||
|
**************************************************/
|
||||||
|
|
||||||
|
BEGIN_METHOD(GslComplex_X, GB_OBJECT x;)
|
||||||
|
GSLCOMPLEX *p;
|
||||||
|
p = VARG(x); // Get GSLCOMPLEX pointer from GB_OBJECT:value member
|
||||||
|
// Now using our GSLCOMPLEX pointer we can access the GSLCOMPLEX structure members
|
||||||
|
GB.ReturnFloat(p->number.real);
|
||||||
|
END_METHOD
|
||||||
|
|
||||||
|
|
||||||
|
BEGIN_METHOD(GslComplex_Y, GB_OBJECT y;)
|
||||||
|
GSLCOMPLEX *p;
|
||||||
|
p = VARG(y);
|
||||||
|
GB.ReturnFloat(p->number.imagined);
|
||||||
|
END_METHOD
|
||||||
|
|
||||||
|
|
||||||
|
BEGIN_METHOD(GslComplex_Add, GB_OBJECT x;)
|
||||||
|
void **t;
|
||||||
|
GSLCOMPLEX *p;
|
||||||
|
GSLCOMPLEX *obj;
|
||||||
|
gsl_complex a, b;
|
||||||
|
gsl_complex r;
|
||||||
|
|
||||||
|
p = (GSLCOMPLEX *) VARG(x);
|
||||||
|
|
||||||
|
// Save the values of the current object into a.
|
||||||
|
GSL_SET_COMPLEX(&a, THIS->number.real, THIS->number.imagined);
|
||||||
|
|
||||||
|
// We convert p (GSLCOMPLEXNUM) to type gsl_complex because
|
||||||
|
// at this point we cannot garauntee that GSLCOMPLEXNUM
|
||||||
|
// will not change. It may get an error (epsilon) value
|
||||||
|
// added in the future to make handling error diviation
|
||||||
|
// easier.
|
||||||
|
GSL_SET_COMPLEX(&b, p->number.real, p->number.imagined);
|
||||||
|
|
||||||
|
// Create new object
|
||||||
|
obj = (GSLCOMPLEX *) GB.New(GB.FindClass("Complex"), NULL, NULL);
|
||||||
|
|
||||||
|
// Add two complex numbers
|
||||||
|
r = gsl_complex_add(a, b);
|
||||||
|
|
||||||
|
// Access the complex number
|
||||||
|
//obj->number.real = r.dat[0];
|
||||||
|
//obj->number.imagined = r.dat[1];
|
||||||
|
|
||||||
|
return GB.ReturnObject(obj);
|
||||||
|
|
||||||
|
END_METHOD
|
||||||
|
|
||||||
|
/**************************************************
|
||||||
|
Describe Class properties and methods to Gambas
|
||||||
|
**************************************************/
|
||||||
|
GB_DESC CGslComplexDesc[] =
|
||||||
|
{
|
||||||
|
GB_DECLARE("Complex", sizeof(GSLCOMPLEX)),
|
||||||
|
|
||||||
|
GB_PROPERTY("REAL", "f", GslComplex_Real),
|
||||||
|
GB_PROPERTY("IMAG", "f", GslComplex_Imagined),
|
||||||
|
|
||||||
|
GB_STATIC_METHOD("X", "f", GslComplex_X, "(x)o"),
|
||||||
|
GB_STATIC_METHOD("Y", "f", GslComplex_Y, "(y)o"),
|
||||||
|
|
||||||
|
GB_STATIC_METHOD("Add", "o", GslComplex_Add, "(x)o"),
|
||||||
|
|
||||||
|
GB_END_DECLARE
|
||||||
|
};
|
||||||
|
|
||||||
|
|
54
gb.gsl/src/c_complex.h
Normal file
54
gb.gsl/src/c_complex.h
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
c_gsl.h
|
||||||
|
|
||||||
|
gb.gsl component
|
||||||
|
|
||||||
|
(c) 2012 Randall Morgan <rmorgan62@gmail.com>
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 1, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||||
|
MA 02110-1301, USA.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#ifndef __C_GSL_COMPLEX_H
|
||||||
|
#define __C_GSL_COMPLEX_H
|
||||||
|
|
||||||
|
#include "gambas.h"
|
||||||
|
#include <gsl/gsl_complex.h>
|
||||||
|
|
||||||
|
#define THIS ((GSLCOMPLEX *)_object)
|
||||||
|
|
||||||
|
GB_INTERFACE GB EXPORT;
|
||||||
|
|
||||||
|
extern GB_DESC CGslComplexDesc[];
|
||||||
|
|
||||||
|
typedef
|
||||||
|
struct __GSLCOMPLEXNUM
|
||||||
|
{
|
||||||
|
double real;
|
||||||
|
double imagined;
|
||||||
|
}
|
||||||
|
GSLCOMPLEXNUM;
|
||||||
|
|
||||||
|
typedef
|
||||||
|
struct __GSLCOMPLEX
|
||||||
|
{
|
||||||
|
GB_BASE ob;
|
||||||
|
GSLCOMPLEXNUM number;
|
||||||
|
}
|
||||||
|
GSLCOMPLEX;
|
||||||
|
|
||||||
|
#endif /* __C_GSL_COMPLEX_H */
|
|
@ -27,7 +27,7 @@
|
||||||
|
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "c_gsl.h"
|
#include "c_gsl.h"
|
||||||
//#include "c_complex.h"
|
#include "c_complex.h"
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@ -42,7 +42,7 @@ GB_CLASS GSL;
|
||||||
GB_DESC *GB_CLASSES[] EXPORT =
|
GB_DESC *GB_CLASSES[] EXPORT =
|
||||||
{
|
{
|
||||||
CGslDesc, /* The Elementary math functions */
|
CGslDesc, /* The Elementary math functions */
|
||||||
//CGslComplexDesc,
|
CGslComplexDesc,
|
||||||
/* Other classes go here as completed */
|
/* Other classes go here as completed */
|
||||||
NULL // Must have a null entry for the end of the structure
|
NULL // Must have a null entry for the end of the structure
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue