RicardasSim

obj

Jul 9th, 2024
1,022
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.60 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdint.h>
  4. #include <stdbool.h>
  5. #include <string.h>
  6.  
  7. typedef struct st
  8. {
  9.     char c;
  10.     int i;
  11.     float f;
  12. } St;
  13.  
  14. enum prc
  15. {
  16.     PR_INC_C = 1,
  17.     PR_INC_I = 2,
  18.     PR_ADD_1_F = 3
  19. };
  20.  
  21. void *ObjInit()
  22. {
  23.     St *p_s = calloc( 1, sizeof(St) );
  24.  
  25.     if ( !p_s )
  26.     {
  27.         return NULL;
  28.     }
  29.  
  30.     return p_s;
  31. }
  32.  
  33. bool ObjClean( void *p )
  34. {
  35.  
  36.     free( p );
  37.  
  38.     return true;
  39. }
  40.  
  41. bool ObjGet( void *p, char *var_name, void *p_val )
  42. {
  43.  
  44.     if ( !strcmp( var_name, "varc" ) )
  45.     {
  46.          *(char*) p_val = ((St*)p)->c;
  47.     }
  48.     else if ( !strcmp( var_name, "vari" ) )
  49.     {
  50.         *(int*) p_val = ((St*)p)->i;
  51.     }
  52.     else if ( !strcmp( var_name, "varf" ) )
  53.     {
  54.         *(float*) p_val = ((St*)p)->f;
  55.     }
  56.     else
  57.     {
  58.         return false;
  59.     }
  60.  
  61.     return true;
  62. }
  63.  
  64. bool ObjSet( void *p, char *var_name, void *p_val )
  65. {
  66.  
  67.     if ( !strcmp( var_name, "varc" ) )
  68.     {
  69.         ((St*)p)->c = *(char*) p_val;
  70.     }
  71.     else if ( !strcmp( var_name, "vari" ) )
  72.     {
  73.         ((St*)p)->i = *(int*) p_val;
  74.     }
  75.     else if ( !strcmp( var_name, "varf" ) )
  76.     {
  77.         ((St*)p)->f = *(float*) p_val;
  78.     }
  79.     else
  80.     {
  81.         return false;
  82.     }
  83.  
  84.     return true;
  85. }
  86.  
  87. bool ObjProc( void *p, int proc )
  88. {
  89.  
  90.     switch ( proc )
  91.     {
  92.         case PR_INC_C:
  93.  
  94.             ((St*)p)->c++;
  95.  
  96.         break;
  97.  
  98.         case PR_INC_I:
  99.  
  100.             ((St*)p)->i++;
  101.  
  102.         break;
  103.  
  104.         case PR_ADD_1_F:
  105.  
  106.             ((St*)p)->f += 1.0f;
  107.  
  108.         break;
  109.  
  110.     default:
  111.  
  112.         return false;
  113.  
  114.         //break;
  115.     }
  116.  
  117.     return true;
  118. }
  119.  
  120. int main()
  121. {
  122.  
  123.     void *p_obj[2] = {NULL};
  124.     unsigned int obj_num = 2;
  125.  
  126.     for ( unsigned int i = 0; i < obj_num; ++i )
  127.     {
  128.         p_obj[i] = ObjInit();
  129.  
  130.         if ( !p_obj[i] )
  131.         {
  132.             printf("Error: cannot initialize obj (%d).\n", i );
  133.  
  134.             for ( unsigned int j = i; j > 0; --j )
  135.             {
  136.                 ObjClean( p_obj[ j - 1 ] );
  137.             }
  138.  
  139.             return 1;
  140.         }
  141.     }
  142.  
  143.     //******************************
  144.  
  145.     char v_c = 'a';
  146.     int v_i = 1;
  147.     float v_f = 10.0f;
  148.  
  149.     ObjSet( p_obj[0], "varc", &v_c );
  150.     ObjSet( p_obj[0], "vari", &v_i );
  151.     ObjSet( p_obj[0], "varf", &v_f );
  152.  
  153.     v_c = 'b';
  154.     v_i = 2;
  155.     v_f = 20.0f;
  156.  
  157.     ObjSet( p_obj[1], "varc", &v_c );
  158.     ObjSet( p_obj[1], "vari", &v_i );
  159.     ObjSet( p_obj[1], "varf", &v_f );
  160.  
  161.     //******************************
  162.  
  163.     char test_a;
  164.     int test_i;
  165.     float test_f;
  166.  
  167.     ObjGet( p_obj[0], "varc", &test_a );
  168.     ObjGet( p_obj[0], "vari", &test_i );
  169.     ObjGet( p_obj[0], "varf", &test_f );
  170.  
  171.     printf("(1) %c %i %f\n", test_a, test_i, test_f );
  172.  
  173.     ObjGet( p_obj[1], "varc", &test_a );
  174.     ObjGet( p_obj[1], "vari", &test_i );
  175.     ObjGet( p_obj[1], "varf", &test_f );
  176.  
  177.     printf("(2) %c %i %f\n", test_a, test_i, test_f );
  178.  
  179.     //******************************
  180.  
  181.     ObjProc( p_obj[0], PR_ADD_1_F );
  182.     ObjProc( p_obj[1], PR_INC_C );
  183.  
  184.     //******************************
  185.  
  186.     ObjGet( p_obj[0], "varc", &test_a );
  187.     ObjGet( p_obj[0], "vari", &test_i );
  188.     ObjGet( p_obj[0], "varf", &test_f );
  189.  
  190.     printf("(1) %c %i %f\n", test_a, test_i, test_f );
  191.  
  192.     ObjGet( p_obj[1], "varc", &test_a );
  193.     ObjGet( p_obj[1], "vari", &test_i );
  194.     ObjGet( p_obj[1], "varf", &test_f );
  195.  
  196.     printf("(2) %c %i %f\n", test_a, test_i, test_f );
  197.  
  198.     //******************************
  199.  
  200.     for ( unsigned int i = 0; i < obj_num; ++i )
  201.     {
  202.         ObjClean( p_obj[i] );
  203.     }
  204.  
  205.  
  206.     return 0;
  207. }
  208.  
Advertisement