 MapleListAlloc - Maple Help

MapleListAlloc

create a list in external code

MapleListAssign

MapleListSelect

select from a list in external code Calling Sequence MapleListAlloc(kv, n) MapleListAssign(kv, list, i, val) MapleListSelect(kv, list, i) Parameters

 kv - kernel handle of type MKernelVector n - number of elements in the list list - Maple list object i - index of entry in a list val - value to assign into the list Description

 • These functions can be used in external code with OpenMaple or define_external.
 • MapleListAlloc creates a new list that can contain n elements.  The list must be filled completely before passing it back to Maple.
 • MapleListAssign sets the ith element of the given list to the value val.  Lists can be modified only if they were created by MapleListAlloc and have never entered Maple (for example, as an argument to a function evaluation or returned value).  Lists are static objects; once created, they cannot change.  For information on working with a dynamic object, see ?RTableCreate.
 • MapleListSelect retrieves the ith element of the given list.  Indexing in a list starts at 1.
 • The size of a list can be obtained using the MapleNumArgs command. Examples

 #include #include #include "maplec.h" ALGEB M_DECL MyTimeList( MKernelVector kv, ALGEB *args ) { time_t c; struct tm *t; ALGEB list, elem, val; char *code; M_INT n, i; if( MapleNumArgs(kv,(ALGEB)args) != 1 ) { MapleRaiseError(kv,"one argument expected"); return( NULL ); } if( !IsMapleList(kv,args) ) { MapleRaiseError(kv,"list expected"); return( NULL ); } n = MapleNumArgs(kv,args); list = MapleListAlloc(kv,n); c = time(&c); t = localtime(&c); for( i=1; i<=n; ++i ) { elem = MapleListSelect(kv,args,i); if( !IsMapleString(kv,elem) ) { MapleRaiseError1(kv,"string expected for %-1 parameter", ToMapleInteger(kv,i)); return( NULL ); } code = MapleToString(kv,elem); if( strcmp(code,"SS") == 0 ) { val = ToMapleInteger(kv,t->tm_sec); } else if( strcmp(code,"MM") == 0 ) { val = ToMapleInteger(kv,t->tm_min); } else if( strcmp(code,"HH") == 0 ) { val = ToMapleInteger(kv,t->tm_hour); } else if( strcmp(code,"dd") == 0 ) { val = ToMapleInteger(kv,t->tm_mday); } else if( strcmp(code,"mm") == 0 ) { val = ToMapleInteger(kv,t->tm_mon); } else if( strcmp(code,"yy") == 0 ) { val = ToMapleInteger(kv,t->tm_year+1900); } else if( strcmp(code,"ww") == 0 ) { val = ToMapleInteger(kv,t->tm_wday); } else if( strcmp(code,"jj") == 0 ) { val = ToMapleInteger(kv,t->tm_yday); } else if( strcmp(code,"vv") == 0 ) { val = ToMapleInteger(kv,t->tm_isdst); } else { MapleRaiseError1(kv,"unrecognized format code, %1",elem); return( NULL ); } MapleListAssign(kv,list,i,val); } return( list ); }

Execute the external function from Maple.

 > $\mathrm{with}\left(\mathrm{ExternalCalling}\right):$
 > $\mathrm{dll}≔\mathrm{ExternalLibraryName}\left("HelpExamples"\right):$
 > $\mathrm{date}≔\mathrm{DefineExternal}\left("MyTimeList",\mathrm{dll}\right):$
 > $\mathrm{date}\left(\left["mm","dd","yy"\right]\right)$
 $\left[{3}{,}{8}{,}{2023}\right]$ (1)
 > $\mathrm{date}\left(\left["HH","MM","SS"\right]\right)$
 $\left[{0}{,}{48}{,}{30}\right]$ (2)