/*********************************************************************** * ftermbuffer.h - Buffer for virtual terminal strings * * * * This file is part of the Final Cut widget toolkit * * * * Copyright 2017-2018 Markus Gans * * * * The Final Cut is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public License * * as published by the Free Software Foundation; either version 3 of * * the License, or (at your option) any later version. * * * * The Final Cut is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this program. If not, see * * . * ***********************************************************************/ /* Standalone class * ════════════════ * * ▕▔▔▔▔▔▔▔▔▔▔▔▔▔▏ * ▕ FTermBuffer ▏ * ▕▁▁▁▁▁▁▁▁▁▁▁▁▁▏ */ #ifndef FTERMBUFFER_H #define FTERMBUFFER_H #if !defined (USE_FINAL_H) && !defined (COMPILE_FINAL_CUT) #error "Only can be included directly." #endif #include // std::stringstream #include #include #include "final/fvterm.h" #include "final/fstring.h" namespace finalcut { //---------------------------------------------------------------------- // class FTermBuffer //---------------------------------------------------------------------- #pragma pack(push) #pragma pack(1) class FTermBuffer { public: // Typedef typedef FOptiAttr::charData charData; // Constructor FTermBuffer() = default; // Destructor virtual ~FTermBuffer(); // Overloaded operators template FTermBuffer& operator << (const type&); // Non-member operators friend std::vector& operator << ( std::vector& , const FTermBuffer& ); // Accessors virtual const char* getClassName() const; std::size_t getLength() const; // Inquiry bool isEmpty() const; // Methods void clear(); int writef (const FString, ...); int write (const FString&); int write (int); FTermBuffer& write (); std::vector getBuffer(); private: std::vector data{}; }; #pragma pack(pop) // FTermBuffer inline functions //---------------------------------------------------------------------- template inline FTermBuffer& FTermBuffer::operator << (const type& s) { FString str(s); std::wostringstream outstream; outstream << str; write (outstream.str()); return *this; } //---------------------------------------------------------------------- inline const char* FTermBuffer::getClassName() const { return "FTermBuffer"; } //---------------------------------------------------------------------- inline std::size_t FTermBuffer::getLength() const { return data.size(); } //---------------------------------------------------------------------- inline bool FTermBuffer::isEmpty() const { return data.empty(); } //---------------------------------------------------------------------- inline void FTermBuffer::clear() { data.clear(); } //---------------------------------------------------------------------- inline FTermBuffer& FTermBuffer::write() { return *this; } //---------------------------------------------------------------------- inline std::vector FTermBuffer::getBuffer() { return data; } } // namespace finalcut #endif // FTERMBUFFER_H