Current section
Files
Jump to
Current section
Files
src/procdict_list.erl
%%%----------------------------------------------------------------------
%%%
%%% @doc 使用进程字典的列表操作
%%% @end
%%%
%%%----------------------------------------------------------------------
-module(procdict_list).
-export([get_list/1, set_list/2, erase_list/1, list_add/2,list_add_tail/2, list_delete/2,
list_keydelete/3, list_keyfind/3, list_keyupdate/4, list_keystore/4,
list_sort/2, list_member/2, list_len/1,
get_ordset/1, set_ordset/2, erase_ordset/1, ordset_add/2, ordset_delete/2]).
%% @doc 获取list
get_list(Type) ->
case erlang:get(Type) of
undefined ->
[];
L ->
L
end.
%% @doc 设置list数据
set_list(Type, List) when is_list(List) ->
erlang:put(Type, List),
ok.
%% @doc 清除list,返回原有数据
erase_list(Type) ->
erlang:erase(Type).
%% @doc list中增加一项
list_add(Type, Elem) ->
set_list(Type, [Elem | get_list(Type)]),
ok.
%% @doc list中增加一项从尾部添加
list_add_tail(Type, Elem) ->
set_list(Type, lists:append(get_list(Type), [Elem])).
%% @doc list中删除一项(非key方式)
list_delete(Type, Elem) ->
List2 = lists:delete(Elem, get_list(Type)),
set_list(Type, List2),
ok.
%% @doc list中删除一项
list_keydelete(Type, Key, Pos) ->
case lists:keytake(Key, Pos, get_list(Type)) of
{value, V, List2} ->
set_list(Type, List2),
V;
false ->
false
end.
%% @doc 排序
list_sort(Type, Fun) ->
set_list(Type, lists:sort(Fun, get_list(Type))),
ok.
%% @doc 长度
list_len(Type) ->
length(get_list(Type)).
%% @doc 元素是否存在
list_member(Type, Elem) ->
lists:member(Elem, get_list(Type)).
%% @doc list中查找一项
list_keyfind(Type, Key, Pos) ->
lists:keyfind(Key, Pos, get_list(Type)).
%% @doc list中更新
list_keyupdate(Type, Key, Pos, NewVal) ->
List2 = lists:keyreplace(Key, Pos, get_list(Type), NewVal),
set_list(Type, List2).
%% @doc list中存储,参考lists:keystore/3
list_keystore(Type, Key, Pos, NewVal) ->
List2 = lists:keystore(Key, Pos, get_list(Type), NewVal),
set_list(Type, List2).
%% 封装在进程词典中维护ordsets结构
%% @doc 获取ordset
get_ordset(Type) ->
case erlang:get(Type) of
undefined ->
ordsets:new();
S ->
S
end.
%% @doc 设置ordset数据
set_ordset(Type, Ordset) ->
erlang:put(Type, Ordset),
ok.
%% @doc 清除ordset
erase_ordset(Type) ->
erlang:erase(Type),
ok.
%% @doc ordset中增加一项
ordset_add(Type, Elem) ->
set_ordset(Type, ordsets:add_element(Elem, get_ordset(Type))),
ok.
%% @doc ordset中删除一项(非key方式)
ordset_delete(Type, Elem) ->
set_ordset(Type, ordsets:del_element(Elem, get_ordset(Type))),
ok.