← Back to C-Kernel-Engine Docs Doxygen Source Documentation
 
Loading...
Searching...
No Matches
runtime_extent.c File Reference
#include "ckernel_runtime_extent.h"
#include <stdint.h>

Go to the source code of this file.

Functions

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)
 
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)
 

Function Documentation

◆ ck_runtime_affine_i32_checked()

int ck_runtime_affine_i32_checked ( size_t  source_extent,
size_t  factor,
size_t  offset,
size_t  capacity,
int32_t *  valid_extent 
)

Definition at line 55 of file runtime_extent.c.

60 {
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}
@ CK_RUNTIME_EXTENT_LIMIT
@ CK_RUNTIME_EXTENT_INVALID
@ CK_RUNTIME_EXTENT_OK
@ CK_RUNTIME_EXTENT_OVERFLOW

References CK_RUNTIME_EXTENT_INVALID, CK_RUNTIME_EXTENT_LIMIT, CK_RUNTIME_EXTENT_OK, and CK_RUNTIME_EXTENT_OVERFLOW.

◆ ck_runtime_copy_valid_f32()

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 
)

Definition at line 73 of file runtime_extent.c.

81 {
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}

References CK_RUNTIME_EXTENT_INVALID, CK_RUNTIME_EXTENT_LIMIT, CK_RUNTIME_EXTENT_OK, and CK_RUNTIME_EXTENT_OVERFLOW.

◆ ck_runtime_scale_i32_checked()

int ck_runtime_scale_i32_checked ( size_t  source_extent,
size_t  factor,
size_t  capacity,
int32_t *  valid_extent 
)

Definition at line 38 of file runtime_extent.c.

42 {
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}

References CK_RUNTIME_EXTENT_INVALID, CK_RUNTIME_EXTENT_LIMIT, CK_RUNTIME_EXTENT_OK, and CK_RUNTIME_EXTENT_OVERFLOW.

◆ ck_runtime_sum_i32_checked()

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 
)

Definition at line 5 of file runtime_extent.c.

13 {
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}
const uint8_t size_t count
Definition true_bpe.h:209

References CK_RUNTIME_EXTENT_INVALID, CK_RUNTIME_EXTENT_LIMIT, CK_RUNTIME_EXTENT_OK, CK_RUNTIME_EXTENT_OVERFLOW, and count.