/* * CanTxQueue::Entry */ void CanTxQueue::Entry::destroy(Entry*& obj, IPoolAllocator& allocator) { if (obj != NULL) { obj->~Entry(); allocator.deallocate(obj); obj = NULL; } }
static void destroy(Chunk*& obj, IPoolAllocator& allocator) { if (obj != NULL) { obj->~Chunk(); allocator.deallocate(obj); obj = NULL; } }
static void destroy(KVGroup*& obj, IPoolAllocator& allocator) { if (obj != NULL) { obj->~KVGroup(); allocator.deallocate(obj); obj = NULL; } }
void TransferBufferManagerEntry::Block::destroy(Block*& obj, IPoolAllocator& allocator) { if (obj != UAVCAN_NULLPTR) { obj->~Block(); allocator.deallocate(obj); obj = UAVCAN_NULLPTR; } }
void DynamicTransferBufferManagerEntry::destroy(DynamicTransferBufferManagerEntry*& obj, IPoolAllocator& allocator) { if (obj != NULL) { obj->~DynamicTransferBufferManagerEntry(); allocator.deallocate(obj); obj = NULL; } }
CanIOManager::CanIOManager(ICanDriver& driver, IPoolAllocator& allocator, ISystemClock& sysclock, std::size_t mem_blocks_per_iface) : driver_(driver) , sysclock_(sysclock) , num_ifaces_(driver.getNumIfaces()) { if (num_ifaces_ < 1 || num_ifaces_ > MaxCanIfaces) { handleFatalError("Num ifaces"); } if (mem_blocks_per_iface == 0) { mem_blocks_per_iface = allocator.getNumBlocks() / (num_ifaces_ + 1U) + 1U; } UAVCAN_TRACE("CanIOManager", "Memory blocks per iface: %u, total: %u", unsigned(mem_blocks_per_iface), unsigned(allocator.getNumBlocks())); for (int i = 0; i < num_ifaces_; i++) { tx_queues_[i].construct<IPoolAllocator&, ISystemClock&, std::size_t> (allocator, sysclock, mem_blocks_per_iface); } }