orber_ifr_utils.erl

来自「OTP是开放电信平台的简称」· ERL 代码 · 共 437 行 · 第 1/2 页

ERL
437
字号
%%--------------------------------------------------------------------%% ``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    : orber_ifr_utils.erl%% Purpose : Common function for the Interface Repository%% Created : 16 Oct 1997%%-----------------------------------------------------------------------module(orber_ifr_utils).-export([	 select/2,	 index/2,	 construct/3,	 get_object/1,	 set_object/1,	 get_field/2,	 set_field/3,	 write_result/1,	 read_result/1,	 ifr_transaction_read/1,	 ifr_transaction_write/1,	 ifr_transaction_read_write/1,	 makeref/1,	 unique/0,	 existence_check/2,	 existence_check/3,	 create_repository/0,	 init_DB/2, init_DB/3	]).-include_lib("orber/include/corba.hrl").-include("orber_ifr.hrl").-include("ifr_objects.hrl").%%======================================================================%% Internal stuff%%----------------------------------------------------------------------%% Make a record selection.%%%% This code *must* be amended whenever a new record is added in the%% files ifr_objects.hrl or ../include/ifr_types.hrlselect(Record,Field) when record(Record,ir_IRObject) ->    select(Record,record_info(fields,ir_IRObject),Field);select(Record,Field) when record(Record,ir_Contained) ->    select(Record,record_info(fields,ir_Contained),Field);select(Record,Field) when record(Record,ir_Container) ->    select(Record,record_info(fields,ir_Container),Field);select(Record,Field) when record(Record,ir_IDLType) ->    select(Record,record_info(fields,ir_IDLType),Field);select(Record,Field) when record(Record,ir_Repository) ->    select(Record,record_info(fields,ir_Repository),Field);select(Record,Field) when record(Record,ir_ModuleDef) ->    select(Record,record_info(fields,ir_ModuleDef),Field);select(Record,Field) when record(Record,ir_ConstantDef) ->    select(Record,record_info(fields,ir_ConstantDef),Field);select(Record,Field) when record(Record,ir_TypedefDef) ->    select(Record,record_info(fields,ir_TypedefDef),Field);select(Record,Field) when record(Record,ir_StructDef) ->    select(Record,record_info(fields,ir_StructDef),Field);select(Record,Field) when record(Record,ir_UnionDef) ->    select(Record,record_info(fields,ir_UnionDef),Field);select(Record,Field) when record(Record,ir_EnumDef) ->    select(Record,record_info(fields,ir_EnumDef),Field);select(Record,Field) when record(Record,ir_AliasDef) ->    select(Record,record_info(fields,ir_AliasDef),Field);select(Record,Field) when record(Record,ir_PrimitiveDef) ->    select(Record,record_info(fields,ir_PrimitiveDef),Field);select(Record,Field) when record(Record,ir_StringDef) ->    select(Record,record_info(fields,ir_StringDef),Field);select(Record,Field) when record(Record,ir_WstringDef) ->    select(Record,record_info(fields,ir_WstringDef),Field);select(Record,Field) when record(Record,ir_SequenceDef) ->    select(Record,record_info(fields,ir_SequenceDef),Field);select(Record,Field) when record(Record,ir_ArrayDef) ->    select(Record,record_info(fields,ir_ArrayDef),Field);select(Record,Field) when record(Record,ir_ExceptionDef) ->    select(Record,record_info(fields,ir_ExceptionDef),Field);select(Record,Field) when record(Record,ir_AttributeDef) ->    select(Record,record_info(fields,ir_AttributeDef),Field);select(Record,Field) when record(Record,ir_OperationDef) ->    select(Record,record_info(fields,ir_OperationDef),Field);select(Record,Field) when record(Record,ir_InterfaceDef) ->    select(Record,record_info(fields,ir_InterfaceDef),Field);select(Record,Field) when record(Record,ir_FixedDef) ->    select(Record,record_info(fields,ir_FixedDef),Field);select([],_) -> [];select(Record,Field) ->    orber:dbg("[~p] orber_ifr_utils:select(~p, ~p);~n"	      "Unknown Record Type~n", [?LINE, Record,Field], ?DEBUG_LEVEL),    corba:raise(#'INTF_REPOS'{completion_status=?COMPLETED_NO}).-define(ELEMENT_OFFSET, 2).select(Record,Fields,Field) ->    Index = index(Fields,Field),    element(?ELEMENT_OFFSET + Index, Record).index(List,Element) ->    index(List,Element,0).index([H|_T],Element,Index) when H == Element ->    Index;index([_H|T],Element,Index) ->    index(T,Element,Index+1);index([],Element,Index) ->    orber:dbg("[~p] orber_ifr_utils:index(~p, ~p);~n"	      "Index error.~n", [?LINE, Element, Index], ?DEBUG_LEVEL),    corba:raise(#'INTF_REPOS'{completion_status=?COMPLETED_NO}).%%%----------------------------------------------------------------------%%% Construct a record.%%%%%% This code *must* be amended whenever a new record is added in the%%% files ifr_objects.hrl or ../include/ifr_types.hrlconstruct(Record,Field,Value) when record(Record,ir_IRObject) ->    construct(Record,record_info(fields,ir_IRObject),Field,Value);construct(Record,Field,Value) when record(Record,ir_Contained) ->    construct(Record,record_info(fields,ir_Contained),Field,Value);construct(Record,Field,Value) when record(Record,ir_Container) ->    construct(Record,record_info(fields,ir_Container),Field,Value);construct(Record,Field,Value) when record(Record,ir_IDLType) ->    construct(Record,record_info(fields,ir_IDLType),Field,Value);construct(Record,Field,Value) when record(Record,ir_Repository) ->    construct(Record,record_info(fields,ir_Repository),Field,Value);construct(Record,Field,Value) when record(Record,ir_ModuleDef) ->    construct(Record,record_info(fields,ir_ModuleDef),Field,Value);construct(Record,Field,Value) when record(Record,ir_ConstantDef) ->    construct(Record,record_info(fields,ir_ConstantDef),Field,Value);construct(Record,Field,Value) when record(Record,ir_TypedefDef) ->    construct(Record,record_info(fields,ir_TypedefDef),Field,Value);construct(Record,Field,Value) when record(Record,ir_StructDef) ->    construct(Record,record_info(fields,ir_StructDef),Field,Value);construct(Record,Field,Value) when record(Record,ir_UnionDef) ->    construct(Record,record_info(fields,ir_UnionDef),Field,Value);construct(Record,Field,Value) when record(Record,ir_EnumDef) ->    construct(Record,record_info(fields,ir_EnumDef),Field,Value);construct(Record,Field,Value) when record(Record,ir_AliasDef) ->    construct(Record,record_info(fields,ir_AliasDef),Field,Value);construct(Record,Field,Value) when record(Record,ir_PrimitiveDef) ->    construct(Record,record_info(fields,ir_PrimitiveDef),Field,Value);construct(Record,Field,Value) when record(Record,ir_StringDef) ->    construct(Record,record_info(fields,ir_StringDef),Field,Value);construct(Record,Field,Value) when record(Record,ir_WstringDef) ->    construct(Record,record_info(fields,ir_WstringDef),Field,Value);construct(Record,Field,Value) when record(Record,ir_SequenceDef) ->    construct(Record,record_info(fields,ir_SequenceDef),Field,Value);construct(Record,Field,Value) when record(Record,ir_ArrayDef) ->    construct(Record,record_info(fields,ir_ArrayDef),Field,Value);construct(Record,Field,Value) when record(Record,ir_ExceptionDef) ->    construct(Record,record_info(fields,ir_ExceptionDef),Field,Value);construct(Record,Field,Value) when record(Record,ir_AttributeDef) ->    construct(Record,record_info(fields,ir_AttributeDef),Field,Value);construct(Record,Field,Value) when record(Record,ir_OperationDef) ->    construct(Record,record_info(fields,ir_OperationDef),Field,Value);construct(Record,Field,Value) when record(Record,ir_InterfaceDef) ->    construct(Record,record_info(fields,ir_InterfaceDef),Field,Value);construct(Record,Field,Value) when record(Record,ir_FixedDef) ->    construct(Record,record_info(fields,ir_FixedDef),Field,Value);construct(Record,Field,Value) ->    orber:dbg("[~p] orber_ifr_utils:construct(~p, ~p, ~p);~n"	      "Unknown Record Type~n", 	      [?LINE, Record,Field,Value], ?DEBUG_LEVEL),    corba:raise(#'INTF_REPOS'{completion_status=?COMPLETED_NO}).construct(Record,Fields,Field,Value) ->    Index = index(Fields,Field),    setelement(?ELEMENT_OFFSET + Index,Record,Value).%%%----------------------------------------------------------------------%%% Read an object from the databaseget_object(Objref) ->%%% Use mnesia:dirty_read/1. It is much faster than doing a transaction.    case mnesia:dirty_read(Objref) of	[Res] ->	    Res;	[] ->	    [];	Other ->	    orber:dbg("[~p] orber_ifr_utils:get_object(~p);~n", 		      [?LINE, Other], ?DEBUG_LEVEL),	    corba:raise(#'INTF_REPOS'{completion_status=?COMPLETED_NO})    end.%%% This is the old code, with a transaction. We might have to revert back%%% to this at some future time...%%    _F = ?read_function(Objref),%%    read_result(ifr_transaction_read(_F)).%%%----------------------------------------------------------------------%%% Write an object to the databaseset_object(Object) ->    _F = fun() -> mnesia:write(Object) end,    write_result(ifr_transaction_write(_F)).%%%----------------------------------------------------------------------%%% Get the value of a field in a record in the DB

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?