%%--------------------------------------------------------------------
%%
%% %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 : orber_ifr_orb.erl
%% Purpose : Code for Orb
%%----------------------------------------------------------------------
-module(orber_ifr_orb).
-export([create_struct_tc/3,
create_union_tc/4,
create_enum_tc/3,
create_alias_tc/3,
create_exception_tc/3,
create_interface_tc/2,
create_string_tc/1,
create_wstring_tc/1,
create_sequence_tc/2,
create_recursive_sequence_tc/2,
create_array_tc/2
]).
-include("orber_ifr.hrl").
-include_lib("orber/include/ifr_types.hrl").
-include_lib("orber/include/corba.hrl").
%%%======================================================================
%%% ORB
%%%----------------------------------------------------------------------
%%% Inherited interfaces
%% none %%
%%%----------------------------------------------------------------------
%%% Non-inherited interfaces
create_struct_tc(Id, Name, Members) ->
{tk_struct,Id,Name,lists:map(fun(#structmember{name=MemName,type=Type}) ->
{MemName,Type} end,
Members)}.
create_union_tc(Id, Name, Discriminator_type, Members) ->
{tk_union, Id, Name, Discriminator_type, -1, % *** is -1 correct???
lists:map(fun(#unionmember{name=MemName, label=Label, type=Type}) ->
{Label,MemName,Type} end,
Members)}.
create_enum_tc(Id, Name, Members) ->
{tk_enum, Id, Name, Members}.
create_alias_tc(Id, Name, Original_type) ->
{tk_alias, Id, Name, orber_ifr_utils:get_field(Original_type,type)}.
create_exception_tc(Id, Name, Members) ->
{tk_except,Id,Name,lists:map(fun(#structmember{name=MemName,type=Type}) ->
{MemName,Type} end,
Members)}.
create_interface_tc(Id, Name) ->
{tk_objref, Id, Name}.
create_string_tc(Bound) ->
{tk_string, Bound}.
create_wstring_tc(Bound) ->
{tk_wstring, Bound}.
create_sequence_tc(Bound, Element_type) ->
{tk_sequence,Element_type,Bound}.
create_recursive_sequence_tc(Bound, Offset) ->
orber:dbg("[~p] ~p:create_recursive_sequence_tc(~p, ~p);~n"
"Create_recursive_sequence is not implemented.~n",
[?LINE, ?MODULE, Bound, Offset], ?DEBUG_LEVEL),
corba:raise(#'INTF_REPOS'{completion_status=?COMPLETED_NO}).
create_array_tc(Length, Element_type) ->
{tk_array, Element_type, Length}.