aboutsummaryrefslogtreecommitdiffstats
path: root/lib/cosProperty/src/CosPropertyService_PropertiesIterator_impl.erl
diff options
context:
space:
mode:
authorErlang/OTP <[email protected]>2009-11-20 14:54:40 +0000
committerErlang/OTP <[email protected]>2009-11-20 14:54:40 +0000
commit84adefa331c4159d432d22840663c38f155cd4c1 (patch)
treebff9a9c66adda4df2106dfd0e5c053ab182a12bd /lib/cosProperty/src/CosPropertyService_PropertiesIterator_impl.erl
downloadotp-84adefa331c4159d432d22840663c38f155cd4c1.tar.gz
otp-84adefa331c4159d432d22840663c38f155cd4c1.tar.bz2
otp-84adefa331c4159d432d22840663c38f155cd4c1.zip
The R13B03 release.OTP_R13B03
Diffstat (limited to 'lib/cosProperty/src/CosPropertyService_PropertiesIterator_impl.erl')
-rw-r--r--lib/cosProperty/src/CosPropertyService_PropertiesIterator_impl.erl166
1 files changed, 166 insertions, 0 deletions
diff --git a/lib/cosProperty/src/CosPropertyService_PropertiesIterator_impl.erl b/lib/cosProperty/src/CosPropertyService_PropertiesIterator_impl.erl
new file mode 100644
index 0000000000..a7769cea4d
--- /dev/null
+++ b/lib/cosProperty/src/CosPropertyService_PropertiesIterator_impl.erl
@@ -0,0 +1,166 @@
+%%--------------------------------------------------------------------
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%
+%%
+%%----------------------------------------------------------------------
+%% File : CosPropertyService_PropertiesIterator_impl.erl
+%% Description :
+%%
+%%----------------------------------------------------------------------
+-module('CosPropertyService_PropertiesIterator_impl').
+
+%%----------------------------------------------------------------------
+%% Include files
+%%----------------------------------------------------------------------
+-include_lib("orber/include/corba.hrl").
+-include_lib("orber/src/orber_iiop.hrl").
+-include("CosPropertyService.hrl").
+-include("cosProperty.hrl").
+
+
+%%----------------------------------------------------------------------
+%% External exports
+%%----------------------------------------------------------------------
+%% Mandatory server functions
+-export([init/1,
+ terminate/2,
+ code_change/3]).
+
+-export([reset/1,
+ next_one/1,
+ next_n/2,
+ destroy/1]).
+
+%%----------------------------------------------------------------------
+%% Internal exports
+%%----------------------------------------------------------------------
+-export([
+ ]).
+
+%%----------------------------------------------------------------------
+%% Records
+%%----------------------------------------------------------------------
+-record(state, {properties, counter=1, length}).
+
+%%----------------------------------------------------------------------
+%% Macros
+%%----------------------------------------------------------------------
+-define(CreateInitState(L), #state{properties = L, length = length(L)}).
+-define(get_Properties(S), S#state.properties).
+-define(get_Counter(S), S#state.counter).
+-define(get_Length(S), S#state.length).
+
+-define(set_Properties(S, P), S#state{properties = P}).
+-define(set_Counter(S, C), S#state{counter = C}).
+-define(set_Length(S, L), S#state{length = L}).
+
+-define(increment_Counter(S), S#state{counter = S#state.counter+1}).
+-define(decrement_Counter(S), S#state{counter = S#state.counter-1}).
+-define(addto_Counter(S, N), S#state{counter = S#state.counter+N}).
+-define(subfrom_Counter(S, N), S#state{counter = S#state.counter-N}).
+
+
+%%======================================================================
+%% External functions
+%%======================================================================
+%%----------------------------------------------------------------------
+%% Function : init/1
+%% Description: Initiates the server
+%% Returns : {ok, State} |
+%% {ok, State, Timeout} |
+%% ignore |
+%% {stop, Reason}
+%%----------------------------------------------------------------------
+init(Properties) ->
+ {ok, ?CreateInitState(Properties)}.
+
+%%----------------------------------------------------------------------
+%% Function : terminate/2
+%% Description: Shutdown the server
+%% Returns : any (ignored by gen_server)
+%%----------------------------------------------------------------------
+terminate(_Reason, _State) ->
+ ok.
+
+%%----------------------------------------------------------------------
+%% Function : code_change/3
+%% Description: Convert process state when code is changed
+%% Returns : {ok, NewState}
+%%----------------------------------------------------------------------
+code_change(_OldVsn, State, _Extra) ->
+ {ok, State}.
+
+%%---------------------------------------------------------------------%
+%% Function : reset
+%% Arguments : -
+%% Description:
+%% Returns : {ok, NewState}
+%%----------------------------------------------------------------------
+reset(State) ->
+ {reply, ok, ?set_Counter(State, 1)}.
+
+%%----------------------------------------------------------------------
+%% Function : next_one
+%% Arguments : -
+%% Description:
+%% Returns : {ok, {bool(), PropertyList}, NewState}
+%%----------------------------------------------------------------------
+next_one(State) when ?get_Counter(State) > ?get_Length(State) ->
+ {reply, {false,
+ #'CosPropertyService_Property'
+ {property_name = "",
+ property_value = any:create(orber_tc:null(), null)}},
+ State};
+next_one(State) ->
+ {reply, {true, lists:nth(?get_Counter(State), ?get_Properties(State))},
+ ?set_Counter(State, 1+?get_Counter(State))}.
+
+%%----------------------------------------------------------------------
+%% Function : next_n
+%% Arguments : N - how many properties we should return.
+%% Description:
+%% Returns : {ok, {bool(), PropertyList}, NewState}
+%%----------------------------------------------------------------------
+next_n(State, N) ->
+ case lists:sublist(?get_Properties(State),
+ ?get_Counter(State),
+ N) of
+ Properties when N+?get_Counter(State) < ?get_Length(State) ->
+ {reply, {true, Properties}, ?set_Counter(State, N+?get_Counter(State))};
+ Properties ->
+ {reply, {false, Properties}, ?set_Counter(State, ?get_Length(State))}
+ end.
+
+%%---------------------------------------------------------------------%
+%% Function : destroy
+%% Arguments : -
+%% Description: Terminate the object
+%% Returns : {ok, NewState}
+%%----------------------------------------------------------------------
+destroy(State) ->
+ {stop, normal, ok, State}.
+
+%%======================================================================
+%% Internal functions
+%%=====================================================================
+
+%%======================================================================
+%% END OF MODULE
+%%======================================================================
+