jni_result jni_participantFree( jni_participant p) { jni_result r; jni_partition partition; r = JNI_RESULT_OK; if(p != NULL){ if((p->publishers != NULL) && (c_iterLength(p->publishers) != 0)){ r = JNI_RESULT_PRECONDITION_NOT_MET; } else if((p->subscribers != NULL) && (c_iterLength(p->subscribers) != 0)){ r = JNI_RESULT_PRECONDITION_NOT_MET; } else if((p->topics != NULL) && (c_iterLength(p->topics) != 0)){ r = JNI_RESULT_PRECONDITION_NOT_MET; } else if((p->partitions != NULL) && (c_iterLength(p->partitions) != 0)){ partition = jni_partition(c_iterTakeFirst(p->partitions)); while((partition != NULL) && (r == JNI_RESULT_OK)){ r = jni_partitionFree(partition); partition = jni_partition(c_iterTakeFirst(p->partitions)); } } else{ /*DO NOTHING.*/ } if(r == JNI_RESULT_OK){ if(p->publishers != NULL){ c_iterFree(p->publishers); } if(p->subscribers != NULL){ c_iterFree(p->subscribers); } if(p->topics != NULL){ c_iterFree(p->topics); } if(p->partitions != NULL){ c_iterFree(p->partitions); } if(p->uparticipant != NULL){ r = jni_convertResult(u_participantFree(p->uparticipant)); } else{ r = JNI_RESULT_OK; } os_free(p); } } else{ r = JNI_RESULT_BAD_PARAMETER; } return r; }
jni_result jni_participantAddPartition( jni_participant p, const c_char* partitionName) { jni_result r; c_iter partCopy; jni_partition partition, partNew; int found; r = JNI_RESULT_OK; if((p == NULL) || (partitionName == NULL)){ r = JNI_RESULT_BAD_PARAMETER; } else if((strcmp(partitionName, "*") == 0) || (strcmp(partitionName, "") == 0)){ /*DO NOTHING*/ } else{ /*Check if the partitionName already exists.*/ partCopy = c_iterCopy(p->partitions); partition = jni_partition(c_iterTakeFirst(partCopy)); found = 0; while((partition != NULL) && (!found)){ if(strcmp(partition->name, partitionName) == 0){ found = 1; } partition = jni_partition(c_iterTakeFirst(partCopy)); } c_iterFree(partCopy); if(!found){ partNew = jni_partitionNew(p, partitionName, NULL); if(partNew == NULL){ r = JNI_RESULT_ERROR; } else{ p->partitions = c_iterInsert(p->partitions, partNew); } } } return r; }
jni_partition jni_partitionNew( jni_participant p, const c_char* name, v_partitionQos qos) { jni_partition _this; u_partition upartition; _this = NULL; if((p != NULL) && (p->uparticipant != NULL) && (name != NULL)){ upartition = u_partitionNew(p->uparticipant, name, qos); if(upartition != NULL){ _this = jni_partition(os_malloc((size_t)(C_SIZEOF(jni_partition)))); _this->name = name; _this->upartition = upartition; } } return _this; }
jni_result jni_deleteParticipantEntities( jni_participant p) { jni_result r; c_iter pubCopy, subCopy, topCopy, partCopy; jni_publisher pub; jni_subscriber sub; jni_topic top; jni_partition partition; int proceed; assert(p != NULL); proceed = 1; r = JNI_RESULT_OK; if(p->publishers != NULL){ pubCopy = c_iterCopy(p->publishers); pub = jni_publisher(c_iterTakeFirst(pubCopy)); while( (pub != NULL) && proceed){ r = jni_deletePublisherEntities(pub); if(r != JNI_RESULT_OK){ c_iterFree(pubCopy); proceed = 0; } if(proceed){ r = jni_deletePublisher(p, pub); if(r != JNI_RESULT_OK){ c_iterFree(pubCopy); proceed = 0; } } pub = jni_publisher(c_iterTakeFirst(pubCopy)); } if(proceed){ c_iterFree(pubCopy); c_iterFree(p->publishers); p->publishers = c_iterNew(NULL); } } if((p->subscribers != NULL) && proceed){ subCopy = c_iterCopy(p->subscribers); sub = jni_subscriber(c_iterTakeFirst(subCopy)); while((sub != NULL) && proceed){ r = jni_deleteSubscriberEntities(sub); if(r != JNI_RESULT_OK){ c_iterFree(subCopy); proceed = 0; } if(proceed){ r = jni_deleteSubscriber(p, sub); if(r != JNI_RESULT_OK){ c_iterFree(subCopy); proceed = 0; } } sub = jni_subscriber(c_iterTakeFirst(subCopy)); } if(proceed){ c_iterFree(subCopy); c_iterFree(p->subscribers); p->subscribers = c_iterNew(NULL); } } if((p->topics != NULL) && proceed){ topCopy = c_iterCopy(p->topics); top = jni_topic(c_iterTakeFirst(topCopy)); while((top != NULL) && proceed){ r = jni_deleteTopic(p, top); if(r != JNI_RESULT_OK){ c_iterFree(topCopy); proceed = 0; } top = jni_topic(c_iterTakeFirst(topCopy)); } if(proceed){ c_iterFree(topCopy); c_iterFree(p->topics); p->topics = c_iterNew(NULL); } } if((p->partitions != NULL) && proceed){ partCopy = c_iterCopy(p->partitions); partition = jni_partition(c_iterTakeFirst(partCopy)); while((partition != NULL) && proceed){ r = jni_partitionFree(partition); if(r != JNI_RESULT_OK){ c_iterFree(partCopy); proceed = 0; } partition = jni_partition(c_iterTakeFirst(partCopy)); } if(proceed){ c_iterFree(partCopy); c_iterFree(p->partitions); p->partitions = c_iterNew(NULL); } } return r; }