3 #ifndef INCLUDE_NN_NLIB_REALLOCOUTPUTSTREAM_H_
4 #define INCLUDE_NN_NLIB_REALLOCOUTPUTSTREAM_H_
16 typedef void (*FreeFunc)(
void* ptr);
18 explicit FreeDeleter(FreeFunc freefunc)
NLIB_NOEXCEPT : m_Free(freefunc) {}
35 class ReallocDeleter {
37 typedef void* (*ReallocFunc)(
void* ptr,
size_t n);
39 explicit ReallocDeleter(ReallocFunc reallocfunc)
NLIB_NOEXCEPT : m_Realloc(reallocfunc) {}
42 m_Realloc = rhs.m_Realloc;
49 ReallocFunc GetFunc() const
NLIB_NOEXCEPT {
return m_Realloc; }
52 ReallocFunc m_Realloc;
55 NLIB_STATIC_ASSERT(!IsEmpty<FreeDeleter<int> >::value && !IsEmpty<ReallocDeleter<int> >::value);
58 class ReallocOutputStream
NLIB_FINAL :
public OutputStream {
66 typedef void* (*ReallocFunc)(
void* ptr,
size_t n);
73 const uint8_t* Data() const
NLIB_NOEXCEPT {
return m_Data.get(); }
77 if (this->ExpandOrShrink(this->Pos()) == 0) {
78 this->ResetBuffer(m_Data.get() + m_Capacity, 0);
89 errno_t Expand(
size_t newCap) NLIB_NOEXCEPT {
90 return (newCap > m_Capacity) ? this->ExpandOrShrink(newCap) : 0;
96 NLIB_VIS_PUBLIC virtual
void* GetWorkBuffer_(
size_t* nBytes) NLIB_NOEXCEPT NLIB_OVERRIDE;
106 #endif // INCLUDE_NN_NLIB_REALLOCOUTPUTSTREAM_H_
#define NLIB_NOEXCEPT
環境に合わせてnoexcept 又は同等の定義がされます。
ReallocOutputStream() noexcept
デフォルトコンストラクタです。nlib_realloc()でメモリの拡張を行うように設定します。 ...
UniquePtr< char[], ReallocDeleter< char > > CharPtrType
charの配列へのUniquePtrをtypedefしたものです。
#define NLIB_FINAL
利用可能であればfinalが定義されます。そうでない場合は空文字列です。
#define NLIB_DISALLOW_COPY_AND_ASSIGN(TypeName)
TypeName で指定されたクラスのコピーコンストラクタと代入演算子を禁止します。
nlib_realloc()等のrealloc関数を利用して拡張するメモリ領域に書きこむ出力ストリームです。 ...
#define NLIB_OVERRIDE
利用可能であればoverrideが定義されます。そうでない場合は空文字列です。
UniquePtrはポインタの所有権を保持し、UniquePtrがスコープから出るときにデストラクタでポインタをDELで指...
std::unique_ptrに相当するクラスが定義されています。
void ShrinkToFit() noexcept
バッファ・サイズを現在の書き込み位置にフィットさせます。
UniquePtr< uint8_t[], ReallocDeleter< uint8_t > > UniquePtrType
uint8_tの配列へのUniquePtrをtypedefしたものです。
#define NLIB_STATIC_ASSERT(exp)
静的アサートが定義されます。利用可能であればstatic_assertを利用します。
bool Reserve(size_t n) noexcept
サイズを指定して書き込み先バッファを確保します。
出力ストリームの基底クラスです。このクラスを実体化することはできません。