home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1997 March / VPR9703A.ISO / VPR_DATA / DOGA / SOURCES / POLYEDIT.LZH / ML / OBJECT.C < prev    next >
C/C++ Source or Header  |  1995-03-20  |  1KB  |  91 lines

  1. /*
  2.  *        オブジェクト制御
  3.  *
  4.  *        T.Kobayashi        1994.5.21
  5.  */
  6.  
  7. #include <stdio.h>
  8. #include <string.h>
  9. #include <stdlib.h>
  10. #include <assert.h>
  11.  
  12. #include "data.h"
  13. #include "err.h"
  14.  
  15. #include "inlib.h"
  16.  
  17. int        ObjectCount ;
  18.  
  19. /*    オブジェクトの確保    */
  20. Object    *ObjectAlloc( size, type )
  21. int        size ;
  22. int        type ;
  23. {
  24.     Object    *p ;
  25.  
  26.  
  27.     p = MemoryAlloc( sizeof( Object ) + size );
  28.     if ( p == NULL )
  29.     {
  30.         ExecError( "オブジェクト領域が確保できません。" );
  31.     }
  32.     p->type = type ;
  33.     p->ref = 1 ;
  34.     p->size = size ;
  35.     ObjectCount++ ;
  36.     return p ;
  37. }
  38.  
  39. /*    オブジェクトの解放    */
  40. void    ObjectFree( obj )
  41. Object    *obj ;
  42. {
  43.     obj->ref -- ;
  44.     if ( obj->ref == 0 )
  45.     {
  46.         MemoryFree( obj );
  47.     }
  48.     ObjectCount-- ;
  49. }
  50.  
  51. /*    継承クラスのチェック    */
  52. int        ObjectCheck( buf, type )
  53. DataStruct    *buf ;
  54. int        type ;
  55. {
  56.     int        otype ;
  57.     
  58.     if ( buf->type == TYPE_OBJECT )
  59.     {
  60.         otype = buf->od.ptr->type ;
  61.         while( otype > 0 )
  62.         {
  63.             if ( otype == type )
  64.                 return TRUE ;
  65.             otype = ClassList[otype].parent ;
  66.         }
  67.     }
  68.     return FALSE ;
  69. }
  70.  
  71. /*    オブジェクトの複製をつくる    */
  72. Object    *ObjectDup( obj )
  73. Object    *obj ;
  74. {
  75.     Object    *ret ;
  76.  
  77.     ret = ObjectAlloc( obj->size, obj->type );
  78.     memcpy( ret, obj, sizeof( Object ) + obj->size );
  79.     ret->ref = 1 ;
  80.     return ret ;
  81. }
  82.  
  83. /*    オブジェクトのコピー        */
  84. Object    *ObjectCopy( obj )
  85. Object    *obj ;
  86. {
  87.     obj->ref ++ ;
  88.     ObjectCount++ ;
  89.     return obj ;
  90. }
  91.