ic_cserver.erl
来自「OTP是开放电信平台的简称」· ERL 代码 · 共 2,101 行 · 第 1/5 页
ERL
2,101 行
mk_c_type(_G, _N, {void, _}, _) -> "void";mk_c_type(_G, _N, {unsigned, U}, _) -> case U of {short, _} -> "CORBA_unsigned_short"; {long, _} -> "CORBA_unsigned_long"; {'long long', _} -> "CORBA_unsigned_long_long" end;mk_c_type(_G, _N, {'long long', _}, _) -> "CORBA_long_long";mk_c_type(_G, _N, {'any', _}, _) -> %% Fix for any type "CORBA_long";mk_c_type(_G, _N, {T, _}, _) -> "CORBA_" ++ atom_to_list(T).%%------------------------------------------------------------%% Emit encoding statement%%------------------------------------------------------------%% emit_encoding_stmt(G, N, X, Fd, T, LName)%% %%emit_encoding_stmt(G, N, X, Fd, T, LName) when element(1, T) == scoped_id -> case mk_c_type(G, N, T, evaluate_not) of "erlang_pid" -> emit(Fd, " if ((oe_error_code = " "oe_ei_encode_pid(oe_env, ~s)) < 0) {\n", [LName]), emit_c_enc_rpt(Fd, " ", "oe_ei_encode_pid", []), emit(Fd, " return oe_error_code;\n }\n"); "erlang_port" -> emit(Fd, " if ((oe_error_code = " "oe_ei_encode_port(oe_env, ~s)) < 0) {\n", [LName]), emit_c_enc_rpt(Fd, " ", "oe_ei_encode_port", []), emit(Fd, " return oe_error_code;\n }\n"); "erlang_ref" -> emit(Fd, " if ((oe_error_code = " "oe_ei_encode_ref(oe_env, ~s)) < 0) {\n", [LName]), emit_c_enc_rpt(Fd, " ", "oe_ei_encode_ref", []), emit(Fd, " return oe_error_code;\n }\n"); "ETERM*" -> emit(Fd, " if ((oe_error_code = " "oe_ei_encode_term(oe_env, ~s)) < 0) {\n", [LName]), emit_c_enc_rpt(Fd, " ", "oe_ei_encode_term", []), emit(Fd, " return oe_error_code;\n }\n"); {enum, FSN} -> emit_encoding_stmt(G, N, X, Fd, FSN, LName); FSN -> emit_encoding_stmt(G, N, X, Fd, FSN, LName) end;emit_encoding_stmt(G, N, X, Fd, T, LName) when list(T) -> %% Already a fullscoped name case get_param_tk(LName, X) of error -> emit(Fd, " if ((oe_error_code = ~s~s(oe_env, ~s)) < 0) {\n", [ic_util:mk_oe_name(G, "encode_"), T, LName]); ParamTK -> case ic_cbe:is_variable_size(ParamTK) of true -> emit(Fd, " if ((oe_error_code = ~s~s(oe_env, ~s)) < 0)" " {\n", [ic_util:mk_oe_name(G, "encode_"), T, LName]), emit(Fd, " CORBA_exc_set(oe_env, " "CORBA_SYSTEM_EXCEPTION, " "BAD_PARAM, \"Bad operation parameter on encode\");" "\n"), ?emit_c_enc_rpt(Fd, " ", "", []), emit(Fd, " return oe_error_code;\n }\n\n"); false -> if atom(ParamTK) -> case ParamTK of tk_ushort -> emit(Fd, " if ((oe_error_code = " "oe_ei_encode_ulong(oe_env, " "(unsigned long) ~s)) < 0) {\n", [LName]), emit(Fd, " CORBA_exc_set(oe_env, " "CORBA_SYSTEM_EXCEPTION, " "BAD_PARAM, \"Bad operation " "parameter on encode\");\n"), ?emit_c_enc_rpt(Fd, " ", "ushort", []), emit(Fd, " return " "oe_error_code;\n }\n\n"); tk_ulong -> emit(Fd, " if ((oe_error_code = " "oe_ei_encode_ulong(oe_env, " "~s)) < 0) {\n", [LName]), emit(Fd, " CORBA_exc_set(oe_env, " "CORBA_SYSTEM_EXCEPTION, " "BAD_PARAM, \"Bad operation " "parameter on encode\");\n"), ?emit_c_enc_rpt(Fd, " ", "ulong", []), emit(Fd, " return " "oe_error_code;\n }\n\n"); tk_ulonglong -> emit(Fd, " if ((oe_error_code = " "oe_ei_encode_ulonglong(oe_env, " "~s)) < 0) {\n", [LName]), emit(Fd, " CORBA_exc_set(oe_env, " "CORBA_SYSTEM_EXCEPTION, " "BAD_PARAM, \"Bad operation " "parameter on encode\");\n"), ?emit_c_enc_rpt(Fd, " ", "ulonglong", []), emit(Fd, " return " "oe_error_code;\n }\n\n"); tk_short -> emit(Fd, " if ((oe_error_code = " "oe_ei_encode_long(oe_env, " "(long) ~s)) < 0) {\n", [LName]), emit(Fd, " CORBA_exc_set(oe_env, " "CORBA_SYSTEM_EXCEPTION, " "BAD_PARAM, \"Bad operation " "parameter on encode\");\n"), ?emit_c_enc_rpt(Fd, " ", "short", []), emit(Fd, " return " "oe_error_code;\n }\n\n"); tk_long -> emit(Fd, " if ((oe_error_code = " "oe_ei_encode_long(oe_env, " "~s)) < 0) {\n", [LName]), emit(Fd, " CORBA_exc_set(oe_env, " "CORBA_SYSTEM_EXCEPTION, " "BAD_PARAM, \"Bad operation " "parameter on encode\");\n"), ?emit_c_enc_rpt(Fd, " ", "long", []), emit(Fd, " return " "oe_error_code;\n }\n\n"); tk_longlong -> emit(Fd, " if ((oe_error_code = " "oe_ei_encode_longlong(oe_env, " "~s)) < 0) {\n", [LName]), emit(Fd, " CORBA_exc_set(oe_env, " "CORBA_SYSTEM_EXCEPTION, " "BAD_PARAM, \"Bad operation " "parameter on encode\");\n"), ?emit_c_enc_rpt(Fd, " ", "longlong", []), emit(Fd, " return " "oe_error_code;\n }\n\n"); tk_float -> emit(Fd, " if ((oe_error_code = " "oe_ei_encode_double(oe_env, " "(double) ~s)) < 0) {\n", [LName]), emit(Fd, " CORBA_exc_set(oe_env, " "CORBA_SYSTEM_EXCEPTION, " "BAD_PARAM, \"Bad operation " "parameter on encode\");\n"), ?emit_c_enc_rpt(Fd, " ", "float", []), emit(Fd, " return " "oe_error_code;\n }\n\n"); tk_double -> emit(Fd, " if ((oe_error_code = " "oe_ei_encode_double(oe_env, " "~s)) < 0) {\n", [LName]), emit(Fd, " CORBA_exc_set(oe_env, " "CORBA_SYSTEM_EXCEPTION, " "BAD_PARAM, \"Bad operation " "parameter on encode\");\n"), ?emit_c_enc_rpt(Fd, " ", "double", []), emit(Fd, " return " "oe_error_code;\n }\n\n"); tk_boolean -> emit(Fd, " switch(~s) {\n", [LName]), emit(Fd, " case 0 :\n"), emit(Fd, " if ((oe_error_code = " "oe_ei_encode_atom(oe_env, " "\"false\")) < 0) {\n"), emit(Fd, " CORBA_exc_set(oe_env, " "CORBA_SYSTEM_EXCEPTION, " "BAD_PARAM, \"Bad operation " "parameter on encode\");\n"), ?emit_c_enc_rpt(Fd, " ", "boolean", []), emit(Fd, " return " "oe_error_code;\n }\n"), emit(Fd, " break;\n"), emit(Fd, " case 1 :\n"), emit(Fd, " if ((oe_error_code = " "oe_ei_encode_atom(oe_env, " "\"true\")) < 0) {\n"), emit(Fd, " CORBA_exc_set(oe_env, " "CORBA_SYSTEM_EXCEPTION, " "BAD_PARAM, \"Bad operation " "parameter on encode\");\n"), ?emit_c_enc_rpt(Fd, " ", "boolean", []), emit(Fd, " return " "oe_error_code;\n }\n"), emit(Fd, " break;\n"), emit(Fd, " default :\n"), emit(Fd, " CORBA_exc_set(oe_env, " "CORBA_SYSTEM_EXCEPTION, " "BAD_PARAM, \"Bad operation " "parameter on encode\");\n"), ?emit_c_enc_rpt(Fd, " ", "boolean", []), emit(Fd, " return -1;\n"), emit(Fd, " }\n\n"); tk_char -> emit(Fd, " if ((oe_error_code = " "oe_ei_encode_char(oe_env, " "~s)) < 0) {\n", [LName]), emit(Fd, " CORBA_exc_set(oe_env, " "CORBA_SYSTEM_EXCEPTION, " "BAD_PARAM, \"Bad operation " "parameter on encode\");\n"), ?emit_c_enc_rpt(Fd, " ", "char", []), emit(Fd, " return " "oe_error_code;\n }\n\n"); tk_wchar -> %% WCHAR emit(Fd, " if ((oe_error_code = " "oe_ei_encode_wchar(oe_env, " "~s)) < 0) {\n", [LName]), emit(Fd, " CORBA_exc_set(oe_env, " "CORBA_SYSTEM_EXCEPTION, " "BAD_PARAM, \"Bad operation " "parameter on encode\");\n"), ?emit_c_enc_rpt(Fd, " ", "wchar", []), emit(Fd, " return " "oe_error_code;\n }\n\n"); tk_octet -> emit(Fd, " if ((oe_error_code = " "oe_ei_encode_char(oe_env, " "~s)) < 0) {\n", [LName]), emit(Fd, " CORBA_exc_set(oe_env, " "CORBA_SYSTEM_EXCEPTION, " "BAD_PARAM, \"Bad operation " "parameter on encode\");\n"), ?emit_c_enc_rpt(Fd, " ", "octet", []), emit(Fd, " return " "oe_error_code;\n }\n\n"); tk_any -> emit(Fd, " if ((oe_error_code = " "oe_ei_encode_long(oe_env, " "~s)) < 0) {\n", [LName]), emit(Fd, " CORBA_exc_set(oe_env, " "CORBA_SYSTEM_EXCEPTION, " "BAD_PARAM, \"Bad operation " "parameter on encode\");\n"), ?emit_c_enc_rpt(Fd, " ", "any", []), emit(Fd, " return " "oe_error_code;\n }\n\n"); _ -> emit(Fd, " CORBA_exc_set(oe_env, " "CORBA_SYSTEM_EXCEPTION, " "BAD_PARAM, \"Bad operation " "parameter on encode\");\n"), ?emit_c_enc_rpt(Fd, " ", "tk_unknown", []), emit(Fd, " return " "oe_error_code;\n }\n\n"), ok end; true -> case element(1, ParamTK) of tk_enum -> emit(Fd, " if ((oe_error_code = " "~s~s(oe_env, ~s)) < 0) {\n", [ic_util:mk_oe_name(G, "encode_"), T, LName]), ?emit_c_enc_rpt(Fd, " ", "enum", []); tk_array -> emit(Fd, " if ((oe_error_code = " "~s~s(oe_env, ~s)) < 0) {\n", [ic_util:mk_oe_name(G, "encode_"), T, LName]), ?emit_c_enc_rpt(Fd, " ", "array", []); _ -> emit(Fd, " if ((oe_error_code = " "~s~s(oe_env, &~s)) < 0) {\n", [ic_util:mk_oe_name(G, "encode_"), T, LName]), ?emit_c_enc_rpt(Fd, " ", "", []) end, emit(Fd, " CORBA_exc_set(oe_env, " "CORBA_SYSTEM_EXCEPTION, " "BAD_PARAM, \"Bad operation " "parameter on encode\");\n"), emit(Fd, " return oe_error_code;\n }\n\n") end end end;emit_encoding_stmt(G, N, _X, Fd, T, LName) when record(T, string) -> emit(Fd, " if ((oe_error_code = " "oe_ei_encode_string(oe_env, (const char*) ~s)) < 0) {\n", [LName]), emit(Fd, " CORBA_exc_set(oe_env, CORBA_SYSTEM_EXCEPTION, " "BAD_PARAM, \"Cannot encode string\");\n"), ?emit_c_enc_rpt(Fd, " ", "string", []), emit(Fd, " return oe_error_code;\n }\n\n");emit_encoding_stmt(G, N, _X, Fd, T, LName) when record(T, wstring) -> emit(Fd, " if ((oe_error_code = " "oe_ei_encode_wstring(oe_env, ~s)) < 0) {\n", [LName]), ?emit_c_enc_rpt(Fd, " ", "wstring", []), emit(Fd, " CORBA_exc_set(oe_env, CORBA_SYSTEM_EXCEPTION, " "BAD_PARAM, \"Cannot encode string\");\n"), emit(Fd, " return oe_error_code;\n }\n\n");emit_encoding_stmt(G, N, _X, Fd, T, LName) -> case T of {unsigned, {short, _}} -> emit(Fd, " if ((oe_error_code = " "oe_ei_encode_ulong(oe_env, (unsigned long) ~s)) < 0) {\n", [LName]), ?emit_c_enc_rpt(Fd, " ", "ushort", []), emit(Fd, " CORBA_exc_set(oe_env, CORBA_SYSTEM_EXCEPTION, " "BAD_PARAM, \"Bad operation parameter on encode\");\n"), emit(Fd, " return oe_error_code;\n }\n\n"); {unsigned, {long, _}} -> emit(Fd, " if ((oe_error_code = " "oe_ei_encode_ulong(oe_env, ~s)) < 0) {\n", [LName]), ?emit_c_enc_rpt(Fd, " ", "ulong", []), emit(Fd, " CORBA_exc_set(oe_env, CORBA_SYSTEM_EXCEPTION, " "BAD_PARAM, \"Bad operation parameter on encode\");\n"), emit(Fd, " return oe_error_code;\n }\n\n"); {unsigned, {'long long', _}} -> emit(Fd, " if ((oe_error_code = " "oe_ei_encode_ulonglong(oe_env, ~s)) < 0) {\n", [LName]), ?emit_c_enc_rpt(Fd, " ", "ulonglong", []), emit(Fd, " CORBA_exc_set(oe_env, CORBA_SYSTEM_EXCEPTION, " "BAD_PARAM, \"Bad operation parameter on encode\");\n"), emit(Fd, " return oe_error_code;\n }\n\n"); {short, _} -> emit(Fd, " if ((oe_error_code = " "oe_ei_encode_long(oe_env, (long) ~s)) < 0) {\n", [LName]), ?emit_c_enc_rpt(Fd, " ", "short", []), emit(Fd, " CORBA_exc_set(oe_env, CORBA_SYSTEM_EXCEPTION, " "BAD_PARAM, \"Bad operation parameter on encode\");\n"), emit(Fd, " return oe_error_code;\n }\n\n"); {long, _} -> emit(Fd, " if ((oe_error_code = " "oe_ei_encode_long(oe_env, ~s)) < 0) {\n", [LName]), ?emit_c_enc_rpt(Fd, " ", "long", []), emit(Fd, " CORBA_exc_set(oe_env, CORBA_SYSTEM_EXCEPTION, " "BAD_PARAM, \"Bad operation parameter on encode\");\n"), emit(Fd, " return oe_error_code;\n }\n\n"); {'long long', _} -> emit(Fd, " if ((oe_error_code = " "oe_ei_encode_longlong(oe_env, ~s)) < 0) {\n", [LName]), ?emit_c_enc_rpt(Fd, " ", "longlong", []), emit(Fd, " CORBA_exc_set(oe_env, CORBA_SYSTEM_EXCEPTION, " "BAD_PARAM, \"Bad operation parameter on encode\");\n"), emit(Fd, " return oe_error_code;\n }\n\n"); {float, _} -> emit(Fd, " if ((oe_error_code = " "oe_ei_encode_double(oe_env, (double) ~s)) < 0) {\n", [LName]), ?emit_c_enc_rpt(Fd, " ", "float", []), emit(Fd, " CORBA_exc_set(oe_env, CORBA_SYSTEM_EXCEPTION, " "BAD_PARAM, \"Bad operation parameter on encode\");\n"), emit(Fd, " return oe_error_code;\n }\n\n"); {double, _} -> emit(Fd, " if ((oe_error_code = " "oe_ei_encode_double(oe_env, ~s)) < 0) {\n", [LName]), ?emit_c_enc_rpt(Fd, " ", "double", []), emit(Fd, " CORBA_exc_set(oe_env, CORBA_SYSTEM_EXCEPTION, " "BAD_PARAM, \"Bad operation parameter on encode\");\n"), emit(Fd, " return oe_error_code;\n }\n\n"); {boolean, _} -> emit(Fd, " switch(~s) {\n", [LName]), emit(Fd, " case 0 :\n"), emit(Fd, " if ((oe_error_code = " "oe_ei_encode_atom(oe_env, \"false\")) < 0) {\n"), ?emit_c_enc_rpt(Fd, " ", "boolean", []), emit(Fd, " CORBA_exc_set(oe_env, CORBA_SYSTEM_EXCEPTION, " "BAD_PARAM, \"Bad operation parameter on encode\");\n"), emit(Fd, " return oe_error_code;\n }\n"), emit(Fd, " break;\n"), emit(Fd, " case 1 :\n"), emit(Fd, " if ((oe_error_code = " "oe_ei_encode_atom(oe_env, \"true\")) < 0) {\n"), ?emit_c_enc_rpt(Fd, " ", "boolean", []), emit(Fd, " CORBA_exc_set(oe_env, CORBA_SYSTEM_EXCEPTION, " "BAD_PARAM, \"Bad operation parameter on encode\");\n"), emit(Fd, " return oe_error_code;\n }\n"), emit(Fd, " break;\n"), emit(Fd, " default :\n"), ?emit_c_enc_rpt(Fd, " ", "boolean", []), emit(Fd, " CORBA_exc_set(oe_env, CORBA_SYSTEM_EXCEPTION, " "BAD_PARAM, \"Bad operation parameter on encode\");\n"), emit(Fd, " return -1;\n"), emit(Fd, " }\n\n"); {char, _} -> emit(Fd, " if ((oe_error_code = " "oe_ei_encode_char(oe_env, ~s)) < 0) {\n", [LName]), ?emit_c_enc_rpt(Fd, " ", "char", []), emit(Fd, " CORBA_exc_set(oe_env, CORBA_SYSTEM_EXCEPTION, " "BAD_PARAM, \"Bad operation parameter on encode\");\n"), emit(Fd, " return oe_error_code;\n }\n\n"); {wchar, _} -> %% WCHAR emit(Fd, " if ((oe_error_code = " "oe_ei_encode_wchar(oe_env, ~s)) < 0) {\n", [LName]), ?emit_c_enc_rpt(Fd, " ", "wchar", []), emit(Fd, " CORBA_exc_set(oe_env, CORBA_SYSTEM_EXCEPTION, " "BAD_PARAM, \"Bad operation parameter on encode\");\n"), emit(Fd, " return oe_error_code;\n }\n\n"); {octet, _} -> emit(Fd, " if ((oe_error_code = " "oe_ei_encode_char(oe_env, ~s)) < 0) {\n", [LName]), ?emit_c_enc_rpt(Fd, " ", "octet", []), emit(Fd, " CORBA_exc_set(oe_env, CORBA_SYSTEM_EXCEPTION, " "BAD_PARAM, \"Bad operation parameter on encode\");\n"), emit(Fd, " return oe_error_code;\n }\n\n"); {void, _} -> emit(Fd, " if ((oe_error_code = " "oe_ei_encode_atom(oe_env, \"void\")) < 0) {\n"), ?emit_c_enc_rpt(Fd, " ", "
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?