d_storeResult d_storeMMFKernelAddGroupInfo( d_storeMMFKernel _this, const d_group group) { d_partition partition; d_topic topic; d_topicInfo topicInfo; d_groupInfo groupInfo; v_group vgroup; d_storeResult result; partition = d_groupGetPartition(group); topic = d_groupGetTopic(group); topicInfo = d_storeMMFKernelGetTopicInfo(_this, topic); if(!topicInfo){ vgroup = d_groupGetKernelGroup(group); topicInfo = d_topicInfoNew(_this, vgroup->topic); if(topicInfo){ c_tableInsert(_this->topics, topicInfo); } } if(topicInfo){ groupInfo = d_groupInfoNew(_this, topicInfo, group); if(groupInfo){ c_tableInsert(_this->groups, groupInfo); c_free(groupInfo); result = D_STORE_RESULT_OK; } else { result = D_STORE_RESULT_ERROR; } c_free(topicInfo); } else { result = D_STORE_RESULT_OUT_OF_RESOURCES; } os_free(partition); os_free(topic); return result; }
d_storeResult d_groupInfoDataInject( d_groupInfo _this, const d_store store, d_group group) { d_storeResult result; struct d_instanceInjectArg inject; c_type mmfMessageType; c_char* typeName; if(_this && group){ inject.vgroup = d_groupGetKernelGroup(group); mmfMessageType = d_topicInfoGetMessageType(_this->topic); typeName = c_metaScopedName(c_metaObject(mmfMessageType)); inject.messageType = c_type(c_metaResolveType( c_metaObject(c_getBase(inject.vgroup)), typeName)); if(inject.messageType){ inject.result = D_STORE_RESULT_OK; c_tableWalk(_this->instances, d_instanceInject, &inject); c_free(inject.messageType); result = inject.result; } else { result = D_STORE_RESULT_PRECONDITION_NOT_MET; } c_free(inject.vgroup); c_free(mmfMessageType); os_free(typeName); } else { result = D_STORE_RESULT_ILL_PARAM; } return result; }