MySQL 8.4.4
Source Code Documentation
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
TraceBuffer Class Referencefinal

This class is used for storing unstructured optimizer trace text (as used by the Hypergraph optimizer). More...

#include <optimizer_trace.h>

Inheritance diagram for TraceBuffer:
[legend]

Public Member Functions

int_type overflow (int_type ch) override
 Called by std::ostream if the current segment is full. More...
 
template<typename Sink >
void ForEach (Sink sink) const
 Apply 'sink' to each character in the trace text. More...
 
template<typename Sink >
void ForEachRemove (Sink sink)
 Apply 'sink' to each character in the trace text. More...
 
std::string ToString () const
 Return a copy of the contents as a string. More...
 

Static Public Attributes

static constexpr size_t kSegmentSize = 4096
 The size of each consecutive buffer. More...
 

Private Types

using Segment = std::array< char, kSegmentSize >
 A consecutive buffer. More...
 
using DequeType = std::deque< Segment >
 The sequence of consecutive buffers. More...
 

Private Attributes

DequeType m_segments
 The sequence of segments. More...
 

Detailed Description

This class is used for storing unstructured optimizer trace text (as used by the Hypergraph optimizer).

It is used as the std::streambuf object of an associated std::ostream (which writes the formatted text into a TraceBuffer object). The text is stored in a non-consecutive sequence of segments, where each segment has a chunk of consecutive memory. That way, the buffer can grow without having to copy the text into ever bigger buffers of consecutive memory.

Member Typedef Documentation

◆ DequeType

using TraceBuffer::DequeType = std::deque<Segment>
private

The sequence of consecutive buffers.

◆ Segment

using TraceBuffer::Segment = std::array<char, kSegmentSize>
private

A consecutive buffer.

Member Function Documentation

◆ ForEach()

template<typename Sink >
void TraceBuffer::ForEach ( Sink  sink) const
inline

Apply 'sink' to each character in the trace text.

◆ ForEachRemove()

template<typename Sink >
void TraceBuffer::ForEachRemove ( Sink  sink)
inline

Apply 'sink' to each character in the trace text.

Free each segment when its contents have been consumed.

◆ overflow()

int_type TraceBuffer::overflow ( int_type  ch)
inlineoverride

Called by std::ostream if the current segment is full.

Allocate a new segment and put 'ch' at the beginning of it.

◆ ToString()

std::string TraceBuffer::ToString ( ) const
inline

Return a copy of the contents as a string.

This may be expensive for large traces, and is only intended for unit tests.

Member Data Documentation

◆ kSegmentSize

constexpr size_t TraceBuffer::kSegmentSize = 4096
staticconstexpr

The size of each consecutive buffer.

◆ m_segments

DequeType TraceBuffer::m_segments
private

The sequence of segments.


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