aaaaaa123456789 icon

C optimization example - 100

aaaaaa123456789 | PRO | 02/16/19 03:18:01 AM UTC | 0 ⭐ | 506 👁️ | Never ⏰ | []
C |

1 KB

|

None

|

0 👍

/

0 👎

static void fold (const void * array, unsigned size, unsigned count,
                  void (* callback) (void *, const void *), void * initial) {
  const char * p = array;
  while (count --) {
    callback(initial, p);
    p += size;
  }
}
 
static void add_integers (void * accumulator, const void * value) {
  *(unsigned *) accumulator += *(const unsigned *) value;
}
 
static unsigned sum_array (const unsigned * array, unsigned count) {
  unsigned result = 0;
  fold(array, sizeof *array, count, &add_integers, &result);
  return result;
}
 
static void initialize_array (unsigned * array, unsigned count) {
  unsigned p;
  for (p = 0; p < count; p ++) array[p] = p;
}
 
unsigned hundred (void) {
  unsigned values[10];
  initialize_array(values, sizeof values / sizeof *values);
  unsigned p, sum = sum_array(values, sizeof values / sizeof *values);
  for (p = 0; p < (sizeof values / sizeof *values); p ++) values[p] = 10 - p;
  return sum + sum_array(values, sizeof values / sizeof *values);
}

Comments