33 POLAR_RUNTIME_OBJECT_CLASS(superclass_polar_thread_message)->init( (
polar_runtime_object *)self );
37 self->count_references = 1;
46 if( objc_atomic_decrement_intptr(&self->count_references) != 0 )
50 return POLAR_RUNTIME_OBJECT_CLASS(superclass_polar_thread_message)->finalize( (
polar_runtime_object *)self );
53POLAR_FUNCTION_INTERNAL
void
56 size_t size_message_total;
58 if( objc_atomic_compare_exchange_intptr(&self->count_references, 0, -1) == NO )
62 if( self->size_message_data > OBJC_SIZEOF_POINTER )
63 size_message_total += self->size_message_data;
65 polar_memory_free(self, size_message_total);
68POLAR_FUNCTION_INTERNAL
void
72 superclass_polar_thread_message = POLAR_RUNTIME_OBJECT_CLASS(self)->class_superclass;
78 (polar_func_runtime_object_lifecycle)_polar_thread_message_finalize;
81 (polar_func_runtime_object_deallocate)_polar_thread_message_deallocate;
86 .name_type =
"polar_thread_message",
89 .type_class_init = (polar_func_runtime_object_class_lifecycle)_polar_thread_message_class_init
94POLAR_FUNCTION_INTERNAL OBJC_FUNCTION_CONSTANT polar_internal_type
95polar_thread_message_get_type(
void )
97 static polar_internal_type pt_polar_thread_message = POLAR_INTERNAL_TYPE_INVALID;
99 if( pt_polar_thread_message != POLAR_INTERNAL_TYPE_INVALID )
100 return pt_polar_thread_message;
102 pt_polar_thread_message = polar_internal_type_init( POLAR_TYPE_LIST_NODE, &class_polar_thread_message,
103 &pti_polar_thread_message );
105 return pt_polar_thread_message;
109polar_thread_message_new( uintptr_t message_subject,
size_t size_message_data,
void *message_data )
112 size_t size_message_total;
114 size_message_total =
sizeof(*result);
115 if( size_message_data > OBJC_SIZEOF_POINTER )
116 size_message_total += size_message_data;
119 result = (
polar_thread_message *)polar_runtime_object_preallocated_init(result, POLAR_TYPE_THREAD_MESSAGE, NO);
121 result->subject_message = message_subject;
122 result->size_message_data = size_message_data;
124 if( size_message_data > OBJC_SIZEOF_POINTER )
126 result->message_data = &result[1];
127 objc_memcpy(result->message_data, message_data, size_message_data);
131 result->message_data = message_data;
137polar_thread_message_preallocated_init(
void *p_message,
size_t size_message, uintptr_t message_subject,
138 size_t size_message_data,
void *message_data )
142 assert( p_message != NULL );
143 assert( size_message >=
sizeof(*result) );
145 result = (
polar_thread_message *)polar_runtime_object_preallocated_init(p_message, POLAR_TYPE_THREAD_MESSAGE, YES);
147 result->subject_message = message_subject;
148 result->count_references = -( MAXINT >> 1 );
149 result->size_message_data = size_message_data;
150 result->message_data = message_data;
Definition polar-internal-type.h:34
Definition polar-runtime-object.h:36
Definition polar-runtime-object.h:31
Definition polar-thread-message.h:36
Definition polar-thread-message.h:25