Simplify example code
This commit is contained in:
1 parent
c4ab76a330
commit
d31ccfe8a4
1 file changed
+45
-33
+45
-33
@@ -3,7 +3,9 @@
|
||||
#include "m-string.h"
|
||||
#include "m-tuple.h"
|
||||
|
||||
/* Provide several examples of basic types usage with array.
|
||||
/* Provide several examples of different types usage with array,
|
||||
with the oplist to use for each case.
|
||||
|
||||
Each time it creates and initializes an array,
|
||||
fills it with some number,
|
||||
computes its sum,
|
||||
@@ -13,10 +15,12 @@
|
||||
- integers,
|
||||
- floats,
|
||||
- pointers,
|
||||
- structures.
|
||||
- structures,
|
||||
- tuples
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/* Generate prototypes and inline functions
|
||||
for basic types.
|
||||
For integer and floats, there is no need to specify
|
||||
@@ -45,6 +49,8 @@ test_bool(int n)
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Same with type char */
|
||||
ARRAY_DEF(r_char, char)
|
||||
|
||||
@@ -68,6 +74,8 @@ test_char(int n)
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Same with type signed int. */
|
||||
ARRAY_DEF(r_int, signed int)
|
||||
|
||||
@@ -91,6 +99,8 @@ test_int(int n)
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Same with type signed int.
|
||||
But with an explicit oplist.
|
||||
This generates exactly the same code than r_int
|
||||
@@ -117,6 +127,8 @@ test_int2(int n)
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Same with type unsigned long long */
|
||||
ARRAY_DEF(r_ullong, unsigned long long)
|
||||
|
||||
@@ -140,6 +152,8 @@ test_ullong(int n)
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Same with type float */
|
||||
ARRAY_DEF(r_float, float)
|
||||
|
||||
@@ -163,6 +177,8 @@ test_float(int n)
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Same with type double and an explicit oplist*/
|
||||
ARRAY_DEF(r_double, double, M_DEFAULT_OPLIST)
|
||||
|
||||
@@ -186,6 +202,9 @@ test_double(int n)
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Helper function strdup */
|
||||
static char *my_strdup(const char *p)
|
||||
{
|
||||
size_t s = strlen(p);
|
||||
@@ -243,6 +262,8 @@ test_cstring(int n)
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Same with type string_t of M*LIB, representing a variable string.
|
||||
We don't need explicit oplist to tell M*LIB!
|
||||
The oplist to use is STRING_OPLIST,
|
||||
@@ -280,12 +301,15 @@ test_string(int n)
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Same with type string_t of M*LIB, representing a variable string
|
||||
and its explicit oplist. And said above, it generates exactly the
|
||||
same code. */
|
||||
ARRAY_DEF(r_string2, string_t, STRING_OPLIST)
|
||||
|
||||
|
||||
|
||||
/* Same with type 'volatile unsigned int *'
|
||||
The array stores pointers to another integer,
|
||||
allocated somewhere else.
|
||||
@@ -327,6 +351,7 @@ test_vintptr(int n)
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Same with a structure type.
|
||||
We need to tell M*LIB to handle the basic type
|
||||
as POD;
|
||||
@@ -345,32 +370,28 @@ test_rockme(int n)
|
||||
{
|
||||
r_rockme_t array;
|
||||
|
||||
// Allocate a secondary table to store the structure
|
||||
// for the purpose of this test.
|
||||
struct rock_me_out *tab = calloc(n, sizeof(struct rock_me_out));
|
||||
if (!tab) abort();
|
||||
|
||||
r_rockme_init(array);
|
||||
for(int i = 0; i < n; i++) {
|
||||
tab[i].n = i*i - i;
|
||||
// Push the pointer to this integer in the array
|
||||
r_rockme_push_back(array, tab[i]);
|
||||
struct rock_me_out rock;
|
||||
rock.n = i*i - i;
|
||||
// Push the struct in the array
|
||||
r_rockme_push_back(array, rock);
|
||||
}
|
||||
|
||||
int s = 0;
|
||||
for(int i = 0; i < n; i++) {
|
||||
// Get the pointer to the integer.
|
||||
// Get the pointer to the struct
|
||||
struct rock_me_out *p = r_rockme_get(array, i);
|
||||
s += p->n;
|
||||
}
|
||||
|
||||
r_rockme_clear(array);
|
||||
free(tab);
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Same with a structure type defined with [1]:
|
||||
We need to tell M*LIB to handle the basic type
|
||||
as a special array;
|
||||
@@ -389,32 +410,27 @@ test_rockme2(int n)
|
||||
{
|
||||
r_rockme2_t array;
|
||||
|
||||
// Allocate a secondary table to store the structure
|
||||
// for the purpose of this test.
|
||||
rock_me_in *tab = calloc(n, sizeof(struct rock_me_in));
|
||||
if (!tab) abort();
|
||||
|
||||
r_rockme2_init(array);
|
||||
for(int i = 0; i < n; i++) {
|
||||
tab[i]->n = i*i - i;
|
||||
// Push the pointer to this integer in the array
|
||||
r_rockme2_push_back(array, tab[i]);
|
||||
rock_me_in rock;
|
||||
rock->n = i*i - i;
|
||||
r_rockme2_push_back(array, rock);
|
||||
}
|
||||
|
||||
int s = 0;
|
||||
for(int i = 0; i < n; i++) {
|
||||
// Get the pointer to the integer.
|
||||
// Get the pointer to the struct.
|
||||
rock_me_in *p = r_rockme2_get(array, i);
|
||||
s += (*p)->n;
|
||||
}
|
||||
|
||||
r_rockme2_clear(array);
|
||||
free(tab);
|
||||
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Same with a structure type defined with [1] and a global registeration.
|
||||
We need to tell M*LIB to handle the basic type
|
||||
as a special array.
|
||||
@@ -438,32 +454,27 @@ test_rockme2b(int n)
|
||||
{
|
||||
r_rockme2b_t array;
|
||||
|
||||
// Allocate a secondary table to store the structure
|
||||
// for the purpose of this test.
|
||||
rock_me_in *tab = calloc(n, sizeof(struct rock_me_in));
|
||||
if (!tab) abort();
|
||||
|
||||
r_rockme2b_init(array);
|
||||
for(int i = 0; i < n; i++) {
|
||||
tab[i]->n = i*i - i;
|
||||
// Push the pointer to this integer in the array
|
||||
r_rockme2b_push_back(array, tab[i]);
|
||||
rock_me_in rock;
|
||||
rock->n = i*i - i;
|
||||
r_rockme2b_push_back(array, rock);
|
||||
}
|
||||
|
||||
int s = 0;
|
||||
for(int i = 0; i < n; i++) {
|
||||
// Get the pointer to the integer.
|
||||
// Get the pointer to the struct.
|
||||
rock_me_in *p = r_rockme2b_get(array, i);
|
||||
s += (*p)->n;
|
||||
}
|
||||
|
||||
r_rockme2b_clear(array);
|
||||
free(tab);
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Same with a structure type defined as a tuple.
|
||||
|
||||
We first define a tuple. No need to specify the oplist as it uses basic C types
|
||||
@@ -505,6 +516,7 @@ test_rockme3(int n)
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Same with a structure type defined as a tuple using global registeration.
|
||||
|
||||
We first define a tuple. No need to specify the oplist as it uses basic C types
|
||||
|
||||
Reference in new issue
Block a user