⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 object.m

📁 早期freebsd实现
💻 M
字号:
/* This file contains the implementation of class Object.   Copyright (C) 1992 Free Software Foundation, Inc.This file is part of GNU CC.GNU CC is free software; you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe Free Software Foundation; either version 2, or (at your option)any later version.GNU CC is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with GNU CC; see the file COPYING.  If not, write tothe Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */ #include "tconfig.h"#include "gstdarg.h"#include "object.h"#include "objc-proto.h"#include <errno.h>#ifndef errnoextern int errno;#endif#define CLASS(class)  ((Class_t)class)@implementation Object+ new{  return class_createInstance (CLASS (self));}+ free {  return nil; }- free {  return object_dispose (self); }- copy {  return [self shallowCopy]; }- shallowCopy{  return object_copy (self);}- deepCopy{  return class_createInstance ([self class]);}+ (Class_t)class      { return CLASS (self); }+ (Class_t)superClass { return CLASS (self)->super_class; }- (Class_t)class      { return isa; }- (Class_t)superClass { return isa->super_class; }- (const char *)name  { return object_getClassName (self); }- self                { return self; }- (unsigned int)hash{  return (unsigned int)self; /* gak!  Not portable. */}- (BOOL)isEqual:anObject{  return self == anObject ;}- (BOOL)isKindOf:(Class_t)aClassObject{  Class_t class;  for (class = isa; class; class = class->super_class)    if (class == aClassObject)      return YES;  return NO;}- (BOOL)isMemberOf:(Class_t)aClassObject{  return isa == aClassObject ;}- (BOOL)isKindOfGivenName:(const char*)aClassName{  Class_t   class;  for (class = isa; class; class = class->super_class)    if (!strcmp (class_getClassName (class), aClassName))      return YES;  return NO;}- (BOOL)isMemberOfGivenName:(const char*)aClassName{  return !strcmp ([self name], aClassName);}+ (BOOL)instancesRespondTo:(SEL)aSel{  if (class_getInstanceMethod (CLASS (self), aSel))    return YES;    return NO;}- (BOOL)respondsTo:(SEL)aSel{  if (class_getInstanceMethod (isa, aSel))    return YES;  return NO;}- perform:(SEL)aSel{  return (*((IMP)objc_msgSend (self, aSel)))(self, aSel);}- perform:(SEL)aSel with:aObject{  return (*((IMP)objc_msgSend (self, aSel)))(self, aSel, aObject);}+ poseAs:(Class_t)aClassObject{  return class_poseAs (self, aClassObject);} - subclassResponsibility:(SEL)aSel{  return [self error:"subclass should override %s", aSel];}- notImplemented:(SEL)aSel{  return [self error:"method %s not implemented", aSel];}- doesNotRecognize:(SEL)aSel{  return [self error:"%s does not recognize %s", [self name], aSel];}- error:(const char*)aString, ...{#define FMT "error: %s (instance)\n%s\n"  char  fmt[strlen (FMT)	    + strlen (isa->name)	    + strlen (aString) + 8];  va_list ap;    sprintf (fmt, FMT, isa->name, aString);  va_start (ap, aString);  (*_error)(self, fmt, ap);  va_end (ap);#undef FMT  return self;}+ error:(const char*)aString, ...{#define FMT "error: %s (class)\n%s\n"  char  fmt[strlen (FMT)	    + strlen (isa->name)	    + strlen (aString) + 8];  va_list ap;  sprintf (fmt, FMT, isa->name, aString);  va_start (ap, aString);  (*_error)(self, fmt, ap);  va_end (ap);#undef FMT  return self;}- storeOn:(int)aFd{  int   len;  long  version = [[self class] version];    if ((len = write (aFd, "#", strlen ("#"))) != -1)    if ((len = write (aFd, [self name], strlen ([self name]) + 1)) != -1)      len = write (aFd, &version, sizeof (version));    if (len == -1)    [self error:"error passivating object, errno=%d", errno];  return self;}+ readFrom:(int)aFd{  id    aObj = nil;  char  objName[256];  int   len;      if ((len = read (aFd, &objName, strlen ("#"))) != -1)    if (objName[0] == '#') {      long  version;      int   i = 0;            /* Read the object's class. */      do {        len = read (aFd, &objName[i], sizeof (char));      } while (objName[i++] && (len != -1));          /* Get its version. */      if (len != -1)        len = read (aFd, &version, sizeof (version));            /* No errors???	 Then create a object. */      if (len != -1) {	aObj = class_createInstance (objc_getClass (objName));          	/* If the object was 	   successfully created then	   tell it to dearchive	   itself. */	if (aObj)	  [aObj readFrom:aFd];      }    }      if (len == -1)    [self error:"error activating object, errno=%d", errno];    return aObj;}- readFrom:(int)aFd { return self; }+ (int)version{  return class_getVersion (CLASS (self));}+ setVersion:(int)aVersion{  class_setVersion (CLASS (self), aVersion);    return self;}@end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -