aboutsummaryrefslogtreecommitdiffstats
path: root/lib/cosTime/src/CosTime_TIO_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/cosTime/src/CosTime_TIO_impl.erl
downloadotp-84adefa331c4159d432d22840663c38f155cd4c1.tar.gz
otp-84adefa331c4159d432d22840663c38f155cd4c1.tar.bz2
otp-84adefa331c4159d432d22840663c38f155cd4c1.zip
The R13B03 release.OTP_R13B03
Diffstat (limited to 'lib/cosTime/src/CosTime_TIO_impl.erl')
-rw-r--r--lib/cosTime/src/CosTime_TIO_impl.erl200
1 files changed, 200 insertions, 0 deletions
diff --git a/lib/cosTime/src/CosTime_TIO_impl.erl b/lib/cosTime/src/CosTime_TIO_impl.erl
new file mode 100644
index 0000000000..d6d4ee894b
--- /dev/null
+++ b/lib/cosTime/src/CosTime_TIO_impl.erl
@@ -0,0 +1,200 @@
+%%--------------------------------------------------------------------
+%%
+%% %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 ------------------------------