C objects (v0.9)

From Native Big Data Documentation
Jump to: navigation, search


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
	});
);