summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/sequence_creation.c')
-rw-r--r--src/core/sequence_creation.c32
1 files changed, 20 insertions, 12 deletions
diff --git a/src/core/sequence_creation.c b/src/core/sequence_creation.c
index b1f0f36..1133be9 100644
--- a/src/core/sequence_creation.c
+++ b/src/core/sequence_creation.c
@@ -579,10 +579,10 @@ static int initialize_sequence
const struct ZoO_knowledge k [const static 1]
)
{
- const ZoO_index * const restrict * following_sequences;
- const ZoO_index * following_sequences_weights;
+ const ZoO_index * restrict following_sequences_ref;
+ const ZoO_index * restrict chosen_sequence;
+ const ZoO_index * restrict following_sequences_weights;
ZoO_index following_sequences_weights_sum;
- ZoO_index chosen_sequence;
sequence[0] = initial_word;
@@ -593,11 +593,11 @@ static int initialize_sequence
if
(
- ZoO_knowledge_get_following_sequences
+ ZoO_knowledge_get_following_sequences_ref
(
k,
initial_word,
- &following_sequences,
+ &following_sequences_ref,
&following_sequences_weights,
&following_sequences_weights_sum
) < 0
@@ -611,18 +611,26 @@ static int initialize_sequence
return -1;
}
- chosen_sequence =
- weighted_random_pick
- (
- following_sequences_weights,
- following_sequences_weights_sum
- );
+ /* following_sequences_ref contains only valid references. */
+ (void) ZoO_knowledge_get_sequence
+ (
+ k,
+ following_sequences_ref
+ [
+ weighted_random_pick
+ (
+ following_sequences_weights,
+ following_sequences_weights_sum
+ )
+ ],
+ &chosen_sequence
+ );
/* Safe if 'allocate_initial_sequence' succeeded. */
memcpy
(
(void *) (sequence + 1),
- (const void *) (following_sequences + chosen_sequence),
+ (const void *) chosen_sequence,
((((size_t) markov_order) - 1) * sizeof(ZoO_index))
);