%%--------------------------------------------------------------------
%%
%% %CopyrightBegin%
%%
%% Copyright Ericsson AB 1997-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 : ir_objects.hrl
%%% Purpose : Record definitions for the IR DB
%%%----------------------------------------------------------------------
%%%----------------------------------------------------------------------
%%% *********************************************************************
%%% * *
%%% * PLEASE NOTE *
%%% * *
%%% * If a record is removed or added in this file, the corresponding *
%%% * database initialization code _MUST_ be updated accordingly. *
%%% * *
%%% * The initialization code is defined in a macro in this file. *
%%% * *
%%% * Also remember to update select/2 in orber_ifr.erl when adding *
%%% * or deleting a record in this file. *
%%% * *
%%% *********************************************************************
%%%----------------------------------------------------------------------
%% Interface objects
%% There are eight interface objects in an interface repository:
%% Repository, ModuleDef, InterfaceDef, AttributeDef, OperationDef,
%% TypedefDef, ConstantDef and ExceptionDef (CORBA V2.0, page 6-5/6).
% The other objects defined here are used to build the above objects
% (CORBA V2.0, page 6-7).
% Object references are stored as mnesia object IDs, i.e. a tuple with
% the table name and the ir_Internal_ID.
% Inheritance strategy. We incorporate the inherited object into the
% inheriting object. The record element 'inherited_objects' is a list
% of objects that "this" object inherits from (i.e. full object
% records and not object references).
% The record element 'ir_Internal_ID' is a tag that uniquely
% identifies a record. See the function orber_ifr:unique().
% IRObject, page 6-9
-record(ir_IRObject, {ir_Internal_ID,def_kind}).
% Contained, page 6-9
-record(ir_Contained, {ir_Internal_ID, %[IRObject]
def_kind, %from IRObject
id,
name,
version,
defined_in,
absolute_name,
containing_repository}).
% Container, page 6-10
-record(ir_Container, {ir_Internal_ID, %[IRObject]
def_kind, %from IRObject
contents}).
% IDLType, page 6-15
-record(ir_IDLType, {ir_Internal_ID, %[IRObject]
def_kind, %from IRObject
type}).
% Repository, page 6-16
-record(ir_Repository, {ir_Internal_ID, %[Container]
def_kind, %from IRObject
contents, %from Container
primitivedefs}).
% ModuleDef, page 6-17
-record(ir_ModuleDef, {ir_Internal_ID, %[Container,Contained]
def_kind, %from IRObject
contents, %from Container
id, %from Contained
name, %from Contained
version, %from Contained
defined_in, %from Contained
absolute_name, %from Contained
containing_repository %from Contained
}).
% ConstantDef, page 6-17
-record(ir_ConstantDef, {ir_Internal_ID, %[Contained]
def_kind, %from IRObject
id, %from Contained
name, %from Contained
version, %from Contained
defined_in, %from Contained
absolute_name, %from Contained
containing_repository, %from Contained
type,
type_def,
value}).
% TypedefDef, page 6-18
-record(ir_TypedefDef, {ir_Internal_ID, %[Contained,IDLType]
def_kind, %from IRObject
id, %from Contained
name, %from Contained
version, %from Contained
defined_in, %from Contained
absolute_name, %from Contained
containing_repository, %from Contained
type %from IDLType
}).
% StructDef, page 6-19
-record(ir_StructDef, {ir_Internal_ID, %[TypedefDef]
def_kind, %from IRObject
id, %from Contained
name, %from Contained
version, %from Contained
defined_in, %from Contained
absolute_name, %from Contained
containing_repository, %from Contained
type, %from IDLType
members}).
% UnionDef, page 6-19
-record(ir_UnionDef, {ir_Internal_ID, %[TypedefDef]
def_kind, %from IRObject
id, %from Contained
name, %from Contained
version, %from Contained
defined_in, %from Contained
absolute_name, %from Contained
containing_repository, %from Contained
type, %from IDLType
discriminator_type,
discriminator_type_def,
members}).
% EnumDef, page 6-20
-record(ir_EnumDef, {ir_Internal_ID, %[TypedefDef]
def_kind, %from IRObject
id, %from Contained
name, %from Contained
version, %from Contained
defined_in, %from Contained
absolute_name, %from Contained
containing_repository, %from Contained
type, %from IDLType
members}).
% AliasDef, page 6-21
-record(ir_AliasDef, {ir_Internal_ID, %[TypedefDef]
def_kind, %from IRObject
id, %from Contained
name, %from Contained
version, %from Contained
defined_in, %from Contained
absolute_name, %from Contained
containing_repository, %from Contained
type, %from IDLType
original_type_def}).
% PrimitiveDef, page 6-21
-record(ir_PrimitiveDef, {ir_Internal_ID, %[IDLType]
def_kind, %from IRObject
type, %from IDLType
kind}).
% StringDef, page 6-22
-record(ir_StringDef, {ir_Internal_ID, %[IDLType]
def_kind, %from IRObject
type, %from IDLType
bound}).
-record(ir_WstringDef, {ir_Internal_ID, %[IDLType]
def_kind, %from IRObject
type, %from IDLType
bound}).
% SequenceDef, page 6-22
-record(ir_SequenceDef, {ir_Internal_ID, %[IDLType]
def_kind, %from IRObject
type, %from IDLType
bound,
element_type,
element_type_def}).
% ArrayDef, page 6-23
-record(ir_ArrayDef, {ir_Internal_ID, %[IDLType]
def_kind, %from IRObject
type, %from IDLType
length,
element_type,
element_type_def}).
% ExceptionDef, page 6-23
-record(ir_ExceptionDef, {ir_Internal_ID, %[Contained]
def_kind, %from IRObject
id, %from Contained
name, %from Contained
version, %from Contained
defined_in, %from Contained
absolute_name, %from Contained
containing_repository, %from Contained
type,
members}).
% AttributeDef, page 6-24
-record(ir_AttributeDef, {ir_Internal_ID, %[Contained]
def_kind, %from IRObject
id, %from Contained
name, %from Contained
version, %from Contained
defined_in, %from Contained
absolute_name, %from Contained
containing_repository, %from Contained
type,
type_def,
mode}).
% OperationDef, page 6-25
-record(ir_OperationDef, {ir_Internal_ID, %[Contained]
def_kind, %from IRObject
id, %from Contained
name, %from Contained
version, %from Contained
defined_in, %from Contained
absolute_name, %from Contained
containing_repository, %from Contained
result,
result_def,
params,
mode,
contexts,
exceptions}).
% InterfaceDef, page 6-27
-record(ir_InterfaceDef, {ir_Internal_ID, %[Container,Contained,IDLType]
def_kind, %from IRObject
contents, %from Container
id, %from Contained
name, %from Contained
version, %from Contained
defined_in, %from Contained
absolute_name, %from Contained
containing_repository, %from Contained
type, %from IDLType
base_interfaces}).
% TypeCode, page 6-33
-record(ir_FixedDef, {ir_Internal_ID, %[IDLType]
def_kind, %from IRObject
type, %from IDLType
digits,
scale}).
% TypeCodes cannot be defined as records, since each type code has a
% quite unique structure depending on the type. The old TypeCode
% record definition is left here as a comment in case we want to
% change back to the old style.
%% ir_TypeCode does not have a field ir_Internal_ID. TypeCodes are
%% never explicitly written to the database as separate DB-records.
%% TypeCodes are stored as full records whenever they are used in an
%% IFR-object.
%%-record(ir_TypeCode, {kind,
%% parameter_list}).
% ORB, page 6-39
-record(ir_ORB, {ir_Internal_ID, % *** Do we need any attributes
dummy}). % for this table? ORB is a pseudo-
% object so perhaps the table is
% unnecessary?
-record(orber_light_ifr, {id, %% IFR-id
module,
type,
base_id}).
-define(IFR_ModuleDef, 0).
-define(IFR_ConstantDef, 1).
-define(IFR_StructDef, 2).
-define(IFR_UnionDef, 3).
-define(IFR_EnumDef, 4).
-define(IFR_AliasDef, 5).
-define(IFR_InterfaceDef, 6).
-define(IFR_ExceptionDef, 7).
%%%----------------------------------------------------------------------
%%% 'ifr_object_list' is used by other modules. Do NOT remove or rename
%%% this list!
%%% An addition or deletion of a record above must be duplicated here in
%%% this list and in the macro 'ifr_record_tuple_list' below.
-define(ifr_object_list, [ir_ModuleDef,
ir_Contained,
ir_AttributeDef,
ir_Repository,
ir_OperationDef,
ir_InterfaceDef,
ir_TypedefDef,
ir_Container,
ir_EnumDef,
ir_UnionDef,
ir_StringDef,
ir_WstringDef,
ir_ORB,
ir_IDLType,
ir_ExceptionDef,
ir_IRObject,
ir_PrimitiveDef,
ir_ArrayDef,
ir_AliasDef,
ir_ConstantDef,
ir_StructDef,
ir_SequenceDef,
ir_FixedDef]).
-define(ifr_light_object_list, [orber_light_ifr]).
-define(cr_fun_tuple(Table, Options),
{Table,
fun() ->
case mnesia:create_table(Table,[{attributes,
record_info(fields,
Table)}]++Options)of
{atomic,ok} ->
ok;
R ->
R
end
end}
).
-define(cr_fun_tuple_local(Table, IFR_storage_type),
{Table,
fun() ->
case mnesia:add_table_copy(Table,node(), IFR_storage_type)of
{atomic,ok} ->
ok;
R ->
R
end
end}
).
-define(ifr_record_tuple_list(Options),
[?cr_fun_tuple(ir_IRObject, Options),
?cr_fun_tuple(ir_Contained, [{index, [#ir_Contained.id]}|Options]),
?cr_fun_tuple(ir_Container, Options),
?cr_fun_tuple(ir_IDLType, Options),
?cr_fun_tuple(ir_Repository, Options),
?cr_fun_tuple(ir_ModuleDef, [{index, [#ir_ModuleDef.id]}|Options]),
?cr_fun_tuple(ir_ConstantDef, [{index, [#ir_ConstantDef.id]}|Options]),
?cr_fun_tuple(ir_TypedefDef, [{index, [#ir_TypedefDef.id]}|Options]),
?cr_fun_tuple(ir_StructDef, [{index, [#ir_StructDef.id]}|Options]),
?cr_fun_tuple(ir_UnionDef, [{index, [#ir_UnionDef.id]}|Options]),
?cr_fun_tuple(ir_EnumDef, [{index, [#ir_EnumDef.id]}|Options]),
?cr_fun_tuple(ir_AliasDef, [{index, [#ir_AliasDef.id]}|Options]),
?cr_fun_tuple(ir_PrimitiveDef, Options),
?cr_fun_tuple(ir_StringDef, Options),
?cr_fun_tuple(ir_WstringDef, Options),
?cr_fun_tuple(ir_SequenceDef, Options),
?cr_fun_tuple(ir_ArrayDef, Options),
?cr_fun_tuple(ir_ExceptionDef, [{index, [#ir_ExceptionDef.id]}|Options]),
?cr_fun_tuple(ir_AttributeDef, [{index, [#ir_AttributeDef.id]}|Options]),
?cr_fun_tuple(ir_OperationDef, [{index, [#ir_OperationDef.id]}|Options]),
?cr_fun_tuple(ir_InterfaceDef, [{index, [#ir_InterfaceDef.id]}| Options]),
% ?cr_fun_tuple(ir_TypeCode, Options),
?cr_fun_tuple(ir_ORB, Options),
?cr_fun_tuple(ir_FixedDef, Options)]).
-define(ifr_light_record_tuple_list(Options),
[?cr_fun_tuple(orber_light_ifr, Options)]).
-define(ifr_record_tuple_list_local(IFR_storage_type),
[?cr_fun_tuple_local(ir_IRObject, IFR_storage_type),
?cr_fun_tuple_local(ir_Contained, IFR_storage_type),
?cr_fun_tuple_local(ir_Container, IFR_storage_type),
?cr_fun_tuple_local(ir_IDLType, IFR_storage_type),
?cr_fun_tuple_local(ir_Repository, IFR_storage_type),
?cr_fun_tuple_local(ir_ModuleDef, IFR_storage_type),
?cr_fun_tuple_local(ir_ConstantDef, IFR_storage_type),
?cr_fun_tuple_local(ir_TypedefDef, IFR_storage_type),
?cr_fun_tuple_local(ir_StructDef, IFR_storage_type),
?cr_fun_tuple_local(ir_UnionDef, IFR_storage_type),
?cr_fun_tuple_local(ir_EnumDef, IFR_storage_type),
?cr_fun_tuple_local(ir_AliasDef, IFR_storage_type),
?cr_fun_tuple_local(ir_PrimitiveDef, IFR_storage_type),
?cr_fun_tuple_local(ir_StringDef, IFR_storage_type),
?cr_fun_tuple_local(ir_WstringDef, IFR_storage_type),
?cr_fun_tuple_local(ir_SequenceDef, IFR_storage_type),
?cr_fun_tuple_local(ir_ArrayDef, IFR_storage_type),
?cr_fun_tuple_local(ir_ExceptionDef, IFR_storage_type),
?cr_fun_tuple_local(ir_AttributeDef, IFR_storage_type),
?cr_fun_tuple_local(ir_OperationDef, IFR_storage_type),
?cr_fun_tuple_local(ir_InterfaceDef, IFR_storage_type),
% ?cr_fun_tuple_local(ir_TypeCode, IFR_storage_type),
?cr_fun_tuple_local(ir_ORB, IFR_storage_type),
?cr_fun_tuple_local(ir_FixedDef, IFR_storage_type)]).
-define(ifr_light_record_tuple_list_local(IFR_storage_type),
[?cr_fun_tuple_local(orber_light_ifr, IFR_storage_type)]).