MathGroup Archive 2006

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Using Mathlink to export arrays

  • To: mathgroup at smc.vnet.net
  • Subject: [mg67130] Re: Using Mathlink to export arrays
  • From: "Jens-Peer Kuska" <kuska at informatik.uni-leipzig.de>
  • Date: Sat, 10 Jun 2006 04:53:22 -0400 (EDT)
  • Organization: Uni Leipzig
  • References: <e6b4ve$cn5$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

Hi,

a) using char, short, int is not your problem
b) when you pass the data not with Manual to your 
function
   your C-program store it twice. To avoid thiy 
you must
   pass the data as Manual get the list in the 
C-program
   copy it to your data and dispose the data in 
the link.
c) since Mathematica hold the data always ans int 
you should
   only pass int to the C-program and check in 
your C-code
   what data type fits for the range of the input 
array
d) for doubles you can setup a second pattern

Regards
  Jens

"Amy" <amy.squillacote at kitware.com> schrieb im 
Newsbeitrag news:e6b4ve$cn5$1 at smc.vnet.net...
| Hi,
|
| I am using Mathlink to move arrays with depth=3 
from Mathematica
| (version 5.2) into a C++ program I am 
developing. I want to represent
| the data in my program as fully as possible 
(i.e., avoid casting to
| another data type), but I also don't want to use 
more memory than is
| necessary to store the data. My program handles 
arrays of any type of
| integer data (short integer, integer, and long 
integer) as well
| floating-point data (stored as float, not 
double, in C++). I am trying
| to figure out how to determine from Mathematica 
what type (and which
| MLGet***Array method) I should use based on the 
data array coming from
| Mathematica.
|
| I first tried the following.
|
| if (MLGetShortIntegerArray(...))
|  {
|  // do something
|  }
| else if (MLGetIntegerArray(...))
|  {
|  // do something else
|  }
| else if (MLGetLongIntegerArray(...))
|  {
|  // do something else
|  }
| else if (MLGetFloatArray(...))
|  {
|  // do something else
|  }
| else
|  {
|  // fail
|  }
|
| I thought if I passed in floating-point data 
that the
| MLGet***IntegerArray methods would return 0 (for 
failure), but they did
| not. Instead the MLGetShortIntegerArray method 
was used, and the
| floating-point data in the array was cast to a 
short integer type.
|
| I then tried to change my .tm file so the 
Pattern only accepted integer
| arrays (intending to create a separate function 
for handling
| floating-point arrays), but I could not get that 
to work either;
| neither my integer or floating point arrays were 
accepted. The relevant
| excerpt from my .tm file follows.
|
| :Begin:
| :Function: MyFunction
| :Pattern: MyFunction[x_?ArrayQ[#, IntegerQ]]
| :Arguments: {x}
| :ArgumentTypes: {Manual}
| :ReturnType: Integer
| :End:
|
| Any insights?
|
| - Amy
| 



  • Prev by Date: Re: Selecting Real Roots, Again
  • Next by Date: Re: Using Mathlink to export arrays
  • Previous by thread: Using Mathlink to export arrays
  • Next by thread: Re: Using Mathlink to export arrays