Annotation of objc/objc-class.h, revision 1.1

1.1     ! root        1: /*
        !             2:  * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
        !             3:  *
        !             4:  * @APPLE_LICENSE_HEADER_START@
        !             5:  * 
        !             6:  * "Portions Copyright (c) 1999 Apple Computer, Inc.  All Rights
        !             7:  * Reserved.  This file contains Original Code and/or Modifications of
        !             8:  * Original Code as defined in and that are subject to the Apple Public
        !             9:  * Source License Version 1.0 (the 'License').  You may not use this file
        !            10:  * except in compliance with the License.  Please obtain a copy of the
        !            11:  * License at http://www.apple.com/publicsource and read it before using
        !            12:  * this file.
        !            13:  * 
        !            14:  * The Original Code and all software distributed under the License are
        !            15:  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
        !            16:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
        !            17:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
        !            18:  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
        !            19:  * License for the specific language governing rights and limitations
        !            20:  * under the License."
        !            21:  * 
        !            22:  * @APPLE_LICENSE_HEADER_END@
        !            23:  */
        !            24: /*
        !            25:  *     objc-class.h
        !            26:  *     Copyright 1988, NeXT, Inc.
        !            27:  */
        !            28: 
        !            29: #ifndef _OBJC_CLASS_H_
        !            30: #define _OBJC_CLASS_H_
        !            31: 
        !            32: #import "objc.h"
        !            33: #import <objc/zone.h>
        !            34: /* 
        !            35:  *     Class Template
        !            36:  */
        !            37: struct objc_class {                    
        !            38:        struct objc_class *isa; 
        !            39:        struct objc_class *super_class; 
        !            40:        const char *name;               
        !            41:        long version;
        !            42:        long info;
        !            43:        long instance_size;
        !            44:        struct objc_ivar_list *ivars;
        !            45:        struct objc_method_list *methods;
        !            46:        struct objc_cache *cache;
        !            47:        struct objc_protocol_list *protocols;
        !            48: };
        !            49: #define CLS_GETINFO(cls,infomask)      ((cls)->info & infomask)
        !            50: #define CLS_SETINFO(cls,infomask)      ((cls)->info |= infomask)
        !            51: 
        !            52: #define CLS_CLASS              0x1L
        !            53: #define CLS_META               0x2L
        !            54: #define CLS_INITIALIZED                0x4L
        !            55: #define CLS_POSING             0x8L
        !            56: #define CLS_MAPPED             0x10L
        !            57: #define CLS_FLUSH_CACHE                0x20L
        !            58: #define CLS_GROW_CACHE         0x40L
        !            59: /* 
        !            60:  *     Category Template
        !            61:  */
        !            62: typedef struct objc_category *Category;
        !            63: 
        !            64: struct objc_category {
        !            65:        char *category_name;
        !            66:        char *class_name;
        !            67:        struct objc_method_list *instance_methods;
        !            68:        struct objc_method_list *class_methods;
        !            69:        struct objc_protocol_list *protocols;
        !            70: };
        !            71: /* 
        !            72:  *     Instance Variable Template
        !            73:  */
        !            74: typedef struct objc_ivar *Ivar;
        !            75: 
        !            76: struct objc_ivar_list {
        !            77:        int ivar_count;
        !            78:        struct objc_ivar {
        !            79:                char *ivar_name;
        !            80:                char *ivar_type;
        !            81:                int ivar_offset;
        !            82:        } ivar_list[1];                 /* variable length structure */
        !            83: };
        !            84: /* 
        !            85:  *     Method Template
        !            86:  */
        !            87: typedef struct objc_method *Method;
        !            88: 
        !            89: struct objc_method_list {
        !            90:        struct objc_method_list *method_next;
        !            91:        int method_count;
        !            92:        struct objc_method {
        !            93:                SEL method_name;
        !            94:                char *method_types;
        !            95:                 IMP method_imp;
        !            96:        } method_list[1];               /* variable length structure */
        !            97: };
        !            98: 
        !            99: /* Protocol support */
        !           100: 
        !           101: @class Protocol;
        !           102: 
        !           103: struct objc_protocol_list {
        !           104:        struct objc_protocol_list *next;
        !           105:        int count;
        !           106:        Protocol *list[1];
        !           107: };
        !           108: 
        !           109: /* Definitions of filer types */
        !           110: 
        !           111: #define _C_ID          '@'
        !           112: #define _C_CLASS       '#'
        !           113: #define _C_SEL         ':'
        !           114: #define _C_CHR         'c'
        !           115: #define _C_UCHR                'C'
        !           116: #define _C_SHT         's'
        !           117: #define _C_USHT                'S'
        !           118: #define _C_INT         'i'
        !           119: #define _C_UINT                'I'
        !           120: #define _C_LNG         'l'
        !           121: #define _C_ULNG                'L'
        !           122: #define _C_FLT         'f'
        !           123: #define _C_DBL         'd'
        !           124: #define _C_BFLD                'b'
        !           125: #define _C_VOID                'v'
        !           126: #define _C_UNDEF       '?'
        !           127: #define _C_PTR         '^'
        !           128: #define _C_CHARPTR     '*'
        !           129: #define _C_ARY_B       '['
        !           130: #define _C_ARY_E       ']'
        !           131: #define _C_UNION_B     '('
        !           132: #define _C_UNION_E     ')'
        !           133: #define _C_STRUCT_B    '{'
        !           134: #define _C_STRUCT_E    '}'
        !           135: 
        !           136: /* Structure for method cache - allocated/sized at runtime */
        !           137: 
        !           138: typedef struct objc_cache *Cache;
        !           139: 
        !           140: #ifdef OBJC_COPY_CACHE
        !           141: 
        !           142: #define CACHE_BUCKET_NAME(B)  ((B).method_name)
        !           143: #define CACHE_BUCKET_IMP(B)   ((B).method_imp)
        !           144: #define CACHE_BUCKET_VALID(B) ((B).method_name)
        !           145: struct objc_cache_bucket {
        !           146:   SEL method_name;
        !           147:   IMP method_imp;
        !           148: };
        !           149: 
        !           150: struct objc_cache {
        !           151:        unsigned int mask;            /* total = mask + 1 */
        !           152:        unsigned int occupied;        
        !           153:        struct objc_cache_bucket buckets[1];
        !           154: };
        !           155: 
        !           156: #else
        !           157: 
        !           158: #define CACHE_BUCKET_NAME(B)  ((B)->method_name)
        !           159: #define CACHE_BUCKET_IMP(B)   ((B)->method_imp)
        !           160: #define CACHE_BUCKET_VALID(B) (B)
        !           161: struct objc_cache {
        !           162:        unsigned int mask;            /* total = mask + 1 */
        !           163:        unsigned int occupied;        
        !           164:        Method buckets[1];
        !           165: };
        !           166: #endif
        !           167: 
        !           168: /* operations */
        !           169: 
        !           170: extern id class_createInstance(Class, unsigned idxIvars);
        !           171: extern id class_createInstanceFromZone(Class, unsigned idxIvars, NXZone *zone);
        !           172: 
        !           173: extern void class_setVersion(Class, int);
        !           174: extern int class_getVersion(Class);
        !           175: 
        !           176: extern Ivar class_getInstanceVariable(Class, const char *);
        !           177: extern Method class_getInstanceMethod(Class, SEL);
        !           178: extern Method class_getClassMethod(Class, SEL);
        !           179: 
        !           180: extern void class_addMethods(Class, struct objc_method_list *);
        !           181: extern void class_removeMethods(Class, struct objc_method_list *);
        !           182: 
        !           183: extern Class class_poseAs(Class imposter, Class original);
        !           184: 
        !           185: extern unsigned method_getNumberOfArguments(Method);
        !           186: extern unsigned method_getSizeOfArguments(Method);
        !           187: extern unsigned method_getArgumentInfo(Method m, int arg, const char **type, int *offset);
        !           188: 
        !           189: typedef void *marg_list;
        !           190: 
        !           191: #define marg_getRef(margs, offset, type) \
        !           192:        ( (type *)((char *)margs + offset) )
        !           193: 
        !           194: #define marg_getValue(margs, offset, type) \
        !           195:        ( *marg_getRef(margs, offset, type) )
        !           196: 
        !           197: #define marg_setValue(margs, offset, type, value) \
        !           198:        ( marg_getValue(margs, offset, type) = (value) )
        !           199: 
        !           200: #endif /* _OBJC_CLASS_H_ */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.