C objects (v0.9)
Objects are 'vars' that stores complex data.
C OBJECTS API
- $S( arena, char * ) : Creates a string var, ( char * -> var )
var str = $STR( a, "4.4546");
- $CHARS( string ) : Returns a char * pointing the contents of string. ( var -> char *)
var str = $S( a, "4.4546");
char *s = $CHARS(str);
- $LEN( string ) : Returns the number of bytes stored in string. Len is polymorphic and is valid to hashes an arrays.
var str = $S( a, "4.4546");
int i = $LEN(str);
- $H(arena). Creates a hash in an arena. (list indexed by string)
var arena_1 = $A(1024); // create an arena
var hash = $H(arena_1); // create a hash in arena_1
- $AR(arena). Creates an array in an arena. (list indexed by integers)
var arena_1 = $A(1024); // create an arena
var ar = $AR(arena_1); // create an array in arena_1
- $ARN(arena, n_elements). Creates an array in an arena optimized for n_elements elements.
var arena_1 = $A(1024); // create an arena
var ar = $ARN(arena_1, 100000); // create an array for 10000 elements in arena_1
- $AR(arena, v1,v2,...). Creates an array in an arena. (list indexed by integers) and load values v1,v2,...
var arena_1 = $A(1024); // create an arena
var ar = $AR(arena_1, $INT(1), $FLOAT(3.5) , $H(arena_1) ); // create a array in arena_1 and populate it.
- $O(arena, cvar) : Generical constuctor: Creates a var from a c raw variable:
- if cvar is a char * then $O(arena, str) is equivalent to $S(arena,str)
- if cvar is a int , unsigned int, uint64_t or int64_t $O(arena, i) is equivalent to $INT(i)
- if cvar is a float or double then $O(arena, f) is equivalent to $FLOAT(f)
- $JSON(arena, text) : Creates a var from its JSON serialization. Text must be a char * pointing to a JSON serialized object or a string
var a = $A(1024); // create an arena
var ar = $JSON(a, "[1,2,3,5, '23']" )
var ar2 = $VOID;
$AB(a2, {
var str = $O(a2,"[1,2,3,5, '23']"); // create a string var in a tmp arena.
ar2 = $JSON(a, str);
});
- $LEN( object ) : Returns the number of elements stored in a object. In arrays returns max index + 1.
var o = $AR( a);
$SET(o, 123, $INT(12));
int i = $LEN(o); // i is 123
- $COUNT( object ) : Returns the number of elements stored in a object. In arrays returns the number of objects, not the last index.
var o = $AR( a);
$SET(o, 123, $INT(12));
int i = $COUNT(o); // i is 1
- $GET(object, index) : Return the element stored in object an indexed by index. object can be arrays, hashes, tries,...
- $SET(object, index, value) : stores value in object indexed by index. If value is null then the index objects will be deleted. The macro returns the number of new objects created (+1,0,-1)
var o = $AR(a);
int n = 0;
n += $SET(o, 1, $INT(12)); /// returns 1
n += $SET(o, 1, $INT(15)); /// returns 0
n += $SET(o, 2, null ); /// returns 0
n += $SET(o, 1, null ); /// returns -1
o = $H(a);
int n = 0;
n += $SET(o, "A", $INT(12)); /// returns 1
n += $SET(o, "A", $INT(15)); /// returns 0
n += $SET(o, "B", null ); /// returns 0
n += $SET(o, "A", null ); /// returns -1
- $PUSH(array,element) : Insert an element at the end of the array
- $POP(array,element) : Extract an element from the end of the array.
var o = $AR(a);
int n = 0;
$PUSH(o , $INT(1)); // o == [1]
$PUSH(o , $INT(2)); // o == [1,2]
$PUSH(o , $INT(3)); // o == [1,2,3]
$PUSH(o , $INT(4)); // o == [1,2,3,4]
$PUSH(o , $INT(5)); // o == [1,2,3,4,5]
var t = $POP(o); // o == [1,2,3,4] , t == 5
- $ARRAY_FE( array, ({ code }) ) : For every value stored in array, code is evaluated. The loop is executed
for all the array elements or until code returns a non cero value. The macro creates a set of internal local variables accessed from code:
- var _v : Value of the element in the loop
- var _k : Key of the element (an Integer object)
- var _vp : Pointer to value. Useful to change values of the array on the fly.
// change values of an array
var arena_1 = $A(1024);
$AR(arena_1, $INT(1), $INT(2), $INT(3) );
$ARRAY_FE (array ,
({
int64_t iv = $I(_v);
*_vp = $INT(iv * 2);
1; // don't stop
});
);
- $HASH_FE( hash, ({ code }) ) : For every value stored in hash, code is evaluated. The loop is executed
for all the hash elements or until code returns a non cero value. The macro creates a set of internal local variables accessed from code:
- var _v : Value of the element
- var _k : Key of the element (an Integer object)
- kv_t *_kv : Pointer to key-value pair. kv_t is a struct with two vars: k and v. Useful to change values or keys of the hash on the fly.
// change values of an array
var arena = $A(1024);
var h = $H(arena);
$SET(h, "tx1" , 1);
$SET(h, "tx2" , 2);
$SET(h, "tx4" , 3);
$SET(h, "tx3" , 4);
$HASH_FE (h,
({
uint64_t iv = $I(_v);
_kv->v = $INT(iv * 2);
1; // don't stop
});
);