]> Kevux Git Server - fll/commitdiff
Update: Add restrict optimization to f_memory functions.
authorKevin Day <kevin@kevux.org>
Fri, 9 Feb 2024 03:55:08 +0000 (21:55 -0600)
committerKevin Day <kevin@kevux.org>
Fri, 9 Feb 2024 04:22:24 +0000 (22:22 -0600)
The design of the memory operations require that array, used, and size do not point to the same memory address.
Help prevent potential aliasing by adding restrict keyword.
The functions with only a single pointer in its parameters still has the restrict keyword added.

I opted to avoid adding the restrict keyword to some of the append and append all functions.
Those would require more attention before I am certain whether or not they should be allowed to have overlapping addresses.
I think they should not, but just in case, I put doing that on hold.

The callback could also use restrict but I have decided not to do that as well due to the number of files that I will need to change.
I will do this later.

level_0/f_memory/c/memory.c
level_0/f_memory/c/memory.h
level_0/f_memory/c/memory/array.c
level_0/f_memory/c/memory/array.h
level_0/f_memory/c/memory/arrays.c
level_0/f_memory/c/memory/arrays.h
level_0/f_memory/c/memory/private-array.c
level_0/f_memory/c/memory/private-array.h

index 3f47cf304ab1c94600181408f6906a2083d1eb05..377e1c660f6ba9497fedbbe467bf242f870eba51 100644 (file)
@@ -6,7 +6,7 @@ extern "C" {
 #endif
 
 #ifndef _di_f_memory_adjust_
-  f_status_t f_memory_adjust(const size_t length_old, const size_t length_new, const size_t size, void ** const pointer) {
+  f_status_t f_memory_adjust(const size_t length_old, const size_t length_new, const size_t size, void ** restrict const pointer) {
     #ifndef _di_level_0_parameter_checking_
       if (!size) return F_status_set_error(F_parameter);
       if (!pointer) return F_status_set_error(F_parameter);
@@ -24,7 +24,7 @@ extern "C" {
 #endif // _di_f_memory_adjust_
 
 #ifndef _di_f_memory_delete_
-  f_status_t f_memory_delete(const size_t length, const size_t size, void ** const pointer) {
+  f_status_t f_memory_delete(const size_t length, const size_t size, void ** restrict const pointer) {
     #ifndef _di_level_0_parameter_checking_
       if (!size) return F_status_set_error(F_parameter);
       if (!pointer) return F_status_set_error(F_parameter);
@@ -49,7 +49,7 @@ extern "C" {
 #endif // _di_f_memory_delete_
 
 #ifndef _di_f_memory_destroy_
-  f_status_t f_memory_destroy(const size_t length, const size_t size, void ** const pointer) {
+  f_status_t f_memory_destroy(const size_t length, const size_t size, void ** restrict const pointer) {
     #ifndef _di_level_0_parameter_checking_
       if (!size) return F_status_set_error(F_parameter);
       if (!pointer) return F_status_set_error(F_parameter);
@@ -74,7 +74,7 @@ extern "C" {
 #endif // _di_f_memory_destroy_
 
 #ifndef _di_f_memory_new_
-  f_status_t f_memory_new(const size_t length, const size_t size, void ** const pointer) {
+  f_status_t f_memory_new(const size_t length, const size_t size, void ** restrict const pointer) {
     #ifndef _di_level_0_parameter_checking_
       if (!size) return F_status_set_error(F_parameter);
       if (!pointer) return F_status_set_error(F_parameter);
@@ -91,7 +91,7 @@ extern "C" {
 
 
 #ifndef _di_f_memory_new_aligned_
-  f_status_t f_memory_new_aligned(const size_t length, const size_t alignment, void ** const pointer) {
+  f_status_t f_memory_new_aligned(const size_t length, const size_t alignment, void ** restrict const pointer) {
     #ifndef _di_level_0_parameter_checking_
       if (!alignment) return F_status_set_error(F_parameter);
       if (!pointer) return F_status_set_error(F_parameter);
@@ -129,7 +129,7 @@ extern "C" {
 #endif // _di_f_memory_new_aligned_
 
 #ifndef _di_f_memory_resize_
-  f_status_t f_memory_resize(const size_t length_old, const size_t length_new, const size_t size, void ** const pointer) {
+  f_status_t f_memory_resize(const size_t length_old, const size_t length_new, const size_t size, void ** restrict const pointer) {
     #ifndef _di_level_0_parameter_checking_
       if (!size) return F_status_set_error(F_parameter);
       if (!pointer) return F_status_set_error(F_parameter);
index b58f1c9a5dfb197f34deeb767e8f111c66f127ce..4a2dffc3bd9b563a4a44c74dab90a2c552ad310b 100644 (file)
@@ -56,7 +56,7 @@ extern "C" {
  * @see realloc()
  */
 #ifndef _di_f_memory_adjust_
-  extern f_status_t f_memory_adjust(const size_t length_old, const size_t length_new, const size_t size, void ** const pointer);
+  extern f_status_t f_memory_adjust(const size_t length_old, const size_t length_new, const size_t size, void ** restrict const pointer);
 #endif // _di_f_memory_adjust_
 
 /**
@@ -84,7 +84,7 @@ extern "C" {
  * @see free()
  */
 #ifndef _di_f_memory_delete_
-  extern f_status_t f_memory_delete(const size_t length, const size_t size, void ** const pointer);
+  extern f_status_t f_memory_delete(const size_t length, const size_t size, void ** restrict const pointer);
 #endif // _di_f_memory_delete_
 
 /**
@@ -111,7 +111,7 @@ extern "C" {
  * @see memset()
  */
 #ifndef _di_f_memory_destroy_
-  extern f_status_t f_memory_destroy(const size_t length, const size_t size, void ** const pointer);
+  extern f_status_t f_memory_destroy(const size_t length, const size_t size, void ** restrict const pointer);
 #endif // _di_f_memory_destroy_
 
 /**
@@ -137,7 +137,7 @@ extern "C" {
  * @see memset()
  */
 #ifndef _di_f_memory_new_
-  extern f_status_t f_memory_new(const size_t length, const size_t size, void ** const pointer);
+  extern f_status_t f_memory_new(const size_t length, const size_t size, void ** restrict const pointer);
 #endif // _di_f_memory_new_
 
 /**
@@ -165,7 +165,7 @@ extern "C" {
  * @see memset()
  */
 #ifndef _di_f_memory_new_aligned_
-  extern f_status_t f_memory_new_aligned(const size_t length, const size_t alignment, void ** const pointer);
+  extern f_status_t f_memory_new_aligned(const size_t length, const size_t alignment, void ** restrict const pointer);
 #endif // _di_f_memory_new_aligned_
 
 /**
@@ -196,7 +196,7 @@ extern "C" {
  * @see realloc()
  */
 #ifndef _di_f_memory_resize_
-  extern f_status_t f_memory_resize(const size_t length_old, const size_t length_new, const size_t size, void ** const pointer);
+  extern f_status_t f_memory_resize(const size_t length_old, const size_t length_new, const size_t size, void ** restrict const pointer);
 #endif // _di_f_memory_resize_
 
 #ifdef __cplusplus
index cb7b471e6bf5646f177e23ece44c118e9161119b..ad1b5611f1848901ab52d2958ca92838e32e45df 100644 (file)
@@ -6,7 +6,7 @@ extern "C" {
 #endif
 
 #ifndef _di_f_memory_array_adjust_
-  f_status_t f_memory_array_adjust(const f_number_unsigned_t length, const size_t width, void ** const array, f_number_unsigned_t * const used, f_number_unsigned_t * const size) {
+  f_status_t f_memory_array_adjust(const f_number_unsigned_t length, const size_t width, void ** restrict const array, f_number_unsigned_t * restrict const used, f_number_unsigned_t * restrict const size) {
     #ifndef _di_level_0_parameter_checking_
       if (!width) return F_status_set_error(F_parameter);
       if (!array) return F_status_set_error(F_parameter);
@@ -21,7 +21,7 @@ extern "C" {
 #endif // _di_f_memory_array_adjust_
 
 #ifndef _di_f_memory_array_append_
-  f_status_t f_memory_array_append(const void * const source, const size_t width, void ** const array, f_number_unsigned_t * const used, f_number_unsigned_t * const size) {
+  f_status_t f_memory_array_append(const void * const source, const size_t width, void ** const array, f_number_unsigned_t * restrict const used, f_number_unsigned_t * restrict const size) {
     #ifndef _di_level_0_parameter_checking_
       if (!source) return F_status_set_error(F_parameter);
       if (!width) return F_status_set_error(F_parameter);
@@ -54,7 +54,7 @@ extern "C" {
 #endif // _di_f_memory_array_append_
 
 #ifndef _di_f_memory_array_append_all_
-  f_status_t f_memory_array_append_all(const void * const sources, const f_number_unsigned_t amount, const size_t width, void ** const array, f_number_unsigned_t * const used, f_number_unsigned_t * const size) {
+  f_status_t f_memory_array_append_all(const void * const sources, const f_number_unsigned_t amount, const size_t width, void ** const array, f_number_unsigned_t * restrict const used, f_number_unsigned_t * restrict const size) {
     #ifndef _di_level_0_parameter_checking_
       if (!sources) return F_status_set_error(F_parameter);
       if (!width) return F_status_set_error(F_parameter);
@@ -88,7 +88,7 @@ extern "C" {
 #endif // _di_f_memory_array_append_all_
 
 #ifndef _di_f_memory_array_decimate_by_
-  f_status_t f_memory_array_decimate_by(const f_number_unsigned_t amount, const size_t width, void ** const array, f_number_unsigned_t * const used, f_number_unsigned_t * const size) {
+  f_status_t f_memory_array_decimate_by(const f_number_unsigned_t amount, const size_t width, void ** restrict const array, f_number_unsigned_t * restrict const used, f_number_unsigned_t * restrict const size) {
     #ifndef _di_level_0_parameter_checking_
       if (!width) return F_status_set_error(F_parameter);
       if (!array) return F_status_set_error(F_parameter);
@@ -103,7 +103,7 @@ extern "C" {
 #endif // _di_f_memory_array_decimate_by_
 
 #ifndef _di_f_memory_array_decrease_by_
-  f_status_t f_memory_array_decrease_by(const f_number_unsigned_t amount, const size_t width, void ** const array, f_number_unsigned_t * const used, f_number_unsigned_t * const size) {
+  f_status_t f_memory_array_decrease_by(const f_number_unsigned_t amount, const size_t width, void ** restrict const array, f_number_unsigned_t * restrict const used, f_number_unsigned_t * restrict const size) {
     #ifndef _di_level_0_parameter_checking_
       if (!width) return F_status_set_error(F_parameter);
       if (!array) return F_status_set_error(F_parameter);
@@ -118,7 +118,7 @@ extern "C" {
 #endif // _di_f_memory_array_decrease_by_
 
 #ifndef _di_f_memory_array_increase_
-  f_status_t f_memory_array_increase(const f_number_unsigned_t step, const size_t width, void ** const array, f_number_unsigned_t * const used, f_number_unsigned_t * const size) {
+  f_status_t f_memory_array_increase(const f_number_unsigned_t step, const size_t width, void ** restrict const array, f_number_unsigned_t * restrict const used, f_number_unsigned_t * restrict const size) {
     #ifndef _di_level_0_parameter_checking_
       if (!width) return F_status_set_error(F_parameter);
       if (!array) return F_status_set_error(F_parameter);
@@ -145,7 +145,7 @@ extern "C" {
 #endif // _di_f_memory_array_increase_
 
 #ifndef _di_f_memory_array_increase_by_
-  f_status_t f_memory_array_increase_by(const f_number_unsigned_t amount, const size_t width, void ** const array, f_number_unsigned_t * const used, f_number_unsigned_t * const size) {
+  f_status_t f_memory_array_increase_by(const f_number_unsigned_t amount, const size_t width, void ** restrict const array, f_number_unsigned_t * restrict const used, f_number_unsigned_t * restrict const size) {
     #ifndef _di_level_0_parameter_checking_
       if (!width) return F_status_set_error(F_parameter);
       if (!array) return F_status_set_error(F_parameter);
@@ -170,7 +170,7 @@ extern "C" {
 #endif // _di_f_memory_array_increase_by_
 
 #ifndef _di_f_memory_array_resize_
-  f_status_t f_memory_array_resize(const f_number_unsigned_t length, const size_t width, void ** const array, f_number_unsigned_t * const used, f_number_unsigned_t * const size) {
+  f_status_t f_memory_array_resize(const f_number_unsigned_t length, const size_t width, void ** restrict const array, f_number_unsigned_t * restrict const used, f_number_unsigned_t * restrict const size) {
     #ifndef _di_level_0_parameter_checking_
       if (!width) return F_status_set_error(F_parameter);
       if (!array) return F_status_set_error(F_parameter);
index 646e79193fa198c21d67efd810e30b62f355a80d..466e15ef7d0969ee592fc8526c72a0054e503962 100644 (file)
@@ -43,7 +43,7 @@ extern "C" {
  *   F_parameter (with error bit) if a parameter is invalid.
  */
 #ifndef _di_f_memory_array_adjust_
-  extern f_status_t f_memory_array_adjust(const f_number_unsigned_t length, const size_t width, void ** const array, f_number_unsigned_t * const used, f_number_unsigned_t * const size);
+  extern f_status_t f_memory_array_adjust(const f_number_unsigned_t length, const size_t width, void ** restrict const array, f_number_unsigned_t * restrict const used, f_number_unsigned_t * restrict const size);
 #endif // _di_f_memory_array_adjust_
 
 /**
@@ -88,7 +88,7 @@ extern "C" {
  *   F_parameter (with error bit) if a parameter is invalid.
  */
 #ifndef _di_f_memory_array_append_
-  extern f_status_t f_memory_array_append(const void * const source, const size_t width, void ** const array, f_number_unsigned_t * const used, f_number_unsigned_t * const size);
+  extern f_status_t f_memory_array_append(const void * const source, const size_t width, void ** const array, f_number_unsigned_t * restrict const used, f_number_unsigned_t * restrict const size);
 #endif // _di_f_memory_array_append_
 
 /**
@@ -141,7 +141,7 @@ extern "C" {
  *   F_parameter (with error bit) if a parameter is invalid.
  */
 #ifndef _di_f_memory_array_append_all_
-  extern f_status_t f_memory_array_append_all(const void * const sources, const f_number_unsigned_t amount, const size_t width, void ** const array, f_number_unsigned_t * const used, f_number_unsigned_t * const size);
+  extern f_status_t f_memory_array_append_all(const void * const sources, const f_number_unsigned_t amount, const size_t width, void ** const array, f_number_unsigned_t * restrict const used, f_number_unsigned_t * restrict const size);
 #endif // _di_f_memory_array_append_all_
 
 /**
@@ -174,7 +174,7 @@ extern "C" {
  *   F_parameter (with error bit) if a parameter is invalid.
  */
 #ifndef _di_f_memory_array_decimate_by_
-  extern f_status_t f_memory_array_decimate_by(const f_number_unsigned_t amount, const size_t width, void ** const array, f_number_unsigned_t * const used, f_number_unsigned_t * const size);
+  extern f_status_t f_memory_array_decimate_by(const f_number_unsigned_t amount, const size_t width, void ** restrict const array, f_number_unsigned_t * restrict const used, f_number_unsigned_t * restrict const size);
 #endif // _di_f_memory_array_decimate_by_
 
 /**
@@ -207,7 +207,7 @@ extern "C" {
  *   F_parameter (with error bit) if a parameter is invalid.
  */
 #ifndef _di_f_memory_array_decrease_by_
-  extern f_status_t f_memory_array_decrease_by(const f_number_unsigned_t amount, const size_t width, void ** const array, f_number_unsigned_t * const used, f_number_unsigned_t * const size);
+  extern f_status_t f_memory_array_decrease_by(const f_number_unsigned_t amount, const size_t width, void ** restrict const array, f_number_unsigned_t * restrict const used, f_number_unsigned_t * restrict const size);
 #endif // _di_f_memory_array_decrease_by_
 
 /**
@@ -242,7 +242,7 @@ extern "C" {
  *   F_parameter (with error bit) if a parameter is invalid.
  */
 #ifndef _di_f_memory_array_increase_
-  extern f_status_t f_memory_array_increase(const f_number_unsigned_t step, const size_t width, void ** const array, f_number_unsigned_t * const used, f_number_unsigned_t * const size);
+  extern f_status_t f_memory_array_increase(const f_number_unsigned_t step, const size_t width, void ** restrict const array, f_number_unsigned_t * restrict const used, f_number_unsigned_t * restrict const size);
 #endif // _di_f_memory_array_increase_
 
 /**
@@ -277,7 +277,7 @@ extern "C" {
  *   F_array_too_large (with error bit) if the new array length is too large.
  */
 #ifndef _di_f_memory_array_increase_by_
-  extern f_status_t f_memory_array_increase_by(const f_number_unsigned_t amount, const size_t width, void ** const array, f_number_unsigned_t * const used, f_number_unsigned_t * const size);
+  extern f_status_t f_memory_array_increase_by(const f_number_unsigned_t amount, const size_t width, void ** restrict const array, f_number_unsigned_t * restrict const used, f_number_unsigned_t * restrict const size);
 #endif // _di_f_memory_array_increase_by_
 
 /**
@@ -307,7 +307,7 @@ extern "C" {
  *   F_parameter (with error bit) if a parameter is invalid.
  */
 #ifndef _di_f_memory_array_resize_
-  extern f_status_t f_memory_array_resize(const f_number_unsigned_t length, const size_t width, void ** const array, f_number_unsigned_t * const used, f_number_unsigned_t * const size);
+  extern f_status_t f_memory_array_resize(const f_number_unsigned_t length, const size_t width, void ** restrict const array, f_number_unsigned_t * restrict const used, f_number_unsigned_t * restrict const size);
 #endif // _di_f_memory_array_resize_
 
 #ifdef __cplusplus
index 0e7d37bde3b4c05c88aaa08eb39e9705324a668c..c329d39eccfb6672a92b447421d2ec40d45788c0 100644 (file)
@@ -6,7 +6,7 @@ extern "C" {
 #endif
 
 #ifndef _di_f_memory_arrays_adjust_
-  f_status_t f_memory_arrays_adjust(const f_number_unsigned_t length, const size_t width, void ** const array, f_number_unsigned_t * const used, f_number_unsigned_t * const size, f_status_t (*callback)(const f_number_unsigned_t start, const f_number_unsigned_t size, void * const array)) {
+  f_status_t f_memory_arrays_adjust(const f_number_unsigned_t length, const size_t width, void ** const restrict array, f_number_unsigned_t * restrict const used, f_number_unsigned_t * restrict const size, f_status_t (*callback)(const f_number_unsigned_t start, const f_number_unsigned_t size, void * const array)) {
     #ifndef _di_level_0_parameter_checking_
       if (!width) return F_status_set_error(F_parameter);
       if (!array) return F_status_set_error(F_parameter);
@@ -27,7 +27,7 @@ extern "C" {
 #endif // _di_f_memory_arrays_adjust_
 
 #ifndef _di_f_memory_arrays_resize_
-  f_status_t f_memory_arrays_resize(const f_number_unsigned_t length, const size_t width, void ** const array, f_number_unsigned_t * const used, f_number_unsigned_t * const size, f_status_t (*callback)(const f_number_unsigned_t start, const f_number_unsigned_t size, void * const array)) {
+  f_status_t f_memory_arrays_resize(const f_number_unsigned_t length, const size_t width, void ** restrict const array, f_number_unsigned_t * restrict const used, f_number_unsigned_t * restrict const size, f_status_t (*callback)(const f_number_unsigned_t start, const f_number_unsigned_t size, void * const array)) {
     #ifndef _di_level_0_parameter_checking_
       if (!width) return F_status_set_error(F_parameter);
       if (!array) return F_status_set_error(F_parameter);
index a2460e5cf30ded768c57fff4898938300cdff604..4ecac14800e896913cc2c3026cbaabeee03106a1 100644 (file)
@@ -109,7 +109,7 @@ extern "C" {
  *   F_parameter (with error bit) if a parameter is invalid.
  */
 #ifndef _di_f_memory_arrays_resize_
-  extern f_status_t f_memory_arrays_resize(const f_number_unsigned_t length, const size_t width, void ** const array, f_number_unsigned_t * const used, f_number_unsigned_t * const size, f_status_t (*callback)(const f_number_unsigned_t start, const f_number_unsigned_t size, void * const array));
+  extern f_status_t f_memory_arrays_resize(const f_number_unsigned_t length, const size_t width, void ** restrict const array, f_number_unsigned_t * restrict const used, f_number_unsigned_t * restrict const size, f_status_t (*callback)(const f_number_unsigned_t start, const f_number_unsigned_t size, void * const array));
 #endif // _di_f_memory_arrays_resize_
 
 #ifdef __cplusplus
index 893f816b47dae2e37a90d34c013cdf37e30432cc..348e356571dc4b035ec932a1bc033dd74268aa5b 100644 (file)
@@ -7,7 +7,7 @@ extern "C" {
 #endif
 
 #if !defined(_di_f_memory_array_adjust_) || !defined(_di_f_memory_array_decimate_by_)
-  f_status_t private_f_memory_array_adjust(const f_number_unsigned_t length, const size_t width, void ** const array, f_number_unsigned_t * const used, f_number_unsigned_t * const size) {
+  f_status_t private_f_memory_array_adjust(const f_number_unsigned_t length, const size_t width, void ** restrict const array, f_number_unsigned_t * restrict const used, f_number_unsigned_t * restrict const size) {
 
     {
       const f_status_t status = private_f_memory_adjust(*size, length, width, array);
@@ -25,7 +25,7 @@ extern "C" {
 #endif // !defined(_di_f_memory_array_adjust_) || !defined(_di_f_memory_array_decimate_by_)
 
 #if !defined(_di_f_memory_array_append_) || !defined(_di_f_memory_array_append_all_) || !defined(_di_f_memory_array_decrease_by_) || !defined(_di_f_memory_array_increase_) || !defined(_di_f_memory_array_increase_by_) || !defined(_di_f_memory_array_resize_)
-  f_status_t private_f_memory_array_resize(const f_number_unsigned_t length, const size_t width, void ** const array, f_number_unsigned_t * const used, f_number_unsigned_t * const size) {
+  f_status_t private_f_memory_array_resize(const f_number_unsigned_t length, const size_t width, void ** const array, f_number_unsigned_t * const used, f_number_unsigned_t * restrict const size) {
 
     {
       const f_status_t status = private_f_memory_resize(*size, length, width, array);
index 6c28a7dd246841817988607ddc22d1c5e0075514..b86a26dd0ec3d9c1b5fa4063c09b2d6f4ba3edc5 100644 (file)
@@ -42,7 +42,7 @@ extern "C" {
  * @see f_memory_adjust()
  */
 #if !defined(_di_f_memory_array_adjust_) || !defined(_di_f_memory_array_decimate_by_)
-  extern f_status_t private_f_memory_array_adjust(const f_number_unsigned_t length, const size_t width, void ** const array, f_number_unsigned_t * const used, f_number_unsigned_t * const size) F_attribute_visibility_internal_d;
+  extern f_status_t private_f_memory_array_adjust(const f_number_unsigned_t length, const size_t width, void ** restrict const array, f_number_unsigned_t * restrict const used, f_number_unsigned_t * restrict const size) F_attribute_visibility_internal_d;
 #endif // !defined(_di_f_memory_array_adjust_) || !defined(_di_f_memory_array_decimate_by_)
 
 /**
@@ -76,7 +76,7 @@ extern "C" {
  * @see f_memory_resize()
  */
 #if !defined(_di_f_memory_array_append_) || !defined(_di_f_memory_array_append_all_) || !defined(_di_f_memory_array_decrease_by_) || !defined(_di_f_memory_array_increase_) || !defined(_di_f_memory_array_increase_by_) || !defined(_di_f_memory_array_resize_)
-  extern f_status_t private_f_memory_array_resize(const f_number_unsigned_t length, const size_t width, void ** const array, f_number_unsigned_t * const used, f_number_unsigned_t * const size) F_attribute_visibility_internal_d;
+  extern f_status_t private_f_memory_array_resize(const f_number_unsigned_t length, const size_t width, void ** restrict const array, f_number_unsigned_t * restrict const used, f_number_unsigned_t * restrict const size) F_attribute_visibility_internal_d;
 #endif // !defined(_di_f_memory_array_append_) || !defined(_di_f_memory_array_append_all_) || !defined(_di_f_memory_array_decrease_by_) || !defined(_di_f_memory_array_increase_) || !defined(_di_f_memory_array_increase_by_) || !defined(_di_f_memory_array_resize_)
 
 #ifdef __cplusplus