From 48539bc9602a6e3f11aa0652238ccf2584893407 Mon Sep 17 00:00:00 2001 From: David Reiss Date: Mon, 30 Aug 2010 22:05:50 +0000 Subject: [PATCH] erlang: Don't use a separate process memory_buffer git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@990995 13f79535-47bb-0310-9956-ffa450edef68 --- lib/erl/src/thrift_memory_buffer.erl | 128 +++------------------------ 1 file changed, 12 insertions(+), 116 deletions(-) diff --git a/lib/erl/src/thrift_memory_buffer.erl b/lib/erl/src/thrift_memory_buffer.erl index ae8b6d2b..afad0781 100644 --- a/lib/erl/src/thrift_memory_buffer.erl +++ b/lib/erl/src/thrift_memory_buffer.erl @@ -19,16 +19,11 @@ -module(thrift_memory_buffer). --behaviour(gen_server). -behaviour(thrift_transport). %% API -export([new/0, new_transport_factory/0]). -%% gen_server callbacks --export([init/1, handle_call/3, handle_cast/2, handle_info/2, - terminate/2, code_change/3]). - %% thrift_transport callbacks -export([write/2, read/2, flush/1, close/1]). @@ -36,130 +31,31 @@ -type state() :: #memory_buffer{}. -include("thrift_transport_impl.hrl"). -%%==================================================================== -%% API -%%==================================================================== new() -> - case gen_server:start_link(?MODULE, [], []) of - {ok, Pid} -> - thrift_transport:new(?MODULE, Pid); - Else -> - Else - end. + State = #memory_buffer{buffer = []}, + thrift_transport:new(?MODULE, State). new_transport_factory() -> {ok, fun() -> new() end}. -%%-------------------------------------------------------------------- -%% Function: write(Transport, Data) -> ok -%% -%% Data = iolist() -%% -%% Description: Writes data into the buffer -%%-------------------------------------------------------------------- -write(Transport, Data) -> - {Transport, gen_server:call(Transport, {write, Data})}. +%% Writes data into the buffer +write(State = #memory_buffer{buffer = Buf}, Data) -> + {State#memory_buffer{buffer = [Buf, Data]}, ok}. -%%-------------------------------------------------------------------- -%% Function: flush(Transport) -> ok -%% -%% Description: Flushes the buffer through to the wrapped transport -%%-------------------------------------------------------------------- -flush(Transport) -> - {Transport, gen_server:call(Transport, flush)}. +flush(State) -> + {State, ok}. -%%-------------------------------------------------------------------- -%% Function: close(Transport) -> ok -%% -%% Description: Closes the transport and the wrapped transport -%%-------------------------------------------------------------------- -close(Transport) -> - {Transport, gen_server:cast(Transport, close)}. +close(State) -> + {State, ok}. -%%-------------------------------------------------------------------- -%% Function: Read(Transport, Len) -> {ok, Data} -%% -%% Data = binary() -%% -%% Description: Reads data through from the wrapped transoprt -%%-------------------------------------------------------------------- -read(Transport, Len) when is_integer(Len) -> - {Transport, gen_server:call(Transport, {read, Len})}. - -%%==================================================================== -%% gen_server callbacks -%%==================================================================== - -%%-------------------------------------------------------------------- -%% Function: init(Args) -> {ok, State} | -%% {ok, State, Timeout} | -%% ignore | -%% {stop, Reason} -%% Description: Initiates the server -%%-------------------------------------------------------------------- -init([]) -> - {ok, #memory_buffer{buffer = []}}. - -%%-------------------------------------------------------------------- -%% Function: %% handle_call(Request, From, State) -> {reply, Reply, State} | -%% {reply, Reply, State, Timeout} | -%% {noreply, State} | -%% {noreply, State, Timeout} | -%% {stop, Reason, Reply, State} | -%% {stop, Reason, State} -%% Description: Handling call messages -%%-------------------------------------------------------------------- -handle_call({write, Data}, _From, State = #memory_buffer{buffer = Buf}) -> - {reply, ok, State#memory_buffer{buffer = [Buf, Data]}}; - -handle_call({read, Len}, _From, State = #memory_buffer{buffer = Buf}) -> +read(State = #memory_buffer{buffer = Buf}, Len) when is_integer(Len) -> Binary = iolist_to_binary(Buf), Give = min(iolist_size(Binary), Len), {Result, Remaining} = split_binary(Binary, Give), - {reply, {ok, Result}, State#memory_buffer{buffer = Remaining}}; - -handle_call(flush, _From, State) -> - {reply, ok, State}. - -%%-------------------------------------------------------------------- -%% Function: handle_cast(Msg, State) -> {noreply, State} | -%% {noreply, State, Timeout} | -%% {stop, Reason, State} -%% Description: Handling cast messages -%%-------------------------------------------------------------------- -handle_cast(close, State) -> - {stop, normal, State}; -handle_cast(Msg, State=#memory_buffer{}) -> - {noreply, State}. - -%%-------------------------------------------------------------------- -%% Function: handle_info(Info, State) -> {noreply, State} | -%% {noreply, State, Timeout} | -%% {stop, Reason, State} -%% Description: Handling all non call/cast messages -%%-------------------------------------------------------------------- -handle_info(_Info, State) -> - {noreply, State}. - -%%-------------------------------------------------------------------- -%% Function: terminate(Reason, State) -> void() -%% Description: This function is called by a gen_server when it is about to -%% terminate. It should be the opposite of Module:init/1 and do any necessary -%% cleaning up. When it returns, the gen_server terminates with Reason. -%% The return value is ignored. -%%-------------------------------------------------------------------- -terminate(_Reason, _State) -> - ok. - -%%-------------------------------------------------------------------- -%% Func: code_change(OldVsn, State, Extra) -> {ok, NewState} -%% Description: Convert process state when code is changed -%%-------------------------------------------------------------------- -code_change(_OldVsn, State, _Extra) -> - {ok, State}. + {State#memory_buffer{buffer = Remaining}, {ok, Result}}. %%-------------------------------------------------------------------- -%%% Internal functions +%% Internal functions %%-------------------------------------------------------------------- min(A,B) when A A; min(_,B) -> B. -- 2.17.1