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 + -
显示快捷键?