aboutsummaryrefslogblamecommitdiffstats
path: root/lib/cosProperty/src/CosPropertyService_PropertiesIterator_impl.erl
blob: 3c930ecc2c8458d202e52e0b5a1fa799c44f59a4 (plain) (tree)
1
2
3
4
5
6





                                                                      










                                                                           





















































































































































                                                                                    
%%--------------------------------------------------------------------
%%
%% %CopyrightBegin%
%% 
%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
%% 
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
%% You may obtain a copy of the License at
%%
%%     http://www.apache.org/licenses/LICENSE-2.0
%%
%% Unless required by applicable law or agreed to in writing, software
%% distributed under the License is distributed on an "AS IS" BASIS,
%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
%% See the License for the specific language governing permissions 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
%%======================================================================