Pablo
unread,Feb 5, 2012, 3:42:30 PM2/5/12You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to
Hello,
To sum vectors i wrote a code like this; it is receiving 3 vectors
data1, data2, data3. The diference between data1 and data2 is returned
with Tcl_SetObjResult, but i would like modify data3, how can i modify
data3??
Thanks
#include <tcl.h>
#include <iostream>
using namespace std;
int obj_vecsub(ClientData clientData, Tcl_Interp *interp, int argc,
Tcl_Obj *const objv[]);
int obj_vecsub(ClientData clientData, Tcl_Interp *interp, int argc,
Tcl_Obj *const objv[])
{
if (argc != 3) {
Tcl_WrongNumArgs(interp, 1, objv, (char *)"?x? ?y?");
return TCL_ERROR;
}
int num1=0, num2=0, num3=0;
Tcl_Obj **data1, **data2, **data3;
if (Tcl_ListObjGetElements(interp, objv[1], &num1, &data1) !=
TCL_OK)
return TCL_ERROR;
if (Tcl_ListObjGetElements(interp, objv[2], &num2, &data2) !=
TCL_OK)
return TCL_ERROR;
if (Tcl_ListObjGetElements(interp, objv[3], &num2, &data3) !=
TCL_OK)
return TCL_ERROR;
if (num1 != num2) {
Tcl_SetResult(interp, (char *)"vecsub: two vectors don't have the
same size", TCL_STATIC);
return TCL_ERROR;
}
Tcl_Obj *tcl_result = Tcl_NewListObj(0, NULL);
Tcl_Obj *tcl_dummy = Tcl_NewListObj(0, NULL);
for (int i=0; i<num1; i++) {
double d1=0, d2=0, d3=77;
if (Tcl_GetDoubleFromObj(interp, data1[i], &d1) != TCL_OK) {
Tcl_SetResult(interp, (char *)"vecsub: non-numeric in first
argument", TCL_STATIC);
return TCL_ERROR;
}
if (Tcl_GetDoubleFromObj(interp, data2[i], &d2) != TCL_OK) {
Tcl_SetResult(interp, (char *)"vecsub: non-numeric in second
argument", TCL_STATIC);
return TCL_ERROR;
}
Tcl_ListObjAppendElement(interp, tcl_result, Tcl_NewDoubleObj(d1-
d2));
Tcl_ListObjAppendElement(interp, tcl_dummy,
Tcl_NewDoubleObj(d3));
}
Tcl_SetObjResult(interp, tcl_result);
return TCL_OK;
}
//int AddObjCmd(ClientData clientData, Tcl_Interp *interp,int objc,
Tcl_Obj *CONST objv[]);
extern "C" {
int Add_Init(Tcl_Interp *interp) ;
} // end extern "C" *
int Add_Init(Tcl_Interp *interp) {
/* Register the Add command */
Tcl_CreateObjCommand(interp, "vecsub", obj_vecsub,(ClientData) NULL,
(Tcl_CmdDeleteProc *) NULL);
/* Declare the package */
Tcl_PkgProvide(interp, "vecsub", "1.1");
return TCL_OK;
}