11 size_t initial_extent,
13 int32_t *valid_extent) {
14 if (!valid_extent || (
count && !values) || min_value < 0 ||
16 if (
count > value_elements || initial_extent > capacity)
18 if (initial_extent > INT32_MAX || capacity > INT32_MAX)
20 if (
count > SIZE_MAX /
sizeof(int32_t))
23 int32_t total = (int32_t)initial_extent;
24 for (
size_t i = 0; i <
count; ++i) {
25 const int32_t item = values[i];
26 if (item < min_value || item > max_value)
28 if (item > INT32_MAX - total)
31 if ((
size_t)total > capacity)
34 *valid_extent = total;
42 int32_t *valid_extent) {
43 if (!valid_extent || !factor)
45 if (capacity > INT32_MAX || factor > INT32_MAX ||
46 source_extent > (
size_t)INT32_MAX / factor)
48 const size_t result = source_extent * factor;
49 if (result > capacity)
51 *valid_extent = (int32_t)result;
60 int32_t *valid_extent) {
61 if (!valid_extent || !factor)
63 if (capacity > INT32_MAX || offset > INT32_MAX ||
64 source_extent > ((
size_t)INT32_MAX - offset) / factor)
66 const size_t result = source_extent * factor + offset;
67 if (result > capacity)
69 *valid_extent = (int32_t)result;
75 size_t input_elements,
80 size_t output_elements,
81 size_t output_stride) {
82 if (!channels || (valid_frames && (!input || !output)) ||
83 input_stride < valid_frames || output_stride < valid_frames)
86 if (channels - 1 > (SIZE_MAX - valid_frames) / input_stride ||
87 channels - 1 > (SIZE_MAX - valid_frames) / output_stride)
89 const size_t input_required = (channels - 1) * input_stride + valid_frames;
90 const size_t output_required = (channels - 1) * output_stride + valid_frames;
91 if (input_required > SIZE_MAX /
sizeof(
float) ||
92 output_required > SIZE_MAX /
sizeof(float))
94 if (input_elements < input_required || output_elements < output_required)
96 for (
size_t channel = 0; channel < channels; ++channel) {
97 for (
size_t frame = 0; frame < valid_frames; ++frame) {
98 output[channel * output_stride + frame] =
99 input[channel * input_stride + frame];
@ CK_RUNTIME_EXTENT_LIMIT
@ CK_RUNTIME_EXTENT_INVALID
@ CK_RUNTIME_EXTENT_OVERFLOW
int ck_runtime_scale_i32_checked(size_t source_extent, size_t factor, size_t capacity, int32_t *valid_extent)
int ck_runtime_sum_i32_checked(const int32_t *values, size_t value_elements, size_t count, int32_t min_value, int32_t max_value, size_t initial_extent, size_t capacity, int32_t *valid_extent)
int ck_runtime_affine_i32_checked(size_t source_extent, size_t factor, size_t offset, size_t capacity, int32_t *valid_extent)
int ck_runtime_copy_valid_f32(const float *input, size_t input_elements, size_t channels, size_t valid_frames, size_t input_stride, float *output, size_t output_elements, size_t output_stride)
const uint8_t size_t count