亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ftobject.c

?? a very goog book
?? C
字號(hào):
#include "ftobject.c"#define  FT_MAGIC_DEATH   0xDEADdead#define  FT_MAGIC_CLASS   0x12345678#define  FT_OBJECT_CHECK(o)                                  \           ( FT_OBJECT(o)              != NULL            && \             FT_OBJECT(o)->clazz       != NULL            && \             FT_OBJECT(o)->ref_count   >= 1               && \             FT_OBJECT(o)->clazz->magic == FT_MAGIC_CLASS ) /*******************************************************************/ /*******************************************************************/ /*****                                                         *****/ /*****                                                         *****/ /*****                  M E T A - C L A S S                    *****/ /*****                                                         *****/ /*****                                                         *****/ /*******************************************************************/ /*******************************************************************/ /* we use a dynamic hash table to map types to classes */ /* this structure defines the layout of each node of   */ /* this table                                          */  typedef struct FT_ClassHNodeRec_  {    FT_HashNodeRec  hnode;    FT_Type         ctype;    FT_Class        clazz;  } FT_ClassHNodeRec, *FT_ClassHNode; /* the meta class contains a type -> class mapping */ /* and owns all class objects..                    */ /*                                                 */  typedef struct FT_MetaClassRec_  {    FT_ClassRec  clazz;    FT_HashRec   type_to_class;  } FT_MetaClassRec, *FT_MetaClass; /* forward declaration */  static const FT_TypeRec  ft_meta_class_type; /* destroy a given class */  static void  ft_class_hnode_destroy( FT_ClassHNode  node )  {    FT_Clazz   clazz  = node->clazz;    FT_Memory  memory = clazz->memory;    FT_Type    ctype  = clazz->type;    if ( ctype->class_done )      ctype->class_done( clazz );    FT_FREE( clazz );    node->clazz = NULL;    node->type  = NULL;    FT_FREE( node );  }  static FT_Int  ft_class_hnode_compare( const FT_ClassHNode  node1,                          const FT_ClassHNode  node2 )  {    return ( node1->type == node2->type );  }  static void  ft_metaclass_done( FT_MetaClass  meta )  {    /* clear all objects */    ft_hash_done( &meta->type_to_class,                  (FT_Hash_ForeachFunc) ft_class_destroy,                   NULL );    meta->clazz->object.clazz    = NULL;    meta->clazz->object.ref_count = 0;    meta->clazz->magic            = FT_MAGIC_DEATH;  }  static void  ft_metaclass_init( FT_MetaClass  meta,                     FT_Library    library )  {    FT_ClassRec*  clazz = meta->clazz;    /* the meta-class is its OWN class !! */    clazz->object.clazz     = (FT_Class) clazz;    clazz->object.ref_count = 1;    clazz->magic            = FT_MAGIC_CLASS;    clazz->library          = library;    clazz->memory           = library->memory;    clazz->type             = &ft_metaclass_type;    clazz->info             = NULL;    clazz->obj_size         = sizeof( FT_ClassRec );    clazz->obj_init         = NULL;    clazz->obj_done         = NULL;    ft_hash_init( &meta->type_to_class,                  (FT_Hash_CompareFunc) ft_class_hnode_compare,                  library->memory );  } /* find or create the class corresponding to a given type */  static FT_Class  ft_metaclass_get_class( FT_MetaClass  meta,                          FT_Type       ctype )  {    FT_ClassHNodeRec   keynode, *node, **pnode;    FT_Memory          memory;    keynode.hnode.hash = (FT_UInt32)( ctype >> 2 );    keynode.type       = type;    pnode = (FT_ClassHNode) ft_hash_lookup( &meta->type_to_class,                                            &noderec );    node  = *pnode;    if ( node != NULL )      return node->clazz;    memory = FT_CLASS__MEMORY(meta);    node   = FT_MEM_SAFE_ALLOC( sizeof(*node) );    if ( node != NULL )    {      FT_ClassRec*  clazz;      clazz = FT_MEM_SAFE_ALLOC( ctype->class_size );      if ( clazz == NULL )      {        FT_FREE( node );        FT_XTHROW( FT_Err_Out_Of_Memory );      }    }  }  static const FT_TypeRec  ft_meta_class_type =  {    "FT2.MetaClass",    NULL,    sizeof( FT_MetaClassRec ),    (FT_Object_InitFunc)  ft_metaclass_init,    (FT_Object_DoneFunc)  ft_metaclass_done,    sizeof( FT_ClassRec ),    (FT_Object_InitFunc)  ft_class_init,    (FT_Object_DoneFunc)  ft_class_done  };  FT_BASE_DEF( FT_Int )  ft_object_check( FT_Pointer  obj )  {    return FT_OBJECT_CHECK(obj);  }  FT_BASE_DEF( FT_Int )  ft_object_is_a( FT_Pointer  obj,                  FT_Class    clazz )  {    if ( FT_OBJECT_CHECK(obj) )    {      FT_Object  o = FT_OBJECT(obj);      FT_Class   c = FT_OBJECT__CLASS(obj);      do      {        if ( c == clazz )          return 1;        c = c->super;      }      while ( c == NULL );      return (clazz == NULL);    }  } /* the cleanup routine for all objects */  static void  ft_object_cleanup( FT_Object  object )  {    FT_Memory  memory = FT_OBJECT__MEMORY(object);    FT_Class   clazz  = FT_OBJECT__CLASS(object);    if ( clazz->obj_done )      clazz->obj_done( object );    FT_FREE( object );  }  FT_BASE_DEF( FT_Object )  ft_object_new( FT_Class    clazz,                 FT_Pointer  init_data )  {    FT_Memory  memory;    FT_Object  obj;    FT_ASSERT_IS_CLASS(clazz);    memory         = FT_CLASS__MEMORY(clazz);    obj            = ft_mem_alloc( clazz->obj_size, memory );    obj->clazz     = clazz;    obj->ref_count = 1;    if ( clazz->obj_init )    {      FT_CleanupStack  stack = FT_MEMORY__CLEANUP(memory);      ft_cleanup_push( stack, obj, (FT_CleanupFunc) ft_object_cleanup, NULL );      clazz->obj_init( obj, init_data );      ft_cleanup_pop( stack, obj, 0 );    }    return obj;  }  FT_BASE_DEF( void )  ft_object_create( FT_Object  *pobject,                    FT_Class    clazz,                    FT_Pointer  init_data )  {    FT_Memory  memory;    FT_Object  obj;    FT_ASSERT_IS_CLASS(clazz);    memory         = FT_CLASS__MEMORY(memory);    obj            = ft_mem_alloc( clazz->obj_size, memory );    obj->clazz     = clazz;    obj->ref_count = 1;    *pobject       = obj;    if ( clazz->obj_init )      clazz->obj_init( obj, init_data );  }  FT_BASE_DEF( FT_Class )  ft_class_find_by_type( FT_Type    type,                         FT_Memory  memory )  {  }  FT_BASE_DEF( FT_Class )  ft_class_find_by_name( FT_CString  class_name,                         FT_Memory   memory );  FT_BASE_DEF( FT_Object )  ft_object_new_from_type( FT_Type     type,                           FT_Pointer  data,                           FT_Memory   memory );  FT_BASE_DEF( void )  ft_object_create_from_type( FT_Object  *pobject,                              FT_Type     type,                              FT_Pointer  init_data,                              FT_Memory   memory );  FT_BASE_DEF( void )  ft_object_push( FT_Object  object );  FT_BASE_DEF( void )  ft_object_pop( FT_Object  object );  FT_BASE_DEF( void )  ft_object_pop_destroy( FT_Object  object );

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美成人aa大片| 精品视频1区2区| 欧美一区二区观看视频| 国产精品麻豆视频| 日韩电影在线看| 亚洲精选免费视频| 韩国三级中文字幕hd久久精品| 94色蜜桃网一区二区三区| 精品伦理精品一区| 亚洲大片免费看| 91美女精品福利| 国产拍揄自揄精品视频麻豆| 日本成人在线看| 精品视频1区2区| 亚洲精品成人少妇| 成人av在线电影| 久久蜜桃av一区精品变态类天堂| 日韩黄色免费电影| 欧美主播一区二区三区美女| 欧美韩国日本不卡| 国产伦精品一区二区三区免费 | 一区二区三区影院| 国产.欧美.日韩| 精品国产乱码久久久久久老虎| 丝袜美腿亚洲一区| 欧美日韩亚洲综合| 亚洲裸体在线观看| 色综合天天综合网国产成人综合天| 久久久久久亚洲综合| 狠狠狠色丁香婷婷综合激情| 91麻豆精品国产自产在线观看一区 | 91麻豆视频网站| 中文av一区二区| gogo大胆日本视频一区| 国产精品你懂的| 丁香天五香天堂综合| 国产性色一区二区| 国产成人aaaa| 欧美国产日韩亚洲一区| 成人免费毛片嘿嘿连载视频| 中文字幕不卡在线| 成人av一区二区三区| 国产欧美1区2区3区| 懂色av一区二区夜夜嗨| 久久精品人人做人人爽人人| 国产精品系列在线播放| 国产视频一区在线观看 | 亚洲小说欧美激情另类| 在线视频综合导航| 婷婷久久综合九色国产成人| 欧美日韩激情在线| 日本不卡视频一二三区| 精品久久久久久久人人人人传媒| 激情综合色播五月| 2022国产精品视频| 国产sm精品调教视频网站| 国产精品久久毛片av大全日韩| 91一区二区三区在线观看| 亚洲午夜av在线| 欧美一级夜夜爽| 国产一区二区美女诱惑| 欧美高清一级片在线观看| 成人视屏免费看| 亚洲精品乱码久久久久久久久| 欧美色倩网站大全免费| 日本不卡高清视频| 国产三级一区二区三区| 91网址在线看| 日韩国产精品久久| 久久久久一区二区三区四区| 成人小视频免费在线观看| 中文字幕一区二区三区在线播放 | 激情成人午夜视频| 国产欧美1区2区3区| 色狠狠色噜噜噜综合网| 免费成人性网站| 国产精品你懂的在线欣赏| 在线一区二区三区四区| 免费精品视频最新在线| 国产视频一区二区在线观看| 91成人国产精品| 韩国av一区二区三区| 综合久久久久综合| 在线电影欧美成精品| 懂色av噜噜一区二区三区av| 亚洲精品一二三区| 精品成人私密视频| 色噜噜久久综合| 另类调教123区| 综合激情网...| 日韩视频一区二区在线观看| 国产99一区视频免费| 亚洲二区在线视频| 久久久久久久网| 在线看不卡av| 国产sm精品调教视频网站| 亚洲h动漫在线| 国产精品视频一二三区| 欧美福利视频一区| 成人福利电影精品一区二区在线观看| 午夜精品一区二区三区免费视频| 久久久久久综合| 欧美日韩久久久一区| 粉嫩aⅴ一区二区三区四区| 天堂资源在线中文精品| 国产精品久久久久精k8| 日韩一区二区三区高清免费看看| 97精品电影院| 国产精品亚洲а∨天堂免在线| 亚洲v中文字幕| 国产精品久久久久久久午夜片| 日韩一级免费观看| 91国产福利在线| 丰满岳乱妇一区二区三区| 日日夜夜精品视频天天综合网| 中文字幕日韩精品一区| 久久综合九色综合97_久久久| 欧美影片第一页| 99久久婷婷国产| 国产99久久久国产精品潘金| 免费国产亚洲视频| 亚洲成av人片一区二区| 成人欧美一区二区三区| 国产亚洲欧美日韩在线一区| 69av一区二区三区| 在线精品视频一区二区三四| 国产白丝精品91爽爽久久| 激情综合色综合久久综合| 亚洲成人三级小说| 亚洲伊人伊色伊影伊综合网| 亚洲国产高清不卡| 久久影视一区二区| 日韩欧美在线观看一区二区三区| 91豆麻精品91久久久久久| 99国产精品久久久久久久久久 | 国产成人8x视频一区二区| 久久99蜜桃精品| 日本不卡一区二区三区高清视频| 亚洲精品国产a久久久久久| 亚洲欧美综合在线精品| 亚洲国产精品av| 欧美国产日韩在线观看| 久久久久久久电影| 久久久久久免费| 久久看人人爽人人| 日韩av电影免费观看高清完整版| 欧美一区午夜精品| 高清视频一区二区| 国产在线精品不卡| 国产一区二区三区四区五区美女 | 国产一区在线精品| 激情综合色播激情啊| 另类小说图片综合网| 蜜桃视频在线观看一区| 青草av.久久免费一区| 蜜臀久久99精品久久久画质超高清 | 2019国产精品| 精品国产精品一区二区夜夜嗨| 欧美刺激午夜性久久久久久久| 91精品麻豆日日躁夜夜躁| 欧美疯狂做受xxxx富婆| 91精品国产综合久久香蕉的特点| 9191精品国产综合久久久久久| 欧美日韩不卡视频| 91精品国产色综合久久| 日韩一区二区在线免费观看| 欧美一级黄色片| 精品福利视频一区二区三区| 久久精品视频免费观看| 国产精品丝袜久久久久久app| 最新热久久免费视频| 亚洲免费av在线| 亚洲成人一区在线| 久久er精品视频| 粉嫩aⅴ一区二区三区四区| 91伊人久久大香线蕉| 欧美综合一区二区| 91精品在线观看入口| 精品国产sm最大网站免费看| 久久久精品tv| 一区在线观看视频| 亚洲国产综合在线| 久久99精品久久久久久国产越南 | 欧美喷水一区二区| 欧美成人aa大片| 国产精品美女久久久久久2018| 亚洲精品视频在线看| 日韩高清欧美激情| 国产传媒日韩欧美成人| 色婷婷狠狠综合| 日韩一区二区精品| 欧美激情一区二区三区不卡| 一区二区三区在线高清| 美女视频一区二区三区| 成人美女视频在线看| 欧美日韩精品一区二区三区蜜桃| 日韩精品一区二区在线观看| 国产精品私人自拍| 日韩黄色片在线观看| 国产91精品一区二区麻豆亚洲|