And just for fun....
stringmerge.bmx
SuperStrict
Import BRL.Blitz
Import "stringmerge.cpp"
Function MergeStrings(src:String, merge:String, start:Int)
bmx_mergestrings(src, merge, start)
End Function
Extern
Function bmx_mergestrings(src:String, merge:String, start:Int)
End Extern
Local src:String = "One Two Three Four"
Local mrg:String = "ABCEDF"
Print "-------"
Print src
Print mrg
MergeStrings(src, mrg, 4)
Print "-------"
Print src
stringmerge.cpp
#include "blitz.h"
extern "C" {
void bmx_mergestrings(BBString * src, BBString * merge, int start);
}
void bmx_mergestrings(BBString * src, BBString * merge, int start) {
BBChar *p,*q;
int srcLength = src->length;
int mergeLength = merge->length;
int count;
if (srcLength <= start || mergeLength == 0) {
return;
}
count = srcLength - start;
if (count > mergeLength) {
count = mergeLength;
}
p = src->buf + start;
q = merge->buf;
for (int i = 0; i < count; i++) {
*p++ = *q++;
}
}
Merges "merge" into "src" at the given "start" index in "src".
Should be faster than a string slice/concat operation, but use at your own risk :-p