summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ataxia_entry.erl23
-rw-r--r--src/ataxic.erl41
2 files changed, 48 insertions, 16 deletions
diff --git a/src/ataxia_entry.erl b/src/ataxia_entry.erl
index a0a48e2..17460d9 100644
--- a/src/ataxia_entry.erl
+++ b/src/ataxia_entry.erl
@@ -10,7 +10,7 @@
id :: any(),
read_perm :: ataxia_security:permission(),
write_perm :: ataxia_security:permission(),
- lock :: ataxia_security:lock(),
+ lock :: ataxia_lock:type(),
val :: any()
}
).
@@ -31,12 +31,18 @@
get_read_permission/1,
get_write_permission/1,
get_value/1,
+ get_lock/1,
set_read_permission/2,
set_write_permission/2,
set_value/2,
+ set_lock/2,
get_id_field/0,
+ get_read_permission_field/0,
+ get_write_permission_field/0,
+ get_lock_field/0,
+
get_record_info/0,
get_record_name/0
]
@@ -78,6 +84,9 @@ get_write_permission (#entry { write_perm = Result }) -> Result.
-spec get_value (type()) -> any().
get_value (#entry { val = Result }) -> Result.
+-spec get_lock (type()) -> any().
+get_lock (#entry { lock = Result }) -> Result.
+
-spec set_read_permission (ataxia_security:permission(), type()) -> type().
set_read_permission (Perm, Item) -> Item#entry{ read_perm = Perm }.
@@ -87,9 +96,21 @@ set_write_permission (Perm, Item) -> Item#entry{ write_perm = Perm }.
-spec set_value (any(), type()) -> type().
set_value (Value, Item) -> Item#entry{ val = Value }.
+-spec set_lock (ataxia_lock:type(), type()) -> type().
+set_lock (Lock, Item) -> Item#entry{ lock = Lock }.
+
-spec get_id_field () -> non_neg_integer().
get_id_field () -> #entry.id.
+-spec get_read_permission_field () -> non_neg_integer().
+get_read_permission_field () -> #entry.read_perm.
+
+-spec get_write_permission_field () -> non_neg_integer().
+get_write_permission_field () -> #entry.write_perm.
+
+-spec get_lock_field () -> non_neg_integer().
+get_lock_field () -> #entry.lock.
+
get_record_info () -> record_info(fields, entry).
get_record_name () -> entry.
diff --git a/src/ataxic.erl b/src/ataxic.erl
index 5c5698b..35291b0 100644
--- a/src/ataxic.erl
+++ b/src/ataxic.erl
@@ -45,6 +45,7 @@
%%%% Select
-record(read_perm, {op :: basic()}).
-record(write_perm, {op :: basic()}).
+-record(lock, {op :: basic()}).
-record(value, {op :: basic()}).
-record(mseq, {ops :: list(meta())}).
@@ -78,9 +79,10 @@
-export
(
[
- read_permission/1,
- write_permission/1,
- value/1,
+ update_read_permission/1,
+ update_write_permission/1,
+ update_lock/1,
+ update_value/1,
sequence_meta/1
]
).
@@ -182,17 +184,32 @@ neg (V) -> #neg{ param = V }.
-spec sequence_meta (list(meta())) -> meta().
sequence_meta (List) -> #mseq{ ops = List }.
--spec read_permission (basic()) -> meta().
-read_permission (OP) -> #read_perm{ op = OP }.
+-spec update_read_permission (basic()) -> meta().
+update_read_permission (OP) -> #read_perm{ op = OP }.
--spec write_permission (basic()) -> meta().
-write_permission (OP) -> #write_perm{ op = OP }.
+-spec update_lock (basic()) -> meta().
+update_lock (OP) -> #lock{ op = OP }.
--spec value (basic()) -> meta().
-value (OP) -> #value{ op = OP }.
+-spec update_write_permission (basic()) -> meta().
+update_write_permission (OP) -> #write_perm{ op = OP }.
+
+-spec update_value (basic()) -> meta().
+update_value (OP) -> #value{ op = OP }.
%%%%% APPLY TO %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-spec apply_to (meta(), ataxia_entry:type()) -> ataxia_entry:type().
+apply_to (#value{ op = OP }, Entry) ->
+ ataxia_entry:set_value
+ (
+ basic_apply_to(OP, ataxia_entry:get_value(Entry)),
+ Entry
+ );
+apply_to (#lock{ op = OP }, Entry) ->
+ ataxia_entry:set_lock
+ (
+ basic_apply_to(OP, ataxia_entry:get_lock(Entry)),
+ Entry
+ );
apply_to (#read_perm{ op = OP }, Entry) ->
ataxia_entry:set_read_permission
(
@@ -205,12 +222,6 @@ apply_to (#write_perm{ op = OP }, Entry) ->
basic_apply_to(OP, ataxia_entry:get_write_permission(Entry)),
Entry
);
-apply_to (#value{ op = OP }, Entry) ->
- ataxia_entry:set_value
- (
- basic_apply_to(OP, ataxia_entry:get_value(Entry)),
- Entry
- );
apply_to (#mseq { ops = List }, Entry) ->
lists:foldl(fun apply_to/2, Entry, List).