rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
Public Member Functions | Protected Member Functions | Private Attributes
BufferedWriter< TBufferSize > Class Template Referenceabstract

#include <buffered_writer.h>

Inheritance diagram for BufferedWriter< TBufferSize >:
Inheritance graph
[legend]
Collaboration diagram for BufferedWriter< TBufferSize >:
Collaboration graph
[legend]

Public Member Functions

size_t write (const char *buffer, size_t count) override
 
size_t flush () override
 

Protected Member Functions

virtual size_t writeInternal (const char *buffer, size_t count)=0
 

Private Attributes

char m_buffer [TBufferSize]
 
size_t m_bytesUsed = 0
 

Detailed Description

template<int TBufferSize>
class BufferedWriter< TBufferSize >

Definition at line 12 of file buffered_writer.h.

Member Function Documentation

◆ flush()

template<int TBufferSize>
size_t BufferedWriter< TBufferSize >::flush ( )
inlineoverridevirtual

Implements Writer.

Definition at line 47 of file buffered_writer.h.

47 {
48 size_t bytesToWrite = m_bytesUsed;
49
50 if (bytesToWrite > 0) {
51 m_bytesUsed = 0;
52 return writeInternal(m_buffer, bytesToWrite);
53 } else {
54 return 0;
55 }
56 }
char m_buffer[TBufferSize]
virtual size_t writeInternal(const char *buffer, size_t count)=0

Referenced by BufferedWriter< TBufferSize >::write().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ write()

template<int TBufferSize>
size_t BufferedWriter< TBufferSize >::write ( const char buffer,
size_t  count 
)
inlineoverridevirtual

Implements Writer.

Definition at line 14 of file buffered_writer.h.

14 {
15 size_t bytesFlushed = 0;
16
17 while (count) {
18 if (m_bytesUsed == 0 && count >= TBufferSize) {
19 // special case: write-thru, skip the copy
20 bytesFlushed += writeInternal(buffer, count);
21 count = 0;
22 } else if (m_bytesUsed + count < TBufferSize) {
23 // Write that will fit in the buffer, just copy to intermediate buffer
24 memcpy(m_buffer + m_bytesUsed, buffer, count);
26 count = 0;
27 } else {
28 // Need to write partial, then flush buffer
29 size_t bytesToWrite = TBufferSize - m_bytesUsed;
30 // Copy this block in to place
31 memcpy(m_buffer + m_bytesUsed, buffer, bytesToWrite);
32 m_bytesUsed += bytesToWrite;
33
34 // Flush to underlying
35 bytesFlushed += flush();
36 // Step the read pointer ahead
37 buffer += bytesToWrite;
38 // Decrement remaining bytes
39 count -= bytesToWrite;
40 }
41 }
42
43 return bytesFlushed;
44 }
size_t flush() override
static BigBufferHandle buffer
uint16_t count
Definition tunerstudio.h:1
Here is the call graph for this function:

◆ writeInternal()

template<int TBufferSize>
virtual size_t BufferedWriter< TBufferSize >::writeInternal ( const char buffer,
size_t  count 
)
protectedpure virtual

Referenced by BufferedWriter< TBufferSize >::flush(), and BufferedWriter< TBufferSize >::write().

Here is the caller graph for this function:

Field Documentation

◆ m_buffer

template<int TBufferSize>
char BufferedWriter< TBufferSize >::m_buffer[TBufferSize]
private

◆ m_bytesUsed

template<int TBufferSize>
size_t BufferedWriter< TBufferSize >::m_bytesUsed = 0
private

The documentation for this class was generated from the following file: