srv_ies_job_handle srv_ies_job_create(srv_ies_app_session_handle hApp, module_type modID, SRV_IES_JOB_TYPE_ENUM jobType, void *pOwner, void *pInput, CTIterator *pItr, void *pOutput, kal_uint32 maxStep, srv_ies_async_callback_func_ptr callback, void *pData) { /*----------------------------------------------------------------*/ /* Local Variables */ /*----------------------------------------------------------------*/ srv_ies_job *pJob; /*----------------------------------------------------------------*/ /* Code Body */ /*----------------------------------------------------------------*/ kal_take_mutex(g_srv_ies_hdl_mutex); TYPED_ALLOC(pJob, srv_ies_job); g_srv_ies_curr_job[pJob->jobID] = pJob; kal_give_mutex(g_srv_ies_hdl_mutex); ASSERT(NULL != pJob); switch(jobType) { case SRV_IES_JOB_TYPE_RENDER_PREVIEW: case SRV_IES_JOB_TYPE_RENDER_BUFFER: case SRV_IES_JOB_TYPE_CREATE_META: pJob->pOutput = pOutput; break; case SRV_IES_JOB_TYPE_RENDER_FILE: ASSERT(NULL != pInput); mmi_wcsncpy(pJob->filePath, pOutput, SRV_FMGR_PATH_MAX_LEN); break; default: ASSERT(0); return NULL; } LIST_INIT((srv_ies_list_head_struct*)pJob); ((srv_ies_job_control*)pOwner)->pCurrJob = pJob; pJob->pParent = hApp; pJob->state = SRV_IES_JOB_STATE_CREATED; pJob->modID = kal_get_active_module_id(); pJob->jobType = jobType; pJob->seqNum = srv_ies_job_request_seq_num(); pJob->pOwner = pOwner; pJob->pItr = pItr; pJob->pInput = pInput; pJob->maxStep = maxStep; pJob->callback = callback; pJob->pData = pData; return pJob; }
/* * Insert a new key in a binary search tree. If key is a duplicate, * there is no insertion. * Pre: rootp points to the root node of a binary search tree * Post: Tree returned includes new key and retains binary * search tree properties. */ tree_node_t * tree_insert(tree_node_t *rootp, /* input/output - root node of binary search tree */ int new_key) /* input - key to insert */ { if (rootp == NULL) { /* Simple Case 1 - Empty tree */ rootp = TYPED_ALLOC(tree_node_t); rootp->key = new_key; rootp->leftp = NULL; rootp->rightp = NULL; } else if (new_key == rootp->key) { /* Simple Case 2 */ /* duplicate key - no insertion */ } else if (new_key < rootp->key) { /* Insert in */ rootp->leftp = tree_insert /* left subtree */ (rootp->leftp, new_key); } else { /* Insert in right subtree */ rootp->rightp = tree_insert(rootp->rightp, new_key); } return (rootp); }