Posted to tcl by lmcvoy at Tue Nov 06 16:07:58 GMT 2007view raw

  1. % time {Lset i} 1000000
  2. 1.429418 microseconds per iteration
  3. % time {Lecho foo} 1000000
  4. 0.753119 microseconds per iteration
  5. % time {counter} 1000000
  6. 0.5431 microseconds per iteration
  7.  
  8.  
  9. +int
  10. +TclCounterObjCmd(
  11. + ClientData dummy, /* Not used. */
  12. + Tcl_Interp *interp, /* Current interpreter. */
  13. + int objc, /* Number of arguments. */
  14. + Tcl_Obj *const objv[]) /* Argument objects. */
  15. +{
  16. + static int i;
  17. +
  18. + if (objc != 1) {
  19. + Tcl_WrongNumArgs(interp, 1, objv, "");
  20. + return TCL_ERROR;
  21. + }
  22. + Tcl_SetObjResult(interp, Tcl_NewIntObj(i++));
  23. + return TCL_OK;
  24. +}
  25. +
  26. +
  27. +int
  28. +TclEchoObjCmd(
  29. + ClientData dummy, /* Not used. */
  30. + Tcl_Interp *interp, /* Current interpreter. */
  31. + int objc, /* Number of arguments. */
  32. + Tcl_Obj *const objv[]) /* Argument objects. */
  33. +{
  34. + char *p;
  35. + Tcl_Obj *objPtr;
  36. +
  37. + if (objc != 2) {
  38. + Tcl_WrongNumArgs(interp, 1, objv, "arg");
  39. + return TCL_ERROR;
  40. + }
  41. + p = Tcl_GetString(objv[1]);
  42. + objPtr = Tcl_NewObj();
  43. + Tcl_SetStringObj(objPtr, p, strlen(p));
  44. + Tcl_SetObjResult(interp, objPtr);
  45. + return TCL_OK;
  46. +}
  47. +
  48. +int
  49. +TclLsetObjCmd(
  50. + ClientData dummy, /* Not used. */
  51. + Tcl_Interp *interp, /* Current interpreter. */
  52. + int objc, /* Number of arguments. */
  53. + Tcl_Obj *const objv[]) /* Argument objects. */
  54. +{
  55. + static int i;
  56. + Tcl_Obj *objPtr;
  57. + char buf[100];
  58. +
  59. + if (objc != 2) {
  60. + Tcl_WrongNumArgs(interp, 1, objv, "var");
  61. + return TCL_ERROR;
  62. + }
  63. + sprintf(buf, "%d", i++);
  64. + objPtr = Tcl_NewObj();
  65. + Tcl_SetStringObj(objPtr, buf, strlen(buf));
  66. + Tcl_ObjSetVar2(interp, objv[1], NULL, objPtr, 0);
  67. + Tcl_SetObjResult(interp, Tcl_NewIntObj(i));
  68. + return TCL_OK;
  69. +}
  70.