blob: 4dc52cf07af13e2d468bee71f6fc049f85487a66 [file] [log] [blame]
%%%-------------------------------------------------------------------
%%% @author dlive
%%% @copyright (C) 2018, <COMPANY>
%%% @doc
%%%
%%% @end
%%% Created : 05. Mar 2018 2:06 PM
%%%-------------------------------------------------------------------
-module(type_register).
-author("dlive").
%% API
-export([init/0,regiest_foreign_native/1,lookup_foreign_type/1,lookup_native_type/1]).
-include("hessian.hrl").
-define(FOREIGN_NATIVE_TABLE,foreign_native_table).
-define(NATIVE_FOREIGN_TABLE,native_foreign_table).
init()->
case ets:info(?FOREIGN_NATIVE_TABLE) of
undefined ->
?FOREIGN_NATIVE_TABLE = ets:new(?FOREIGN_NATIVE_TABLE,[public,named_table]),
logger:info("init decoding foreign_native_table table",[]);
_ ->
ets:delete(?FOREIGN_NATIVE_TABLE),
?FOREIGN_NATIVE_TABLE = ets:new(?FOREIGN_NATIVE_TABLE,[public,named_table])
end,
case ets:info(?NATIVE_FOREIGN_TABLE) of
undefined ->
io:format("init decoding native_foreign_table table pid ~p~n",[self()]),
?NATIVE_FOREIGN_TABLE = ets:new(?NATIVE_FOREIGN_TABLE,[public,named_table]); %% public
_ ->
ets:delete(?NATIVE_FOREIGN_TABLE),
?NATIVE_FOREIGN_TABLE = ets:new(?NATIVE_FOREIGN_TABLE,[public,named_table])
end,
ok.
regiest_foreign_native(TypeDef)->
logger:debug("regiest foreign info ~p",[TypeDef]),
ets:insert(?FOREIGN_NATIVE_TABLE,{TypeDef#type_def.foreign_type,TypeDef}),
ets:insert(?NATIVE_FOREIGN_TABLE,{TypeDef#type_def.native_type,TypeDef}).
lookup_foreign_type(ForeignType)->
case ets:lookup(?FOREIGN_NATIVE_TABLE,ForeignType) of
[]->
undefined;
[{_,TypeDef}] ->
TypeDef
end.
lookup_native_type(NativeType)->
case ets:lookup(?NATIVE_FOREIGN_TABLE,NativeType) of
[]->
undefined;
[{_,TypeDef}] ->
TypeDef
end.