]> granicus.if.org Git - ejabberd/commitdiff
apply string optimizations
authorChristophe Romain <christophe.romain@process-one.net>
Mon, 16 Jun 2014 17:49:08 +0000 (19:49 +0200)
committerChristophe Romain <christophe.romain@process-one.net>
Tue, 15 Nov 2016 13:32:22 +0000 (14:32 +0100)
src/str.erl

index 439ae6a7ac7a866a10e2ce14be07dcb28c4442a2..43fd51878177c0e32355be2512a084be878464f6 100644 (file)
@@ -93,7 +93,10 @@ rchr(B, C) ->
 -spec str(binary(), binary()) -> non_neg_integer().
 
 str(B1, B2) ->
-    string:str(binary_to_list(B1), binary_to_list(B2)).
+    case binary:match(B1, B2) of
+       {R, _Len} -> R+1;
+       _ -> 0
+    end.
 
 -spec rstr(binary(), binary()) -> non_neg_integer().
 
@@ -113,7 +116,7 @@ cspan(B1, B2) ->
 -spec copies(binary(), non_neg_integer()) -> binary().
 
 copies(B, N) ->
-    iolist_to_binary(string:copies(binary_to_list(B), N)).
+    binary:copy(B, N).
 
 -spec words(binary()) -> pos_integer().
 
@@ -201,7 +204,7 @@ join(L, Sep) ->
 -spec substr(binary(), pos_integer()) -> binary().
 
 substr(B, N) ->
-    iolist_to_binary(string:substr(binary_to_list(B), N)).
+    binary_part(B, N-1, byte_size(B)-N+1).
 
 -spec chr(binary(), char()) -> non_neg_integer().
 
@@ -221,7 +224,7 @@ chars(C, N) ->
 -spec substr(binary(), pos_integer(), non_neg_integer()) -> binary().
 
 substr(B, S, E) ->
-    iolist_to_binary(string:substr(binary_to_list(B), S, E)).
+    binary_part(B, S-1, E).
 
 -spec strip(binary(), both | left | right, char()) -> binary().