← Back to C-Kernel-Engine Docs Doxygen Source Documentation
 
Loading...
Searching...
No Matches
runtime_extent.c
Go to the documentation of this file.
2
3#include <stdint.h>
4
6 const int32_t *values,
7 size_t value_elements,
8 size_t count,
9 int32_t min_value,
10 int32_t max_value,
11 size_t initial_extent,
12 size_t capacity,
13 int32_t *valid_extent) {
14 if (!valid_extent || (count && !values) || min_value < 0 ||
15 max_value < min_value) return CK_RUNTIME_EXTENT_INVALID;
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))
22
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)
30 total += item;
31 if ((size_t)total > capacity)
33 }
34 *valid_extent = total;
36}
37
39 size_t source_extent,
40 size_t factor,
41 size_t capacity,
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;
53}
54
56 size_t source_extent,
57 size_t factor,
58 size_t offset,
59 size_t capacity,
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;
71}
72
74 const float *input,
75 size_t input_elements,
76 size_t channels,
77 size_t valid_frames,
78 size_t input_stride,
79 float *output,
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)
85 if (!valid_frames) return CK_RUNTIME_EXTENT_OK;
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];
100 }
101 }
103}
@ CK_RUNTIME_EXTENT_LIMIT
@ CK_RUNTIME_EXTENT_INVALID
@ CK_RUNTIME_EXTENT_OK
@ 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
Definition true_bpe.h:209