summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/roster/struct/rst_roster.erl')
-rw-r--r--src/roster/struct/rst_roster.erl69
1 files changed, 25 insertions, 44 deletions
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}
]
)
}.