Skip to content

Add aws_array_list_shuffle for Fisher-Yates in-place shuffle - #1249

Closed
erikfuller wants to merge 1 commit into
awslabs:mainfrom
erikfuller:feat/array-list-shuffle
Closed

Add aws_array_list_shuffle for Fisher-Yates in-place shuffle#1249
erikfuller wants to merge 1 commit into
awslabs:mainfrom
erikfuller:feat/array-list-shuffle

Conversation

@erikfuller

Copy link
Copy Markdown

Description

Adds aws_array_list_shuffle() — a general-purpose Fisher-Yates in-place shuffle for aws_array_list, using aws_device_random for randomness.

Motivation

Needed by aws-c-s3 (PR #636) to implement randomized byte-range fetch ordering for multipart downloads. Rather than inlining the shuffle logic, it belongs here as a reusable utility alongside aws_array_list_sort and aws_array_list_swap.

API

AWS_COMMON_API
int aws_array_list_shuffle(struct aws_array_list *AWS_RESTRICT list);
  • Returns AWS_OP_SUCCESS on success
  • Propagates error if random source is unavailable
  • No-op for lists with 0 or 1 elements

Testing

  • test_array_list_shuffle — verifies valid permutation (all elements present, non-sequential)
  • test_array_list_shuffle_empty — verifies edge cases (empty list, single element)

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

Add a general-purpose in-place shuffle function for aws_array_list using
the Fisher-Yates algorithm with aws_device_random for randomness.

Returns AWS_OP_SUCCESS on success, or propagates an error if the random
source is unavailable. No-op for lists with 0 or 1 elements.
@erikfuller
erikfuller force-pushed the feat/array-list-shuffle branch from 0766eab to a5f9a89 Compare June 1, 2026 23:53
@erikfuller erikfuller closed this Jun 4, 2026
@erikfuller
erikfuller deleted the feat/array-list-shuffle branch June 4, 2026 17:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant