示例#1
0
static void PlayerNextSignature(struct PEventQueue *peq,int doit){
  R_ASSERT_RETURN_IF_FALSE(g_signature != NULL);

  //printf("Player Next signature\n");
  
  g_signature_value = g_signature->signature;

  g_signature = NextSignature(g_signature);

  InsertNextSignature_PEQ(peq);
}
示例#2
0
static int64_t RT_scheduled_Signature(struct SeqTrack *seqtrack, int64_t time, union SuperType *args){

  const struct SeqBlock *seqblock = args[0].const_pointer;

  Signature_Iterator *iterator = &seqtrack->signature_iterator;

  const struct Signatures *signature = iterator->next_signature;
  
  iterator->signature_value = signature->signature;
  iterator->next_signature  = NextSignature(signature);

  //printf("   SIG %d/%d\n",iterator->signature_value.numerator, iterator->signature_value.denominator);
  
  // Schedule next signature
  if (iterator->next_signature != NULL)
    return get_seqblock_place_time(seqblock, iterator->next_signature->l.p);
  else
    return DONT_RESCHEDULE;
}
示例#3
0
void RT_schedule_Signature_newblock(struct SeqTrack *seqtrack,
                                    const struct SeqBlock *seqblock,
                                    const Place start_place)
{

  Signature_Iterator *iterator = &seqtrack->signature_iterator;
  memset(iterator, 0, sizeof(Signature_Iterator));
  iterator->signature_value = root->signature;
  //printf("   SIG Init %d/%d\n",iterator->signature_value.numerator, iterator->signature_value.denominator);
  
  const struct Blocks *block = seqblock->block;
    
  const struct Signatures *next_signature = block->signatures;

  if(next_signature==NULL)
    return;

  // spool forward to the 'signature' that is used by 'start_place'
  //
  while(PlaceGreaterThan(&start_place, &next_signature->l.p)){
    iterator->signature_value = next_signature->signature;
    //printf("   SIG Init %d/%d\n",iterator->signature_value.numerator, iterator->signature_value.denominator);
    next_signature = NextSignature(next_signature);
    if (next_signature==NULL)
      return;
  }

  iterator->next_signature = next_signature;
  
  {
    int num_args = 1;
    union SuperType args[num_args];
    args[0].const_pointer = seqblock;
    
    int64_t time = get_seqblock_place_time(seqblock, next_signature->l.p);
    
    SCHEDULER_add_event(seqtrack, time, RT_scheduled_Signature, &args[0], num_args, SCHEDULER_SIGNATURE_PRIORITY);
  }
}