Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2006
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2006

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

Search the Archive

Using Mathlink to export arrays

  • To: mathgroup at smc.vnet.net
  • Subject: [mg67090] Using Mathlink to export arrays
  • From: "Amy" <amy.squillacote at kitware.com>
  • Date: Fri, 9 Jun 2006 01:07:32 -0400 (EDT)
  • Sender: owner-wri-mathgroup at wolfram.com

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: calling mathematica from an external program
  • Next by Date: Re: Using a list as a variable
  • Previous by thread: WITH - A web interface to Mathematica
  • Next by thread: Re: Using Mathlink to export arrays