|
@@ -25,13 +25,26 @@ maybe_word(S) ->
|
|
singleton(S).
|
|
singleton(S).
|
|
|
|
|
|
process_char(C) ->
|
|
process_char(C) ->
|
|
- case lists:member(C, " \t\n\f\l") of
|
|
|
|
- true ->
|
|
|
|
- {segment, "", nil(), ""};
|
|
|
|
- false ->
|
|
|
|
- {chunk, [C]}
|
|
|
|
- end.
|
|
|
|
|
|
+ io:format("~p: process_char start~n", [node()]),
|
|
|
|
+ {_, _, Start} = erlang:now(),
|
|
|
|
+ Result = case lists:member(C, " \t\n\f\l") of
|
|
|
|
+ true ->
|
|
|
|
+ {segment, "", nil(), ""};
|
|
|
|
+ false ->
|
|
|
|
+ {chunk, [C]}
|
|
|
|
+ end,
|
|
|
|
+ {_, _, Finish} = erlang:now(),
|
|
|
|
+ io:format("~p: process_char finish, time ~p~n", [node(), Finish-Start]),
|
|
|
|
+ Result.
|
|
|
|
|
|
|
|
+combine_timed(Arg1, Arg2) ->
|
|
|
|
+ io:format("~p: combine start~n", [node()]),
|
|
|
|
+ {_, _, Start} = erlang:now(),
|
|
|
|
+ Result = combine(Arg1, Arg2),
|
|
|
|
+ {_, _, Finish} = erlang:now(),
|
|
|
|
+ io:format("~p: combine finish, time ~p~n", [node(), Finish-Start]),
|
|
|
|
+ Result.
|
|
|
|
+
|
|
combine({chunk, S1}, {chunk, S2}) ->
|
|
combine({chunk, S1}, {chunk, S2}) ->
|
|
{chunk, S1 ++ S2};
|
|
{chunk, S1 ++ S2};
|
|
combine({chunk, S}, {segment, L, C, R}) ->
|
|
combine({chunk, S}, {segment, L, C, R}) ->
|
|
@@ -42,8 +55,8 @@ combine({segment, L1, C1, R1}, {segment, L2, C2, R2}) ->
|
|
{segment, L1, conc(C1, conc(maybe_word(R1 ++ L2), C2)), R2}.
|
|
{segment, L1, conc(C1, conc(maybe_word(R1 ++ L2), C2)), R2}.
|
|
|
|
|
|
words(Str) ->
|
|
words(Str) ->
|
|
- T = ebb_flow:map_reduce(fun process_char/1,
|
|
|
|
- fun(X, Y) -> combine(X, Y) end,
|
|
|
|
|
|
+ T = ebb_flow:map_reduce(fun(X) -> process_char(X) end,
|
|
|
|
+ fun(X, Y) -> combine_timed(X, Y) end,
|
|
Str),
|
|
Str),
|
|
case ebb_run:run_distributed(T) of
|
|
case ebb_run:run_distributed(T) of
|
|
{ok, [{chunk, S}]} ->
|
|
{ok, [{chunk, S}]} ->
|