Frames CompartmentReportCommon::loadFrames(double start, double end) const
{
    const auto startTime = getStartTime();
    if (start >= getEndTime() || end < startTime || end <= start)
        return Frames();

    const double timestep = getTimestep();
    const size_t startFrame = _getFrameNumber(start);
    end = std::nextafter(end, -INFINITY);
    const size_t count = _getFrameNumber(end) - startFrame + 1;

    Frames frames;

    frames.timeStamps.reset(new std::vector<double>);
    for (size_t i = 0; i < count; ++i)
        frames.timeStamps->push_back(startTime + (i + startFrame) * timestep);

    const auto frameSize = getFrameSize();
    frames.data.reset(new floats(frameSize * count));
    if (frameSize == 0)
        return frames;

    if (!_loadFrames(startFrame, count, frames.data->data()))
        return Frames();

    return frames;
}
Exemple #2
0
int main() {
  Buffer buf;
  Network n1 = {1, 1};
  Network n2 = {1, 2};
  Network n3 = {2, 1};
  buf[n1] = Frames();
  buf[n2] = Frames();
  buf[n3] = Frames();
  std::cout << "Size, Capacity: " << buf[n1].size() << ", " << buf[n1].capacity() << std::endl;
  std::cout << "Size, Capacity: " << buf[n2].size() << ", " << buf[n2].capacity() << std::endl;
  std::cout << "Size, Capacity: " << buf[n3].size() << ", " << buf[n3].capacity() << std::endl;
  for (auto i = 0; i < 500000; ++i) {
    buf[n1].emplace_back(i + 1, i + 0, RawData(20, 'A'));
  } 
  for (auto i = 0; i < 1000000; ++i) {
    buf[n2].emplace_back(i + 3, i + 2, RawData(20, 'B'));
  } 
  for (auto i = 0; i < 1000000; ++i) {
    buf[n3].emplace_back(i + 5, i + 4, RawData(76, 'C'));
  } 
  std::cout << "Size, Capacity: " << buf[n1].size() << ", " << buf[n1].capacity() << std::endl;
  std::cout << "Size, Capacity: " << buf[n2].size() << ", " << buf[n2].capacity() << std::endl;
  std::cout << "Size, Capacity: " << buf[n3].size() << ", " << buf[n3].capacity() << std::endl;

  int size = sizeof(buf);
  int sizem = sizeof(buf);
  for (const auto& n: buf) {
    size += sizeof(n);
    sizem += sizeof(n);
    for (const auto& f: n.second) {
      size += sizeof(f);
      sizem += sizeof(f);
      sizem += f.data.size();
    }
  }
  std::cout << "Total size: " << size << ", " << sizem << std::endl;

  return 0;
}