Example #1
0
void SoundPool::play(size_t index, float volume) {
    // TODO: sounds_.end() could be invalidated?

    auto sound_it = buffers_[index].second;
    for (size_t i = 0; 
            sound_it == sounds_.end() && i < sounds_.size(); 
            ++i) {
        auto it = sounds_.begin();
        ALenum state;
        alGetSourcei(*it, AL_SOURCE_STATE, &state);

        if (state != AL_PLAYING) {
            sound_it = it;
            buffers_[index].second = sound_it;
            alSourcei(*sound_it, AL_BUFFER, buffers_[index].first);

            break;
        }
        move_to_end(it);
    }

    if (sound_it != sounds_.end()) {
        alSourcef(*sound_it, AL_GAIN, volume/100.0f);
        alSourcePlay(*sound_it);
        move_to_end(sound_it);
    }
}
TreeIt::TreeIt(const MlSlotList& parent_) 
  : parent(parent_),
    l1_cur {{0}}, l2_cur{{0}}, last_cur{0} {
  // not accurate but highly likely
  for(int i=0; i<100 && buffer.empty(); ++i)
    fill_buffer();
  if (buffer.empty())
    move_to_end();
}
TreeIt& TreeIt::operator++() {
  if(buffer.size() > 1)
    buffer.pop_back();
  else {
    buffer.clear();
    while(buffer.empty() && l1_cur[0] < l1_size)
      fill_buffer();
    if(buffer.empty())
      move_to_end();
  }
  return *this;
}
os_status osHwiMultiplexedDelete(os_hwi_handle     hwi_num,
                      os_hwi_function   handler,
                      os_hwi_arg        argument)
{

    os_status status = OS_SUCCESS;
    multiplexed_hwi_t *this_int = NULL, *iterator, *head;
 
#ifdef HWI_ERROR_CHECKING
 
    // Can't remove during active hwi - risk of corrupting active list
    if (g_os_flags & OS_FLG_HWI_ACTIVE)
    {
#ifdef HWI_ERROR_ASSERT
        OS_ASSERT;
#endif /* HWI_ERROR_ASSERT */
        RETURN_ERROR(OS_FAIL);
    }
    if (hwi_num > OS_INT_LAST)
    {
#ifdef HWI_ERROR_ASSERT
        OS_ASSERT;
#endif /* HWI_ERROR_ASSERT */
        RETURN_ERROR(OS_ERR_HWI_INVALID);
    }
 
    if (interrupt_pointer[hwi_num] != osHwiMultiplexedHandler)
    {
#ifdef HWI_ERROR_ASSERT
        OS_ASSERT;
#endif /* HWI_ERROR_ASSERT */
        RETURN_ERROR(OS_ERR_HWI_COMMAND_INVALID);
    }
#endif // HWI_ERROR_CHECKING
 
    osHwiSwiftDisable();
    head = (multiplexed_hwi_t *)interrupt_argument[hwi_num];
 
    for (iterator = head ; iterator != NULL ; iterator = iterator->next)
    {
        if ((iterator->argument == argument) && (iterator->handler == handler))
        {
#ifdef HWI_ERROR_CHECKING
            if (iterator->valid != TRUE)
            {
#ifdef HWI_ERROR_ASSERT
                OS_ASSERT;
#endif /* HWI_ERROR_ASSERT */
                status = OS_ERR_ALREADY_FREE;
                REPORT_ERROR(status);
                goto exit_func;
            }
#endif // HWI_ERROR_CHECKING
            this_int = iterator;
            this_int->valid = FALSE;
 
            /* Put this_int at the end of the list. Ensures requirement
             * in osHwiMultiplexedHandler() */
 
            // If first in list
            if (this_int == head)
            {
                // If not single entry in list
                if (this_int->next != NULL)
                {
                    interrupt_argument[hwi_num] = (os_hwi_arg)(this_int->next);
                    move_to_end(iterator, this_int);
                }
                else
                {
                    setInterruptEnable(hwi_num, FALSE);
                }
            }
            // If not already last in list
            if (this_int->next != NULL)
            {
                iterator = head;
                while (iterator->next != this_int)
                {
                    iterator = iterator->next;
                }
                iterator->next = this_int->next;
                move_to_end(iterator, this_int);
            }
            break;
 
        }
    }
 
 
exit_func:
    osHwiSwiftEnable();
    return status;
 
}