focl_mem_off_t OCLFPGADevice::alloc()

in src/oclfpga/oclfpga_device.cc [157:175]


focl_mem_off_t OCLFPGADevice::alloc(size_t size) {
  auto iter = _mem_chunks.begin();
  size_t aligned_size = ((size + _alignment - 1) / _alignment) * _alignment;

  while (iter != _mem_chunks.end() && (iter->occupied || (iter->size < aligned_size))) {
    iter++;
  }

  if (iter == _mem_chunks.end()) return FOCL_MEM_OFF_ERR;

  iter->occupied = true;
  if (iter->size != aligned_size) {
    mem_chunk_t rem = {iter->offset + aligned_size, iter->size - aligned_size, false};
    iter->size = aligned_size;
    _mem_chunks.insert(std::next(iter), rem);
  }

  return iter->offset;
}