diff options
author | Steve Bennett <steveb@workware.net.au> | 2011-11-26 15:12:28 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2011-11-28 13:13:42 +1000 |
commit | ae8a6597a4220c44c14cd7e4214384926468a732 (patch) | |
tree | a36cb1aa49cb547b8bcd56f79259b1472336b817 | |
parent | e32d14e397f48f7800a83429299134c6d0e3a660 (diff) | |
download | jimtcl-ae8a6597a4220c44c14cd7e4214384926468a732.zip jimtcl-ae8a6597a4220c44c14cd7e4214384926468a732.tar.gz jimtcl-ae8a6597a4220c44c14cd7e4214384926468a732.tar.bz2 |
Make Jim_ListJoin() public
The core of [join]
Signed-off-by: Steve Bennett <steveb@workware.net.au>
-rw-r--r-- | jim.c | 35 | ||||
-rw-r--r-- | jim.h | 2 |
2 files changed, 22 insertions, 15 deletions
@@ -6292,6 +6292,24 @@ int Jim_SetListIndex(Jim_Interp *interp, Jim_Obj *varNamePtr, return JIM_ERR; } +Jim_Obj *Jim_ListJoin(Jim_Interp *interp, Jim_Obj *listObjPtr, const char *joinStr, int joinStrLen) +{ + int i; + int listLen = Jim_ListLength(interp, listObjPtr); + Jim_Obj *resObjPtr = Jim_NewEmptyStringObj(interp); + + for (i = 0; i < listLen; ) { + Jim_Obj *objPtr; + + Jim_ListIndex(interp, listObjPtr, i, &objPtr, JIM_NONE); + Jim_AppendObj(interp, resObjPtr, objPtr); + if (++i != listLen) { + Jim_AppendString(interp, resObjPtr, joinStr, joinStrLen); + } + } + return resObjPtr; +} + Jim_Obj *Jim_ConcatObj(Jim_Interp *interp, int objc, Jim_Obj *const *objv) { int i; @@ -13919,8 +13937,7 @@ static int Jim_SplitCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *ar static int Jim_JoinCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { const char *joinStr; - int joinStrLen, i, listLen; - Jim_Obj *resObjPtr; + int joinStrLen; if (argc != 2 && argc != 3) { Jim_WrongNumArgs(interp, 1, argv, "list ?joinString?"); @@ -13934,19 +13951,7 @@ static int Jim_JoinCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *arg else { joinStr = Jim_GetString(argv[2], &joinStrLen); } - listLen = Jim_ListLength(interp, argv[1]); - resObjPtr = Jim_NewStringObj(interp, NULL, 0); - /* Split */ - for (i = 0; i < listLen; i++) { - Jim_Obj *objPtr = 0; - - Jim_ListIndex(interp, argv[1], i, &objPtr, JIM_NONE); - Jim_AppendObj(interp, resObjPtr, objPtr); - if (i + 1 != listLen) { - Jim_AppendString(interp, resObjPtr, joinStr, joinStrLen); - } - } - Jim_SetResult(interp, resObjPtr); + Jim_SetResult(interp, Jim_ListJoin(interp, argv[1], joinStr, joinStrLen)); return JIM_OK; } @@ -803,6 +803,8 @@ JIM_EXPORT int Jim_SetListIndex (Jim_Interp *interp, Jim_Obj *newObjPtr); JIM_EXPORT Jim_Obj * Jim_ConcatObj (Jim_Interp *interp, int objc, Jim_Obj *const *objv); +JIM_EXPORT Jim_Obj *Jim_ListJoin(Jim_Interp *interp, + Jim_Obj *listObjPtr, const char *joinStr, int joinStrLen); /* dict object */ JIM_EXPORT Jim_Obj * Jim_NewDictObj (Jim_Interp *interp, |