%%-------------------------------------------------------------------- %% %% %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 : CosTime_TIO_impl.erl %% Purpose : %%---------------------------------------------------------------------- -module('CosTime_TIO_impl'). %%--------------- INCLUDES ----------------------------------- -include("cosTimeApp.hrl"). %%--------------- EXPORTS ------------------------------------ %%--------------- External ----------------------------------- %% Attributes (external) -export(['_get_time_interval'/2]). %% Interface functions -export([spans/3, overlaps/3, time/2]). %%--------------- gen_server specific exports ---------------- -export([handle_info/2, code_change/3]). -export([init/1, terminate/2]). %% Data structures -record(state, {interval, tdf, timer}). %% Data structures constructors -define(get_InitState(I,T,TO), #state{interval = I, tdf = T, timer = TO}). %% Data structures selectors -define(get_IntervalT(S), S#state.interval). -define(get_Lower(S), (S#state.interval)#'TimeBase_IntervalT'.lower_bound). -define(get_Upper(S), (S#state.interval)#'TimeBase_IntervalT'.upper_bound). -define(get_Tdf(S), S#state.tdf). -define(get_TimerObj(S), S#state.timer). %%-----------------------------------------------------------% %% function : handle_info, code_change %% Arguments: %% Returns : %% Effect : Functions demanded by the gen_server module. %%------------------------------------------------------------ code_change(_OldVsn, State, _Extra) -> {ok, State}. handle_info(_Info, State) -> {noreply, State}. %%----------------------------------------------------------% %% function : init, terminate %% Arguments: %%----------------------------------------------------------- init([Interval, Tdf, Timer]) -> {ok, ?get_InitState(Interval, Tdf, Timer)}. terminate(_Reason, _State) -> ok. %%----------------------------------------------------------- %%------------------------ attributes ----------------------- %%----------------------------------------------------------- %%----------------------------------------------------------% %% Attribute: '_get_time_interval' %% Type : readonly %% Returns : %%----------------------------------------------------------- '_get_time_interval'(_OE_THIS, State) -> {reply, ?get_IntervalT(State), State}. %%----------------------------------------------------------- %%------- Exported external functions ----------------------- %%----------------------------------------------------------- %%----------------------------------------------------------% %% function : spans %% Arguments: Time - UTO %% Returns : CosTime::OverLapType - enum() %% TIO - out-parameter. %%----------------------------------------------------------- spans(_OE_THIS, State, Time) -> ?time_TypeCheck(Time, 'CosTime_UTO'), case catch 'CosTime_UTO':'_get_utc_time'(Time) of #'TimeBase_UtcT'{time = Btime, inacclo = InaccL, inacchi=InaccH} -> Inaccuarcy = ?concat_TimeT(InaccH, InaccL), BL = Btime - Inaccuarcy, BU = Btime + Inaccuarcy, L = ?get_Lower(State), U = ?get_Upper(State), {Type, NewL, NewU} = if L=<BL, U>=BU -> {'OTContainer',BL,BU}; L>=BL, U=<BU -> {'OTContained',L,U}; L<BL, U=<BU, U>=BL -> {'OTOverlap',BL,U}; L>=BL, L=<BU, U>BU -> {'OTOverlap',L,BU}; L>BU -> {'OTNoOverlap',BU,L}; true -> {'OTNoOverlap',U,BL} end, {reply, {Type, 'CosTime_TIO':oe_create([#'TimeBase_IntervalT'{lower_bound=NewL, upper_bound=NewU}, ?get_Tdf(State), ?get_TimerObj(State)], [{pseudo,true}|?CREATE_OPTS])}, State}; _ -> corba:raise(#'BAD_PARAM'{completion_status=?COMPLETED_NO}) end. %%----------------------------------------------------------% %% function : overlaps %% Arguments: Interval - TIO %% Returns : CosTime::OverLapType - enum() %% TIO - out-parameter. %%----------------------------------------------------------- overlaps(_OE_THIS, State, Interval) -> ?time_TypeCheck(Interval, 'CosTime_TIO'), case catch 'CosTime_TIO':'_get_time_interval'(Interval) of #'TimeBase_IntervalT'{lower_bound=BL, upper_bound=BU} -> L = ?get_Lower(State), U = ?get_Upper(State), {Type, NewL, NewU} = if L=<BL, U>=BU -> {'OTContainer',BL,BU}; L>=BL, U=<BU -> {'OTContained',L,U}; L<BL, U=<BU, U>=BL -> {'OTOverlap',BL,U}; L>=BL, L=<BU, U>BU -> {'OTOverlap',L,BU}; L>BU -> {'OTNoOverlap',BU,L}; true -> {'OTNoOverlap',U,BL} end, {reply, {Type, 'CosTime_TIO':oe_create([#'TimeBase_IntervalT'{lower_bound=NewL, upper_bound=NewU}, ?get_Tdf(State), ?get_TimerObj(State)], [{pseudo,true}|?CREATE_OPTS])}, State}; _ -> corba:raise(#'BAD_PARAM'{completion_status=?COMPLETED_NO}) end. %%----------------------------------------------------------% %% function : time %% Arguments: - %% Returns : UTO %%----------------------------------------------------------- time(_OE_THIS, State) -> L = ?get_Lower(State), H = ?get_Upper(State), Utc = #'TimeBase_UtcT'{time=(erlang:trunc(((H-L)/2))+L), inacclo=L, inacchi=H, tdf=?get_Tdf(State)}, {reply, 'CosTime_UTO':oe_create([Utc, ?get_TimerObj(State)], [{pseudo,true}|?CREATE_OPTS]), State}. %%--------------- LOCAL FUNCTIONS ---------------------------- %%--------------- MISC FUNCTIONS, E.G. DEBUGGING ------------- %%--------------- END OF MODULE ------------------------------