Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <stdint.h>
- #include <stdbool.h>
- #include <string.h>
- typedef struct st
- {
- char c;
- int i;
- float f;
- } St;
- enum prc
- {
- PR_INC_C = 1,
- PR_INC_I = 2,
- PR_ADD_1_F = 3
- };
- void *ObjInit()
- {
- St *p_s = calloc( 1, sizeof(St) );
- if ( !p_s )
- {
- return NULL;
- }
- return p_s;
- }
- bool ObjClean( void *p )
- {
- free( p );
- return true;
- }
- bool ObjGet( void *p, char *var_name, void *p_val )
- {
- if ( !strcmp( var_name, "varc" ) )
- {
- *(char*) p_val = ((St*)p)->c;
- }
- else if ( !strcmp( var_name, "vari" ) )
- {
- *(int*) p_val = ((St*)p)->i;
- }
- else if ( !strcmp( var_name, "varf" ) )
- {
- *(float*) p_val = ((St*)p)->f;
- }
- else
- {
- return false;
- }
- return true;
- }
- bool ObjSet( void *p, char *var_name, void *p_val )
- {
- if ( !strcmp( var_name, "varc" ) )
- {
- ((St*)p)->c = *(char*) p_val;
- }
- else if ( !strcmp( var_name, "vari" ) )
- {
- ((St*)p)->i = *(int*) p_val;
- }
- else if ( !strcmp( var_name, "varf" ) )
- {
- ((St*)p)->f = *(float*) p_val;
- }
- else
- {
- return false;
- }
- return true;
- }
- bool ObjProc( void *p, int proc )
- {
- switch ( proc )
- {
- case PR_INC_C:
- ((St*)p)->c++;
- break;
- case PR_INC_I:
- ((St*)p)->i++;
- break;
- case PR_ADD_1_F:
- ((St*)p)->f += 1.0f;
- break;
- default:
- return false;
- //break;
- }
- return true;
- }
- int main()
- {
- void *p_obj[2] = {NULL};
- unsigned int obj_num = 2;
- for ( unsigned int i = 0; i < obj_num; ++i )
- {
- p_obj[i] = ObjInit();
- if ( !p_obj[i] )
- {
- printf("Error: cannot initialize obj (%d).\n", i );
- for ( unsigned int j = i; j > 0; --j )
- {
- ObjClean( p_obj[ j - 1 ] );
- }
- return 1;
- }
- }
- //******************************
- char v_c = 'a';
- int v_i = 1;
- float v_f = 10.0f;
- ObjSet( p_obj[0], "varc", &v_c );
- ObjSet( p_obj[0], "vari", &v_i );
- ObjSet( p_obj[0], "varf", &v_f );
- v_c = 'b';
- v_i = 2;
- v_f = 20.0f;
- ObjSet( p_obj[1], "varc", &v_c );
- ObjSet( p_obj[1], "vari", &v_i );
- ObjSet( p_obj[1], "varf", &v_f );
- //******************************
- char test_a;
- int test_i;
- float test_f;
- ObjGet( p_obj[0], "varc", &test_a );
- ObjGet( p_obj[0], "vari", &test_i );
- ObjGet( p_obj[0], "varf", &test_f );
- printf("(1) %c %i %f\n", test_a, test_i, test_f );
- ObjGet( p_obj[1], "varc", &test_a );
- ObjGet( p_obj[1], "vari", &test_i );
- ObjGet( p_obj[1], "varf", &test_f );
- printf("(2) %c %i %f\n", test_a, test_i, test_f );
- //******************************
- ObjProc( p_obj[0], PR_ADD_1_F );
- ObjProc( p_obj[1], PR_INC_C );
- //******************************
- ObjGet( p_obj[0], "varc", &test_a );
- ObjGet( p_obj[0], "vari", &test_i );
- ObjGet( p_obj[0], "varf", &test_f );
- printf("(1) %c %i %f\n", test_a, test_i, test_f );
- ObjGet( p_obj[1], "varc", &test_a );
- ObjGet( p_obj[1], "vari", &test_i );
- ObjGet( p_obj[1], "varf", &test_f );
- printf("(2) %c %i %f\n", test_a, test_i, test_f );
- //******************************
- for ( unsigned int i = 0; i < obj_num; ++i )
- {
- ObjClean( p_obj[i] );
- }
- return 0;
- }
Advertisement