diff options
Diffstat (limited to 'lib/orber/src/ifr_objects.hrl')
-rw-r--r-- | lib/orber/src/ifr_objects.hrl | 421 |
1 files changed, 421 insertions, 0 deletions
diff --git a/lib/orber/src/ifr_objects.hrl b/lib/orber/src/ifr_objects.hrl new file mode 100644 index 0000000000..0d7c30a86c --- /dev/null +++ b/lib/orber/src/ifr_objects.hrl @@ -0,0 +1,421 @@ +%%-------------------------------------------------------------------- +%% +%% %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)]). |