Go to the documentation of this file.
19 return -ErrInvalidParam;
39 return -ErrInvalidParam;
45 if ((offset + len) >
size_)
50 (void)
copy(data, data + len,
data_ + offset);
71 return std::string(buf);
78 TransferBufferManagerEntry::Block*
86 return new (praw)
Block;
100 unsigned& total_offset,
unsigned& left_to_read)
103 for (
unsigned i = 0; (i <
Block::Size) && (left_to_read > 0); i++, total_offset++)
105 if (total_offset >= target_offset)
114 unsigned& total_offset,
unsigned& left_to_write)
117 for (
unsigned i = 0; (i <
Block::Size) && (left_to_write > 0); i++, total_offset++)
119 if (total_offset >= target_offset)
156 return -ErrInvalidParam;
169 unsigned total_offset = 0;
170 unsigned left_to_read = len;
175 p->
read(outptr, offset, total_offset, left_to_read);
176 if (left_to_read == 0)
192 return -ErrInvalidParam;
205 unsigned total_offset = 0;
206 unsigned left_to_write = len;
214 last_written_block = p;
215 p->
write(inptr, offset, total_offset, left_to_write);
216 if (left_to_write == 0)
224 while (left_to_write > 0)
246 last_written_block = new_block;
249 new_block->
write(inptr, offset, total_offset, left_to_write);
253 const unsigned actually_written = len - left_to_write;
255 return int(actually_written);
296 buffers_.remove(dyn);
309 return findFirst(key);
327 buffers_.insert(tbme);
329 UAVCAN_TRACE(
"TransferBufferManager",
"Buffer created [num=%u], %s", getNumBuffers(), key.toString().c_str());
346 UAVCAN_TRACE(
"TransferBufferManager",
"Buffer deleted, %s", key.toString().c_str());
347 buffers_.remove(dyn);
354 return getNumBuffers() == 0;
359 return buffers_.getLength();
IPoolAllocator & allocator_
static Block * instantiate(IPoolAllocator &allocator)
static TransferBufferManagerEntry * instantiate(IPoolAllocator &allocator, uint16_t max_size)
static void destroy(Block *&obj, IPoolAllocator &allocator)
virtual void * allocate(std::size_t size)=0
#define UAVCAN_TRACE(...)
ITransferBuffer * create(const TransferBufferManagerKey &key)
static void destroy(TransferBufferManagerEntry *&obj, IPoolAllocator &allocator)
TransferBufferManagerEntry * findFirst(const TransferBufferManagerKey &key)
void remove(const TransferBufferManagerKey &key)
virtual int write(unsigned offset, const uint8_t *data, unsigned len)
void read(uint8_t *&outptr, unsigned target_offset, unsigned &total_offset, unsigned &left_to_read)
virtual void deallocate(const void *ptr)=0
int snprintf(char *out, std::size_t maxlen, const char *format,...)
const TransferBufferManagerKey & getKey() const
const UAVCAN_EXPORT T & max(const T &a, const T &b)
virtual ~TransferBufferManagerEntry()
virtual int read(unsigned offset, uint8_t *data, unsigned len) const
static std::string toString(long x)
TransferBufferManagerEntry(IPoolAllocator &allocator, uint16_t max_size)
void setNextListNode(T *node)
unsigned getNumBuffers() const
LinkedListRoot< Block > blocks_
void write(const uint8_t *&inptr, unsigned target_offset, unsigned &total_offset, unsigned &left_to_write)
UAVCAN_EXPORT void fill(ForwardIt first, ForwardIt last, const T &value)
T * getNextListNode() const
void reset(const TransferBufferManagerKey &key=TransferBufferManagerKey())
UAVCAN_EXPORT OutputIt copy(InputIt first, InputIt last, OutputIt result)
virtual int write(unsigned offset, const uint8_t *data, unsigned len)
ITransferBuffer * access(const TransferBufferManagerKey &key)
TransferBufferManagerKey key_
virtual int read(unsigned offset, uint8_t *data, unsigned len) const