Mumpster
http://mumpster.org/

GT.M wrappers for C library math functions
http://mumpster.org/viewtopic.php?f=16&t=1743
Page 1 of 1

Author:  jollis [ Tue Apr 30, 2013 10:34 pm ]
Post subject:  GT.M wrappers for C library math functions

This was developed for the upcoming VistA geospatial extensions:

Code:
/**
 * xgismath.c
 * 
 * Math wrappers for GT.M callout interface
 *
 * Copyright (C) 2013 Coherent Logic Development LLC
 *
 * Author: JP Willis <jwillis@coherent-logic.com>
 * Date: 28 Apr 2013
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */

#include <math.h>
#include "gtmxc_types.h"

int m_sin(int c, double *x, double *out)
{
  *out = sin(*x);
  return(0);
}

int m_cos(int c, double *x, double *out)
{
  *out = cos(*x);
  return(0);
}

int m_tan(int c, double *x, double *out)
{
  *out = tan(*x);
  return(0);
}

int m_asin(int c, double *x, double *out)
{
  *out = asin(*x);
  return(0);
}

int m_acos(int c, double *x, double *out)
{
  *out = acos(*x);
  return(0);
}

int m_atan(int c, double *x, double *out)
{
  *out = atan(*x);
  return(0);
}

int m_atan2(int c, double *y, double *x, double *out)
{
  *out = atan2(*y, *x);
  return(0);
}

int m_sinh(int c, double *x, double *out)
{
  *out = sinh(*x);
  return(0);
}

int m_cosh(int c, double *x, double *out)
{
  *out = cosh(*x);
  return(0);
}

int m_tanh(int c, double *x, double *out)
{
  *out = tanh(*x);
  return(0);
}

int m_exp(int c, double *x, double *out)
{
  *out = exp(*x);
  return(0);
}

int m_log(int c, double *x, double *out)
{
  *out = log(*x);
  return(0);
}

int m_log10(int c, double *x, double *out)
{
  *out = log10(*x);
  return(0);
}

int m_pow(int c, double *x, double *y, double *out)
{
  *out = pow(*x, *y);
  return(0);
}

int m_sqrt(int c, double *x, double *out)
{
  *out = sqrt(*x);
  return(0);
}

int m_ceil(int c, double *x, double *out)
{
  *out = ceil(*x);
  return(0);
}

int m_floor(int c, double *x, double *out)
{
  *out = floor(*x);
  return(0);
}

int m_fabs(int c, double *x, double *out)
{
  *out = fabs(*x);
  return(0);
}


Callout Table (xgismath.xc):
Code:
$HOME/lib/xgismath.so
sin: gtm_status_t m_sin(I:gtm_double_t*, O:gtm_double_t*)
cos: gtm_status_t m_cos(I:gtm_double_t*, O:gtm_double_t*)
tan: gtm_status_t m_tan(I:gtm_double_t*, O:gtm_double_t*)
asin: gtm_status_t m_asin(I:gtm_double_t*, O:gtm_double_t*)
acos: gtm_status_t m_acos(I:gtm_double_t*, O:gtm_double_t*)
atan: gtm_status_t m_atan(I:gtm_double_t*, O:gtm_double_t*)
atan2: gtm_status_t m_atan2(I:gtm_double_t*, I:gtm_double_t*, O:gtm_double_t*)
sinh: gtm_status_t m_sinh(I:gtm_double_t*, O:gtm_double_t*)
cosh: gtm_status_t m_cosh(I:gtm_double_t*, O:gtm_double_t*)
tanh: gtm_status_t m_tanh(I:gtm_double_t*, O:gtm_double_t*)
exp: gtm_status_t m_exp(I:gtm_double_t*, O:gtm_double_t*)
log: gtm_status_t m_log(I:gtm_double_t*, O:gtm_double_t*)
log10: gtm_status_t m_log10(I:gtm_double_t*, O:gtm_double_t*)
pow: gtm_status_t m_pow(I:gtm_double_t*, I:gtm_double_t*, O:gtm_double_t*)
sqrt: gtm_status_t m_sqrt(I:gtm_double_t*, O:gtm_double_t*)
ceil: gtm_status_t m_ceil(I:gtm_double_t*, O:gtm_double_t*)
floor: gtm_status_t m_floor(I:gtm_double_t*, O:gtm_double_t*)
abs: gtm_status_t m_fabs(I:gtm_double_t*, O:gtm_double_t*)


Makefile:
Code:
#
# Makefile
#
# Part of XGIS
# Copyright (C) 2013 Coherent Logic Development LLC
#
# Author: JP Willis <jwillis@coherent-logic.com>
# Date: 28 Apr 2013
#
#  Licensed under the Apache License, Version 2.0 (the "License");
#   you may not use this file except in compliance with the License.
#   You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
#   Unless required by applicable law or agreed to in writing, software
#   distributed under the License is distributed on an "AS IS" BASIS,
#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#   See the License for the specific language governing permissions and
#   limitations under the License.

CFLAGS=-Wall
GTMDIST=$(gtm_dist)

all: xgismath.so

xgismath.so: xgismath.o
   gcc $(CFLAGS) -o xgismath.so -shared xgismath.o

xgismath.o: xgismath.c
   gcc $(CFLAGS) -c -fPIC -I$(GTMDIST) xgismath.c

clean:
   rm xgismath.so
   rm xgismath.o

install:
   cp xgismath.so $(HOME)/lib
   cp xgismath.xc $(HOME)/lib


To use this, you'll need the following in ~/.bash_profile:

Code:
export GTMXC_xgismath=${HOME}/lib/xgismath.xc

Page 1 of 1 All times are UTC - 8 hours [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/