/// Process timed events.
/// crnTime - The current time in Unix seconds.
/// Return - Whether we did anything with it. (T/F)
bool ParlourBBGame::ProcessChrono(time_t crnTime)
{
    std::ostringstream sout; /// Yay for stream!
    bool retVal = false; /// Our return value (assume false)

    /// Iterate through our timed events.
    for (QVector<ChronoEvent>::iterator timeiter = chrono.begin(); timeiter != chrono.end();
            timeiter++)
    {
        /// If we found an event due to be fired...
        if (timeiter->crnEnd <= crnTime)
        {
            /// Create a fake PRIVMSG event we probably won't need, but which DoCommand
            /// expects to get.
            sout << owner << " PRIVMSG " << channel << " :CHRONOEVENT " << timeiter->crnEnd << " "
                 << timeiter->crnCmd << " " << timeiter->crnID;

            /// Create a QueueData based on that PRIVMSG.
            QueueData fakeData(sout.str().c_str());
            /// Perform the command. The second parameter is 11 as the command token is
            /// CHRONOEVENT, 11 letters long.
            DoCommand(fakeData, 11, timeiter->crnCmd, timeiter->crnID);
            /// Destroy the used event.
            timeiter = chrono.erase(timeiter);
            /// We'll be returning true.
            retVal = true;
            /// Since we're inside a for loop, let's make sure we don't overstep the iterator's
            /// boundaries; if we're at the end, break out now.
            if (timeiter == chrono.end()) break;
        }
    }

    return retVal; /// Return our return value.
}
Exemplo n.º 2
0
double seissol::miniSeisSol(initializers::MemoryManager& memoryManager) {
  struct GlobalData* globalData = memoryManager.getGlobalData();

  initializers::LTSTree ltsTree;
  initializers::LTS     lts;
  
  lts.addTo(ltsTree);
  ltsTree.setNumberOfTimeClusters(1);
  ltsTree.fixate();
  
  initializers::TimeCluster& cluster = ltsTree.child(0);
  cluster.child<Ghost>().setNumberOfCells(0);
  cluster.child<Copy>().setNumberOfCells(0);
  cluster.child<Interior>().setNumberOfCells(50000);

  ltsTree.allocateVariables();
  ltsTree.touchVariables();
  
  initializers::Layer& layer = cluster.child<Interior>();
  
  layer.setBucketSize(lts.buffersDerivatives, sizeof(real) * tensor::I::size() * layer.getNumberOfCells());
  ltsTree.allocateBuckets();
  
  fakeData(lts, layer);
  
  localIntegration(globalData, lts, layer);
  
  Stopwatch stopwatch;
  stopwatch.start();
  for (unsigned t = 0; t < 10; ++t) {
    localIntegration(globalData, lts, layer);
  }
  return stopwatch.stop();
}