summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/roster')
-rw-r--r--src/roster/query/rst_load.erl7
-rw-r--r--src/roster/query/rst_update.erl2
-rw-r--r--src/roster/struct/rst_roster.erl69
3 files changed, 31 insertions, 47 deletions
diff --git a/src/roster/query/rst_load.erl b/src/roster/query/rst_load.erl
index cfd42c7..077f193 100644
--- a/src/roster/query/rst_load.erl
+++ b/src/roster/query/rst_load.erl
@@ -94,9 +94,12 @@ generate_reply (QueryState) ->
RosterCharacters = rst_roster:get_characters(Roster),
SetInventory = shr_set_inventory:generate(Inventory),
EncodedRoster =
- array:to_list
+ lists:map
(
- array:sparse_map(fun rst_add_char:generate/2, RosterCharacters)
+ fun ({IX, Char}) ->
+ rst_add_char:generate(IX, Char)
+ end,
+ orddict:to_list(RosterCharacters)
),
Output = jiffy:encode([SetInventory|EncodedRoster]),
diff --git a/src/roster/query/rst_update.erl b/src/roster/query/rst_update.erl
index dfc634e..b1e0a7c 100644
--- a/src/roster/query/rst_update.erl
+++ b/src/roster/query/rst_update.erl
@@ -131,7 +131,7 @@ commit_update (QueryState, Input) ->
{
rst_roster:set_character(IX, Character, CurrentRoster),
[
- ataxic_sugar:update_array_cell
+ ataxic_sugar:update_orddict_element
(
IX,
ataxic:constant(Character)
diff --git a/src/roster/struct/rst_roster.erl b/src/roster/struct/rst_roster.erl
index 6371878..90b2f98 100644
--- a/src/roster/struct/rst_roster.erl
+++ b/src/roster/struct/rst_roster.erl
@@ -10,7 +10,7 @@
roster,
{
owner :: binary(),
- characters :: array:array(rst_character:type())
+ characters :: orddict:orddict(non_neg_integer(), rst_character:type())
}
).
@@ -30,10 +30,7 @@
get_character/2,
set_characters/2,
- set_character/3,
-
- add_character/2,
- remove_character/2
+ set_character/3
]
).
@@ -62,13 +59,22 @@
-spec get_owner (type()) -> binary().
get_owner (Roster) -> Roster#roster.owner.
--spec get_characters (type()) -> array:array(rst_character:type()).
+-spec get_characters
+ (
+ type()
+ )
+ -> orddict:orddict(non_neg_integer(), rst_character:type()).
get_characters (Roster) -> Roster#roster.characters.
-spec get_character (non_neg_integer(), type()) -> rst_character:type().
-get_character (IX, Roster) -> array:get(IX, Roster#roster.characters).
+get_character (IX, Roster) -> orddict:fetch(IX, Roster#roster.characters).
--spec set_characters (array:array(rst_character:type()), type()) -> type().
+-spec set_characters
+ (
+ orddict:orddict(non_neg_integer(), rst_character:type()),
+ type()
+ )
+ -> type().
set_characters (Characters, Roster) -> Roster#roster{ characters = Characters }.
-spec set_character
@@ -81,32 +87,7 @@ set_characters (Characters, Roster) -> Roster#roster{ characters = Characters }.
set_character (IX, Character, Roster) ->
Roster#roster
{
- characters = array:set(IX, Character, Roster#roster.characters)
- }.
-
--spec add_character (rst_character:type(), type()) -> type().
-add_character (Character, Roster) ->
- CurrentCharacters = Roster#roster.characters,
- CurrentSize = array:size(CurrentCharacters),
-
- Roster#roster
- {
- characters = array:set(CurrentSize, Character, CurrentCharacters)
- }.
-
--spec remove_character (non_neg_integer(), type()) -> type().
-remove_character (IX, Roster) ->
- CurrentCharacters = Roster#roster.characters,
- CurrentSize = array:size(CurrentCharacters),
- NewSize = (CurrentSize - 1),
- LastCharacter = array:get(NewSize, CurrentCharacters),
-
- S0Characters = array:set(IX, LastCharacter, CurrentCharacters),
- S1Characters = array:resize(NewSize, S0Characters),
-
- Roster#roster
- {
- characters = S1Characters
+ characters = orddict:store(IX, Character, Roster#roster.characters)
}.
-spec get_characters_field () -> non_neg_integer().
@@ -119,18 +100,18 @@ new (Owner) ->
{
owner = Owner,
characters =
- array:from_list
+ orddict:from_list
(
[
- NewChar,
- NewChar,
- NewChar,
- NewChar,
-
- NewChar,
- NewChar,
- NewChar,
- NewChar
+ {0, NewChar},
+ {1, NewChar},
+ {2, NewChar},
+ {3, NewChar},
+
+ {4, NewChar},
+ {5, NewChar},
+ {6, NewChar},
+ {7, NewChar}
]
)
}.