summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/knowledge/knowledge_get_random_target.c')
-rw-r--r--src/knowledge/knowledge_get_random_target.c54
1 files changed, 46 insertions, 8 deletions
diff --git a/src/knowledge/knowledge_get_random_target.c b/src/knowledge/knowledge_get_random_target.c
index d5f321d..1e878cf 100644
--- a/src/knowledge/knowledge_get_random_target.c
+++ b/src/knowledge/knowledge_get_random_target.c
@@ -48,14 +48,17 @@ static int weighted_random_pick
int JH_knowledge_random_tws_target
(
- const struct JH_knowledge k [const static 1],
+ struct JH_knowledge k [const static 1],
JH_index target [const restrict static 1],
const JH_index word_id,
- const JH_index sequence_id
+ const JH_index sequence_id,
+ FILE io [const restrict static 1]
)
{
JH_index s_index;
+ JH_knowledge_readlock_word(k, word_id, io);
+
if
(
JH_knowledge_find_markov_sequence
@@ -66,27 +69,46 @@ int JH_knowledge_random_tws_target
) < 0
)
{
+ JH_knowledge_readunlock_word(k, word_id, io);
+
return -1;
}
- return
+ if
+ (
weighted_random_pick
(
&(k->words[word_id].tws.sequences_ref[s_index]),
target
- );
+ )
+ < 0
+ )
+ {
+ JH_knowledge_readunlock_word(k, word_id, io);
+
+ return -1;
+ }
+ else
+ {
+ JH_knowledge_readunlock_word(k, word_id, io);
+
+ return 0;
+ }
}
int JH_knowledge_random_swt_target
(
- const struct JH_knowledge k [const static 1],
+ struct JH_knowledge k [const static 1],
const JH_index sequence_id,
const JH_index word_id,
- JH_index target [const restrict static 1]
+ JH_index target [const restrict static 1],
+ FILE io [const restrict static 1]
)
{
JH_index s_index;
+ JH_knowledge_readlock_word(k, word_id, io);
+
if
(
JH_knowledge_find_markov_sequence
@@ -97,13 +119,29 @@ int JH_knowledge_random_swt_target
) < 0
)
{
+ JH_knowledge_readunlock_word(k, word_id, io);
+
return -1;
}
- return
+ if
+ (
weighted_random_pick
(
&(k->words[word_id].swt.sequences_ref[s_index]),
target
- );
+ )
+ < 0
+ )
+ {
+ JH_knowledge_readunlock_word(k, word_id, io);
+
+ return -1;
+ }
+ else
+ {
+ JH_knowledge_readunlock_word(k, word_id, io);
+
+ return 0;
+ }
}