ReactOS 0.4.16-dev-822-gbcedb53
__crt_stdio_output::formatting_buffer Class Reference

#include <corecrt_internal_stdio_output.h>

Public Types

enum  { member_buffer_size = 1024 }
 

Public Member Functions

 formatting_buffer () throw ()
 
template<typename T >
bool ensure_buffer_is_big_enough (size_t const count, __crt_cached_ptd_host &ptd) throw ()
 
template<typename T >
Tdata () throw ()
 
template<typename T >
Tscratch_data () throw ()
 
template<typename T >
size_t count () const throw ()
 
template<typename T >
size_t scratch_count () const throw ()
 

Private Attributes

char _member_buffer [member_buffer_size]
 
size_t _dynamic_buffer_size
 
__crt_unique_heap_ptr< char_dynamic_buffer
 

Detailed Description

Definition at line 361 of file corecrt_internal_stdio_output.h.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
Enumerator
member_buffer_size 

Definition at line 365 of file corecrt_internal_stdio_output.h.

Constructor & Destructor Documentation

◆ formatting_buffer()

__crt_stdio_output::formatting_buffer::formatting_buffer ( )
throw (
)
inline

Member Function Documentation

◆ count()

template<typename T >
size_t __crt_stdio_output::formatting_buffer::count ( ) const
throw (
)
inline

Definition at line 423 of file corecrt_internal_stdio_output.h.

424 {
425 if (!_dynamic_buffer)
426 return member_buffer_size / sizeof(T) / 2;
427
428 return _dynamic_buffer_size / sizeof(T) / 2;
429 }

◆ data()

template<typename T >
T * __crt_stdio_output::formatting_buffer::data ( )
throw (
)
inline

Definition at line 405 of file corecrt_internal_stdio_output.h.

406 {
407 if (!_dynamic_buffer)
408 return reinterpret_cast<T*>(_member_buffer);
409
410 return reinterpret_cast<T*>(_dynamic_buffer.get());
411 }

◆ ensure_buffer_is_big_enough()

template<typename T >
bool __crt_stdio_output::formatting_buffer::ensure_buffer_is_big_enough ( size_t const  count,
__crt_cached_ptd_host &  ptd 
)
throw (
)
inline

Definition at line 378 of file corecrt_internal_stdio_output.h.

379 {
380 constexpr size_t max_count = SIZE_MAX / sizeof(T) / 2; // avoid runtime division
382
383 size_t const required_size{count * sizeof(T) * 2};
384
385 // Once we allocate a dynamic buffer, we no longer use the member buffer
386 if (!_dynamic_buffer && required_size <= member_buffer_size) {
387 return true;
388 }
389
390 if (required_size <= _dynamic_buffer_size) {
391 return true;
392 }
393
394 __crt_unique_heap_ptr<char> new_buffer{_malloc_crt_t(char, required_size)};
395 if (!new_buffer) {
396 return false;
397 }
398
399 _dynamic_buffer = static_cast<__crt_unique_heap_ptr<char>&&>(new_buffer);
400 _dynamic_buffer_size = required_size;
401 return true;
402 }
#define ENOMEM
Definition: acclib.h:84
#define _UCRT_VALIDATE_RETURN_NOEXC(ptd, expr, errorcode, retexpr)
_In_ size_t const _In_ int _In_ bool const _In_ unsigned const _In_ __acrt_rounding_mode const _Inout_ __crt_cached_ptd_host & ptd
Definition: cvt.cpp:355
Character const *const size_t const max_count
Definition: fullpath.cpp:66
GLuint GLuint GLsizei count
Definition: gl.h:1545
#define SIZE_MAX
Definition: compat.h:66

◆ scratch_count()

template<typename T >
size_t __crt_stdio_output::formatting_buffer::scratch_count ( ) const
throw (
)
inline

Definition at line 432 of file corecrt_internal_stdio_output.h.

433 {
434 return count<T>();
435 }

◆ scratch_data()

template<typename T >
T * __crt_stdio_output::formatting_buffer::scratch_data ( )
throw (
)
inline

Definition at line 414 of file corecrt_internal_stdio_output.h.

415 {
416 if (!_dynamic_buffer)
417 return reinterpret_cast<T*>(_member_buffer) + count<T>();
418
419 return reinterpret_cast<T*>(_dynamic_buffer.get()) + count<T>();
420 }

Member Data Documentation

◆ _dynamic_buffer

__crt_unique_heap_ptr<char> __crt_stdio_output::formatting_buffer::_dynamic_buffer
private

◆ _dynamic_buffer_size

size_t __crt_stdio_output::formatting_buffer::_dynamic_buffer_size
private

Definition at line 441 of file corecrt_internal_stdio_output.h.

Referenced by count(), and ensure_buffer_is_big_enough().

◆ _member_buffer

char __crt_stdio_output::formatting_buffer::_member_buffer[member_buffer_size]
private

Definition at line 439 of file corecrt_internal_stdio_output.h.

Referenced by data(), and scratch_data().


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