|
[Date Index]
[Thread Index]
[Author Index]
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
|