1 2 //metadoc Tag copyright Steve Dekorte 2002 3 //metadoc Tag license BSD revised 4 5 #define IOTAG_C 1 6 #include "IoTag.h" 7 #undef IOTAG_C 8 9 #include "IoObject.h" 10 #include "IoState.h" 11 #include <string.h> 12 IoTag_new(void)13IoTag *IoTag_new(void) 14 { 15 IoTag *self = (IoTag *)io_calloc(1, sizeof(IoTag)); 16 #ifdef IOMESSAGE_INLINE_PERFORM 17 self->performFunc = NULL; 18 #else 19 self->performFunc = (IoTagPerformFunc *)IoObject_perform; 20 #endif 21 22 self->referenceCount = 1; 23 //self->recyclableInstances = Stack_new(); 24 //self->maxRecyclableInstances = 10000; 25 return self; 26 } 27 IoTag_newWithName_(const char * name)28IoTag *IoTag_newWithName_(const char *name) 29 { 30 IoTag *self = IoTag_new(); 31 IoTag_name_(self, name); 32 return self; 33 } 34 IoTag_free(IoTag * self)35void IoTag_free(IoTag *self) 36 { 37 //printf("io_free tag %p\n", (void *)self); 38 //printf("%s\n", self->name ? self->name : "NULL"); 39 if (--self->referenceCount > 0) { 40 return; 41 } 42 43 if (self->tagCleanupFunc) 44 { 45 (self->tagCleanupFunc)(self); 46 } 47 48 if (self->name) 49 { 50 io_free(self->name); 51 self->name = NULL; 52 } 53 54 //Stack_free(self->recyclableInstances); 55 io_free(self); 56 } 57 IoTag_reference(IoTag * self)58int IoTag_reference(IoTag *self) 59 { 60 return ++self->referenceCount; 61 } 62 IoTag_name_(IoTag * self,const char * name)63void IoTag_name_(IoTag *self, const char *name) 64 { 65 self->name = strcpy((char *)io_realloc(self->name, strlen(name)+1), name); 66 } 67 IoTag_name(IoTag * self)68const char *IoTag_name(IoTag *self) 69 { 70 return self->name; 71 } 72 IoTag_mark(IoTag * self)73void IoTag_mark(IoTag *self) 74 { 75 /* 76 if (Stack_count(self->recyclableInstances)) 77 { 78 Stack_do_(self->recyclableInstances, (StackDoCallback *)IoObject_shouldMark); 79 } 80 */ 81 } 82 83