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)13 IoTag *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)28 IoTag *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)35 void 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)58 int IoTag_reference(IoTag *self)
59 {
60 	return ++self->referenceCount;
61 }
62 
IoTag_name_(IoTag * self,const char * name)63 void 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)68 const char *IoTag_name(IoTag *self)
69 {
70 	return self->name;
71 }
72 
IoTag_mark(IoTag * self)73 void 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