diff --git a/tensoriterator.c b/tensoriterator.c index 2f3c406..0a730e9 100644 --- a/tensoriterator.c +++ b/tensoriterator.c @@ -2,6 +2,12 @@ tensoriter_scalar tensoriter_scalar_create(tensor t) { + /* Creates an iterator over the values of a tensor. + * + * @param t The tensor to iterate over + * + * @return The iterator + */ assert(!tensor_is_empty(t)); tensoriter_scalar it = malloc(sizeof(struct _tensor_scalar_iterator)); @@ -15,29 +21,53 @@ tensoriter_scalar tensoriter_scalar_create(tensor t) void tensoriter_scalar_destroy(tensoriter_scalar it) { + /* Destroys an iterator. + * + * @param it The iterator to destroy + */ free(it); } -uint8_t tensoriter_scalar_next(tensoriter_scalar it) +bool tensoriter_scalar_next(tensoriter_scalar it) { + /* Checks whether the given iterator has a next value and sets this value + * as the current value if available. If there is not next value the + * iterator is destroyed and false is returned. + * + * @param it The iterator to evaluate + * + * @return true if there is a next value, false otherwise + */ if (it->length == 1) { tensoriter_scalar_destroy(it); - return 0; + return false; } it->current++; it->length--; - return 1; + return true; } dtype *tensoriter_scalar_get(tensoriter_scalar it) { + /* Gets the current value of the iterator. + * + * @param it The iterator to operate on + * + * @return A pointer to the current value + */ return it->current; } void tensoriter_scalar_map(tensoriter_scalar it, dtype (*func)(dtype)) { + /* Replaces every value in an iterator with the result of given function + * with the old value as a parameter. + * + * @param it The iterator to operate on + * @param func The map function that is called + */ do { dtype *el = tensoriter_scalar_get(it); *el = func(*el); @@ -46,6 +76,11 @@ void tensoriter_scalar_map(tensoriter_scalar it, dtype (*func)(dtype)) void tensoriter_scalar_map_add(tensoriter_scalar it, dtype scalar) { + /* Adds a fixed scalar value to all the values of the iterator. + * + * @param it The iterator to operate on + * @param scalar The value to add + */ do { DTYPE_ADD(*tensoriter_scalar_get(it), scalar); } while(tensoriter_scalar_next(it)); @@ -53,6 +88,11 @@ void tensoriter_scalar_map_add(tensoriter_scalar it, dtype scalar) void tensoriter_scalar_map_sub(tensoriter_scalar it, dtype scalar) { + /* Subtracts a fixed scalar value from all the values of the iterator. + * + * @param it The iterator to operate on + * @param scalar The value to subtract + */ do { DTYPE_SUB(*tensoriter_scalar_get(it), scalar); } while(tensoriter_scalar_next(it)); @@ -60,6 +100,11 @@ void tensoriter_scalar_map_sub(tensoriter_scalar it, dtype scalar) void tensoriter_scalar_map_mul(tensoriter_scalar it, dtype scalar) { + /* Multiplies a fixed scalar value with all the values of the iterator. + * + * @param it The iterator to operate on + * @param scalar The value to multiply + */ do { DTYPE_MUL(*tensoriter_scalar_get(it), scalar); } while(tensoriter_scalar_next(it)); @@ -67,6 +112,11 @@ void tensoriter_scalar_map_mul(tensoriter_scalar it, dtype scalar) void tensoriter_scalar_map_div(tensoriter_scalar it, dtype scalar) { + /* Divides all the values of the iterator by a fixed scalar value. + * + * @param it The iterator to operate on + * @param scalar The value to divide by + */ do { DTYPE_DIV(*tensoriter_scalar_get(it), scalar); } while(tensoriter_scalar_next(it)); diff --git a/tensoriterator.h b/tensoriterator.h index 762559d..2de276c 100644 --- a/tensoriterator.h +++ b/tensoriterator.h @@ -11,7 +11,7 @@ typedef struct _tensor_scalar_iterator { tensoriter_scalar tensoriter_scalar_create(tensor t); void tensoriter_scalar_destroy(tensoriter_scalar it); -uint8_t tensoriter_scalar_next(tensoriter_scalar it); +bool tensoriter_scalar_next(tensoriter_scalar it); dtype *tensoriter_scalar_get(tensoriter_scalar it); void tensoriter_scalar_map(tensoriter_scalar it, dtype (*func)(dtype));