costime_tio_impl.erl
来自「OTP是开放电信平台的简称」· ERL 代码 · 共 200 行
ERL
200 行
%%--------------------------------------------------------------------%% ``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 via the world wide web 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.%% %% The Initial Developer of the Original Code is Ericsson Utvecklings AB.%% Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings%% AB. All Rights Reserved.''%% %% $Id$%%%%----------------------------------------------------------------------%% File : CosTime_TIO_impl.erl%% Purpose : %% Created : 10 Feb 2000%%-----------------------------------------------------------------------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 ------------------------------
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?