Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
12
Task/Metaprogramming/C/metaprogramming-1.c
Normal file
12
Task/Metaprogramming/C/metaprogramming-1.c
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
// http://stackoverflow.com/questions/3385515/static-assert-in-c
|
||||
#define STATIC_ASSERT(COND,MSG) typedef char static_assertion_##MSG[(!!(COND))*2-1]
|
||||
// token pasting madness:
|
||||
#define COMPILE_TIME_ASSERT3(X,L) STATIC_ASSERT(X,static_assertion_at_line_##L)
|
||||
#define COMPILE_TIME_ASSERT2(X,L) COMPILE_TIME_ASSERT3(X,L)
|
||||
#define COMPILE_TIME_ASSERT(X) COMPILE_TIME_ASSERT2(X,__LINE__)
|
||||
|
||||
COMPILE_TIME_ASSERT(sizeof(long)==8);
|
||||
int main()
|
||||
{
|
||||
COMPILE_TIME_ASSERT(sizeof(int)==4);
|
||||
}
|
||||
9
Task/Metaprogramming/C/metaprogramming-2.c
Normal file
9
Task/Metaprogramming/C/metaprogramming-2.c
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//requires C99
|
||||
#define ITERATE_LIST(n, list) \
|
||||
for(Node *n = (list)->head; n; n = n->next)
|
||||
|
||||
...
|
||||
ITERATE_LIST(n, list)
|
||||
{
|
||||
printf("node value: %s\n", n->value);
|
||||
}
|
||||
3
Task/Metaprogramming/C/metaprogramming-3.c
Normal file
3
Task/Metaprogramming/C/metaprogramming-3.c
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
#define my_min(x, y) ((x) < (y) ? (x) : (y))
|
||||
...
|
||||
printf("%f %d %ll\n", my_min(0.0f, 1.0f), my_min(1,2), my_min(1ll, 2ll));
|
||||
45
Task/Metaprogramming/C/metaprogramming-4.c
Normal file
45
Task/Metaprogramming/C/metaprogramming-4.c
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
#define Str_init(_V_) char * _V_=NULL;
|
||||
|
||||
#define Free_secure(_X_) if(_X_) { free(_X_); _X_=NULL; }
|
||||
|
||||
#define Let(_X_,_Y_) \
|
||||
do{\
|
||||
if(_X_) free(_X_);\
|
||||
int len = strlen(_Y_);\
|
||||
_X_ = (char*)calloc( len + 1, 1);\
|
||||
if(_X_) { memcpy(_X_, _Y_, len); }\
|
||||
else { perror("\033[38;5;196mLet: No hay memoria para <"#_X_">(CALLOC)\n\033[0m"); }\
|
||||
}while(0);
|
||||
|
||||
/* inicia el trabajo con el stack */
|
||||
#define Stack if( (PILA_GADGET = 1) )
|
||||
|
||||
/* finaliza el trabajo con el stack. La pila debe quedar en "0" */
|
||||
#define Stack_off \
|
||||
PILA_GADGET = 0; \
|
||||
if(CONTADOR_PILA>=0){ Msg_red("Proceso termina con stack ocupado: borro sobrante\n");\
|
||||
CONTADOR_PILA=-1; }
|
||||
|
||||
/*
|
||||
STORE almacena el valor en la variable indicada, obtenido desde el
|
||||
stack. */
|
||||
#define Store(_X_,_Y_) \
|
||||
do{\
|
||||
_Y_;\
|
||||
if(PILA_GADGET){\
|
||||
if( CONTADOR_PILA>=0 ){\
|
||||
Let(_X_, pila_de_trabajo[CONTADOR_PILA]);CONTADOR_PILA--;\
|
||||
}\
|
||||
}else{ Msg_amber("Store: No hay datos en la pila");}\
|
||||
}while(0);
|
||||
...
|
||||
#define Main \
|
||||
int main(int argc, char* argv[]){\
|
||||
__TOKEN__=NULL;\
|
||||
Init_token();\
|
||||
Init_stack;
|
||||
|
||||
/* SALIDA NORMAL */
|
||||
#define End End_token(); \
|
||||
Free_stack_str;\
|
||||
return(0); }
|
||||
21
Task/Metaprogramming/C/metaprogramming-5.c
Normal file
21
Task/Metaprogramming/C/metaprogramming-5.c
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
#include <gadget/gadget.h>
|
||||
LIB_GADGET_START
|
||||
|
||||
Main
|
||||
String w, v="María tenía un corderito";
|
||||
|
||||
Stack{
|
||||
Store( v, Substr(v, Str_at("tenía",v),Str_len( Upper(v) )) );
|
||||
Store( v, Trim(Left( Upper(v), Str_at("CORDERITO",Upper(v))-1)));
|
||||
}Stack_off;
|
||||
|
||||
Print "msg stack : [%s]\n\n", v;
|
||||
|
||||
Let( v, "María tenía un corderito");
|
||||
|
||||
/* Str_len() sirve sin stack, pero en este caso es mejor usar strlen() de C. */
|
||||
w = Substr(v, Str_at("tenía",v),Str_len(v));
|
||||
Print "msg normal: %s\n", w;
|
||||
|
||||
Free secure w,v;
|
||||
End
|
||||
3
Task/Metaprogramming/C/metaprogramming-6.c
Normal file
3
Task/Metaprogramming/C/metaprogramming-6.c
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
#define Throw(_X_) if( !Is_ok ) { goto _X_; }
|
||||
#define Exception(_H_) _H_: if( !Is_ok++ )
|
||||
#define Assert(_X_,_Y_) if( !(_X_) ) { Is_ok=0; goto _Y_; }
|
||||
19
Task/Metaprogramming/C/metaprogramming-7.c
Normal file
19
Task/Metaprogramming/C/metaprogramming-7.c
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
#include <gadget/gadget.h>
|
||||
LIB_GADGET_START
|
||||
|
||||
Main
|
||||
int retVal=0;
|
||||
Assert( Arg_count == 2, fail_input );
|
||||
Get_arg_str( filename, 0 );
|
||||
Get_arg_float( number, 1 );
|
||||
|
||||
Print "First argument (filename) = %s\n", filename;
|
||||
Print "Second argument (a number) = %f\n", number;
|
||||
|
||||
Free secure filename;
|
||||
|
||||
Exception( fail_input ){
|
||||
Msg_yellow("Use:\n ./prog <number>\n");
|
||||
retVal=1;
|
||||
}
|
||||
Return( retVal );
|
||||
35
Task/Metaprogramming/C/metaprogramming-8.c
Normal file
35
Task/Metaprogramming/C/metaprogramming-8.c
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
/* declara un array vacío */
|
||||
#define New_mt_array(_X_) \
|
||||
MT_CELL *_X_ = NULL;\
|
||||
Define_New_Array(_X_)\
|
||||
_X_##_data.type = MULTI_TYPE;
|
||||
....
|
||||
/* acceso a celdas string */
|
||||
#define sCell(_X_,...) CONCAT2(Cell_mtstr, COUNT_ARGUMENTS(__VA_ARGS__))(_X_, ##__VA_ARGS__)
|
||||
|
||||
#define Cell_mtstr1(_X_,ARG1) (_X_[ ARG1 ].value)
|
||||
#define Cell_mtstr2(_X_,ARG1,ARG2) (_X_[ ( ARG1 ) * ( _X_##_data.cols ) + ( ARG2 ) ].value)
|
||||
#define Cell_mtstr3(_X_,ARG1,ARG2,ARG3) (_X_[ ( ( ARG1 ) * ( _X_##_data.cols ) + ( ARG2 ) ) + \
|
||||
( ARG3 ) * ( _X_##_data.cols * _X_##_data.rows ) ].value)
|
||||
...
|
||||
/* acceso a celdas long */
|
||||
#define lCell(_X_,...) CONCAT2(Cell_mtlng, COUNT_ARGUMENTS(__VA_ARGS__))(_X_, ##__VA_ARGS__)
|
||||
|
||||
#define Cell_mtlng1(_X_,ARG1) *((long *)(_X_[ ARG1 ].value))
|
||||
#define Cell_mtlng2(_X_,ARG1,ARG2) *((long *)(_X_[ ( ARG1 ) * ( _X_##_data.cols ) + ( ARG2 ) ].value))
|
||||
#define Cell_mtlng3(_X_,ARG1,ARG2,ARG3) *((long *)(_X_[ ( ( ARG1 ) * ( _X_##_data.cols ) + ( ARG2 ) ) + \
|
||||
( ARG3 ) * ( _X_##_data.cols * _X_##_data.rows ) ].value))
|
||||
|
||||
...
|
||||
/* RANGOS para acceso iterado */
|
||||
#define Range_for(_X_, ...) CONCAT2(Range_for, COUNT_ARGUMENTS(__VA_ARGS__))(_X_, ##__VA_ARGS__)
|
||||
|
||||
/* para un array 1D */
|
||||
#define Range_for3(_X_,A1,A2,A3) \
|
||||
_X_##_data.rowi=A1;_X_##_data.rowinc=A2;_X_##_data.rowe=A3;
|
||||
|
||||
/* para un array 2D */
|
||||
#define Range_for6(_X_,A1,A2,A3,B1,B2,B3) \
|
||||
_X_##_data.rowi=A1;_X_##_data.rowinc=A2;_X_##_data.rowe=A3; \
|
||||
_X_##_data.coli=B1;_X_##_data.colinc=B2;_X_##_data.cole=B3;
|
||||
....
|
||||
68
Task/Metaprogramming/C/metaprogramming-9.c
Normal file
68
Task/Metaprogramming/C/metaprogramming-9.c
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
#include <gadget/gadget.h>
|
||||
|
||||
LIB_GADGET_START
|
||||
|
||||
void Muestra_archivo_original();
|
||||
|
||||
Main
|
||||
Assert (Exist_file("load_matrix.txt"), file_not_found);
|
||||
|
||||
/* recupero informacion del archivo para su apertura segura */
|
||||
F_STAT dataFile = Stat_file("load_matrix.txt");
|
||||
Assert (dataFile.is_matrix, file_not_matrixable) // tiene forma de matriz???
|
||||
|
||||
New multitype test;
|
||||
|
||||
/* The data range to be read is established.
|
||||
It is possible to read only part of the file using these ranges. */
|
||||
Range for test [0:1:dataFile.total_lines-1, 0:1:dataFile.max_tokens_per_line-1];
|
||||
|
||||
/* cargamos el array detectando números enteros como long */
|
||||
test = Load_matrix_mt( pSDS(test), "load_matrix.txt", dataFile, DET_LONG);
|
||||
|
||||
/* modifica algunas cosas del archivo */
|
||||
Let( $s-test[0,1], "Columna 1");
|
||||
$l-test[2,1] = 1000;
|
||||
$l-test[2,2] = 2000;
|
||||
|
||||
/* inserto filas */
|
||||
/* preparo la fila a insertar */
|
||||
New multitype nueva_fila;
|
||||
sAppend_mt(nueva_fila,"fila 3.1"); /* sAppend_mt() and Append_mt() are macros */
|
||||
Append_mt(nueva_fila,float,0.0);
|
||||
Append_mt(nueva_fila,int,0);
|
||||
Append_mt(nueva_fila,double,0.0);
|
||||
Append_mt(nueva_fila,long, 0L);
|
||||
|
||||
/* insertamos la misma fila en el array, 3 veces */
|
||||
test = Insert_row_mt(pSDS(test),pSDS(nueva_fila), 4);
|
||||
test = Insert_row_mt(pSDS(test),pSDS(nueva_fila), 4);
|
||||
test = Insert_row_mt(pSDS(test),pSDS(nueva_fila), 4);
|
||||
Free multitype nueva_fila;
|
||||
|
||||
Print "\nGuardando archivo en \"save_matrix.txt\"...\n";
|
||||
DEC_PREC = 20; /* establece precision decimal */
|
||||
|
||||
All range for test;
|
||||
Save_matrix_mt(SDS(test), "save_matrix.txt" );
|
||||
|
||||
Free multitype test;
|
||||
|
||||
Print "\nArchivo original:\n";
|
||||
Muestra_archivo_original();
|
||||
|
||||
Exception( file_not_found ){
|
||||
Msg_red("File not found\n");
|
||||
}
|
||||
Exception( file_not_matrixable ){
|
||||
Msg_red("File is not matrixable\n");
|
||||
}
|
||||
|
||||
End
|
||||
|
||||
void Muestra_archivo_original(){
|
||||
String csys;
|
||||
csys = `cat load_matrix.txt`;
|
||||
Print "\n%s\n", csys;
|
||||
Free secure csys;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue