|
|
-
- %% 常用atom定为macro
- -define(TRUE, true).
- -define(FALSE, false).
- -define(BREAK, break).
- -define(BREAK(Value), {?BREAK, Value}).
- -define(CONTINUE, continue).
- -define(CONTINUE(Value), {?CONTINUE, Value}).
- -define(UNDEFINED, undefined).
-
- %% 三目元算符
- -define(ITE(Cond, Then, That), case Cond of true -> Then; _ -> That end).
-
- %%汉字unicode编码范围 0x4e00 - 0x9fa5
- -define(UNICODE_CHINESE_BEGIN, (4 * 16 * 16 * 16 + 14 * 16 * 16)).
- -define(UNICODE_CHINESE_END, (9 * 16 * 16 * 16 + 15 * 16 * 16 + 10 * 16 + 5)).
-
- -compile({parse_transform, module_strengthen}).
-
-
-
- -define(ifdo(__CONDS, __DO), ?func(case __CONDS of ?true -> __DO;_ -> false end)()).
- -define(ifdo_else(__CONDS, __DO, _ELSE), ?func(case __CONDS of ?true -> __DO;_ -> _ELSE end)()).
- -define(inline(__FUN, __ARGCOUNT), -compile({inline, [__FUN / __ARGCOUNT]})).
-
- -define(format(__FORMAT, __DATA), io_lib:format(__FORMAT, __DATA)).
-
- %% format_record(record名, record数据) -> [{#record.field, record_field_value}]
- -define(format_record(__RECORD_NAME, __RECORD_DATA),
- fun() ->
- __Fields = record_info(fields, __RECORD_NAME),
- [_ | __DATA] = tuple_to_list(__RECORD_DATA),
- {__RECORD_NAME, lists:zip(__Fields, __DATA)}
- end()).
-
- -define(block(__BLOCK), begin __BLOCK end).
-
- -define(CONFIG(__KEY), ?CONFIG(__KEY, undefined)).
-
- -define(CONFIG(__KEY, __DEF), (fun() ->
- case application:get_env(__KEY) of
- {ok, Val} -> Val;
- _ -> __DEF
- end
- end)()).
-
- -define(CONFIG(__KEY, __SUBKEY, __DEF), (fun() ->
- case application:get_env(__KEY) of
- {ok, Val} when is_list(Val) ->
- proplists:get_value(__SUBKEY, Val, __DEF);
- _ -> __DEF
- end
- end)()).
-
- -define(LOG_DEBUG(__DATA), ?LOG_DEBUG("~p", [__DATA])).
- -define(LOG_DEBUG(__FMT, __DATA), io:format("[DEBUG] S(~p) M(~p) L(~p)~n" ++ __FMT ++ "~n", [self(), ?MODULE, ?LINE] ++ __DATA)).
-
- -define(LOG_ERROR(__DATA), ?LOG_ERROR("~p", [__DATA])).
- -define(LOG_ERROR(__FMT, __DATA), io:format("[ERROR] S(~p) M(~p) L(~p)~n" ++ __FMT ++ "~n", [self(), ?MODULE, ?LINE] ++ __DATA)).
-
- -define(LOG_INFO(__DATA), ?LOG_INFO("~p", [__DATA])).
- -define(LOG_INFO(__FMT, __DATA), io:format("[INFO] S(~p) M(~p) L(~p)~n" ++ __FMT ++ "~n", [com_type:to_list(self()),
- com_type:to_list(?MODULE),
- com_type:to_list(?LINE)] ++ __DATA)).
-
- -define(LAGER_DEBUG(__DATA), ?LAGER_DEBUG("~p", [__DATA])).
-
- -define(LAGER_DEBUG(__FORMAT, __DATA), ?LARGER_LOG(debug, __FORMAT, __DATA)).
-
- -define(LAGER_INFO(__DATA), ?LARGER_LOG(info, "~p", [__DATA])).
-
- -define(LAGER_INFO(__FORMAT, __DATA), ?LARGER_LOG(info, __FORMAT, __DATA)).
-
-
- -define(LAGER_WARNING(__DATA), ?LARGER_LOG(warning, "~p", [__DATA])).
-
- -define(LAGER_WARNING(__FORMAT, __DATA), ?LARGER_LOG(warning, __FORMAT, __DATA)).
-
- -define(LAGER_ERROR(__DATA), ?LARGER_LOG(error, "~p", [__DATA])).
-
- -define(LAGER_ERROR(__FORMAT, __DATA), ?LARGER_LOG(error, __FORMAT, __DATA)).
-
-
-
-
- -define(LARGER_LOG(__LEVEL, __FORMAT, __DATA), lager:log(__LEVEL, self(), "M(~p)L(~p)S(~p) ~n" ++ __FORMAT, [?MODULE, ?LINE, self()] ++ __DATA)).
-
- -define(debug_kv(__K_V_LIST), lists:foldl(fun({K, V}, Str) -> ?format("~s ~p(~p)", [Str, K, V]) end, "", __K_V_LIST)).
-
- -define(return(__RETURN), throw(__RETURN)).
-
- -define(exit(__EXIT), {'EXIT', __EXIT}).
- -define(exit(__BASE, __REASON), ?exit({__BASE, __REASON})).
-
- -define(tmlm(__TAG, __MODULE, __LINE, __MSG), {__TAG, {__MODULE, __LINE}, __MSG}).
-
- -define(err(__ERR), ?err_match(?MODULE, ?LINE, __ERR)).
- -define(err_match(__ERR), ?err_match(_, _, __ERR)).
- -define(err_match(__MODULE, __LINE, __ERR), ?tmlm(err, __MODULE, __LINE, __ERR)).
-
- -define(ok(__OK), ?ok_match(?MODULE, ?LINE, __OK)).
- -define(ok_match(__OK), ?ok_match(_, _, __OK)).
- -define(ok_match(__MODULE, __LINE, __OK), ?tmlm(ok, __MODULE, __LINE, __OK)).
-
- -define(notknow(__NOTKNOW), ?notknow_match(?MODULE, ?LINE, __NOTKNOW)).
- -define(notknow_match(__NOTKNOW), ?notknow_match(_, _, __NOTKNOW)).
- -define(notknow_match(__MODULE, __LINE, __NOTKNOW), ?tmlm(notknow, __MODULE, __LINE, __NOTKNOW)).
-
- -define(pack_sendbinary(__Binary), {?MODULE, ?LINE, __Binary}).
-
- -define(noreply(__State), {noreply, __State}).
- -define(stop(__Reason, __NewState), {stop, __Reason, __NewState}).
-
- -define(self, self()).
-
- -define(msg(__MSG), {msg, ?MODULE, ?LINE, __MSG}).
-
- -define(send_msg(__MSG), ?send_msg(?self, __MSG)).
- -define(send_msg(__SENDER, __MSG), (__SENDER ! __MSG)).
-
- -define(func(__Fun), fun() -> __Fun end).
-
- -define(get_value(__KEY, __LIST), ?get_value(__KEY, __LIST, ?undefined)).
- -define(get_value(__KEY, __LIST, __DEFAULT), common:get_value(__KEY, __LIST, __DEFAULT)).
-
- %% base
- -define(amc(__MFA, __Options, Module, Line), fun() ->
- case catch __MFA of
- ?exit(Way, _) ->
- ErrMsg = ?get_value(Way, __Options, {Way, undefined}),
- Debug = ?get_value(debug, __Options, not_defined),
- ?LAGER_ERROR("M(~p)L(~p) D(~p) ErrMsg(~p) stacktrace(~p)", [Module, Line, Debug, ErrMsg, erlang:get_stacktrace()]),
- error({undef, __MFA});
- Ret -> Ret
- end
- end()).
-
- %% api
- -define(amc(__MFA), ?amc(__MFA, [], ?MODULE, ?LINE)).
- %% api
- -define(amc(__MFA, __Options), ?amc(__MFA, __Options, ?MODULE, ?LINE)).
-
- -define(catch_exp(__EXP), fun() -> catch __EXP end()).
-
- -define(SYSTE_PROCESS(__TRUE_OR_FLASE), erlang:process_flag(trap_exit, __TRUE_OR_FLASE)).
-
- -record(boot, {module :: atom(), type :: boot_type(), hasname = true :: boolean(), params :: any()}).
-
- -define(boot_type_supervisor, supervisor).
- -define(boot_type_worker, worker).
- -define(boot_type_simple_worker, simple_worker).
- -type boot_type() :: ?boot_type_simple_worker | ?boot_type_supervisor | ?boot_type_worker.
- -define(MATH_INT32_MAX, 4294967296).
-
-
- -define(cast_int(__Val), com_type:to_integer(__Val)).
- -define(cast_str(__Val), com_type:to_list(__Val)).
- -define(cast_erl(__Val), com_type:to_list(__Val)).
-
- -define(record_key_val_get(__RECORDNAME, __RECORDDATA, __KEY), (fun() ->
- case erlang:is_integer(__KEY) of
- true ->
- erlang:element(__KEY, __RECORDDATA);
- false ->
- Fields = record_info(fields, __RECORDNAME),
- case com_lists:position(__KEY, Fields) of
- {error, Error} ->
- {error, Error};
- Position ->
- erlang:element(Position + 1, __RECORDDATA)
- end
- end
- end)()).
-
- -define(record_key_val_set(__RECORDNAME, __RECORDDATA, __KEY, __VAL), (fun() ->
- case erlang:is_integer(__KEY) of
- true ->
- erlang:setelement(__KEY, __RECORDDATA, __VAL);
- false ->
- Fields = record_info(fields, __RECORDNAME),
- case com_lists:position(__KEY, Fields) of
- {error, Error} ->
- {error, Error};
- Position ->
- erlang:setelement(Position + 1, __RECORDDATA, __VAL)
- end
- end
- end)()).
|