// this callback handler is called every time a buffer finishes playing void bqPlayerCallback(SLAndroidSimpleBufferQueueItf bq, void *context) { assert(bq == bqPlayerBufferQueue); assert(NULL == context); int playpos = pop_index(); //printf("bqPlayerCallback %d,%d",playpos,soundoffset[playpos]); soundoffset[playpos] = 0; }
int _pSLassoc_aget (SLtype type, unsigned int num_indices) { unsigned long hash; SLang_MMT_Type *mmt; SLstr_Type *str; _pSLAssoc_Array_Element_Type *e; SLang_Assoc_Array_Type *a; SLang_Object_Type *obj; int ret; (void) type; if (-1 == pop_index (num_indices, &mmt, &a, &str, &hash)) return -1; e = find_element (a, str, hash); if (e == NULL) { if (a->flags & HAS_DEFAULT_VALUE) obj = &a->default_value; else { ret = -1; _pSLang_verror (SL_INTRINSIC_ERROR, "No such element in Assoc Array: %s", str); goto free_and_return; } } else obj = &e->value; #if SLANG_OPTIMIZE_FOR_SPEED if (a->is_scalar_type) ret = SLang_push (obj); else #endif ret = _pSLpush_slang_obj (obj); free_and_return: _pSLang_free_slstring (str); SLang_free_mmt (mmt); return ret; }
int _pSLassoc_aput (SLtype type, unsigned int num_indices) { SLang_MMT_Type *mmt; SLstr_Type *str; SLang_Assoc_Array_Type *a; int ret; unsigned long hash; (void) type; if (-1 == pop_index (num_indices, &mmt, &a, &str, &hash)) return -1; if (NULL == assoc_aput (a, NULL, str, hash)) ret = -1; else ret = 0; _pSLang_free_slstring (str); SLang_free_mmt (mmt); return ret; }
int _pSLassoc_inc_value (unsigned int num_indices, int inc) { unsigned long hash; SLang_MMT_Type *mmt; SLstr_Type *str; _pSLAssoc_Array_Element_Type *e; SLang_Assoc_Array_Type *a; SLang_Object_Type *objp; SLang_Object_Type inc_obj; int ret; if (-1 == pop_index (num_indices, &mmt, &a, &str, &hash)) return -1; e = find_element (a, str, hash); ret = -1; if (e == NULL) { if (a->flags & HAS_DEFAULT_VALUE) { if (-1 == _pSLpush_slang_obj (&a->default_value)) goto free_and_return; } else { _pSLang_verror (SL_INTRINSIC_ERROR, "No such element in Assoc Array: %s", str); goto free_and_return; } if (NULL == (e = assoc_aput (a, e, str, hash))) goto free_and_return; } objp = &e->value; if (objp->o_data_type == SLANG_INT_TYPE) { ret = 0; objp->v.int_val += inc; goto free_and_return; } inc_obj.o_data_type = SLANG_INT_TYPE; inc_obj.v.int_val = inc; if ((-1 == _pSLang_do_binary_ab (SLANG_PLUS, objp, &inc_obj)) || (NULL == assoc_aput (a, e, str, hash))) goto free_and_return; ret = 0; /* drop */ free_and_return: _pSLang_free_slstring (str); SLang_free_mmt (mmt); return ret; }