cs-midi/AH/PrintStream/PrintStream.hpp

146 lines
3.5 KiB
C++

/**
* @brief [PrintStream library](https://github.com/tttapa/Arduino-PrintStream/blob/6a9e0d365be0b3d84187daa2a8a7bda8d541472e/src/PrintStream.h)
*/
#ifndef PrintStream_h
#define PrintStream_h
#include <platform/pico_shim.h>
#include <AH/Settings/NamespaceSettings.hpp>
BEGIN_AH_NAMESPACE
/// @addtogroup AH_PrintStream
/// @{
typedef Print &manipulator(Print &);
Print &endl(Print &printer);
Print &flush(Print &printer);
Print &hex(Print &printer);
Print &bin(Print &printer);
Print &dec(Print &printer);
/* Print &oct(Print &printer); */
Print &boolalpha(Print &printer);
Print &noboolalpha(Print &printer);
Print &leadingzeros(Print &printer);
Print &noleadingzeros(Print &printer);
Print &uppercase(Print &printer);
Print &nouppercase(Print &printer);
Print &showbase(Print &printer);
Print &noshowbase(Print &printer);
Print &operator<<(Print &printer, const __FlashStringHelper *s);
#ifdef ARDUINO
Print &operator<<(Print &printer, const String &s);
#endif
Print &operator<<(Print &printer, const char s[]);
Print &operator<<(Print &printer, char c);
Print &operator<<(Print &printer, unsigned char c);
Print &operator<<(Print &printer, int i);
Print &operator<<(Print &printer, unsigned int i);
Print &operator<<(Print &printer, int8_t i);
Print &operator<<(Print &printer, long i);
Print &operator<<(Print &printer, unsigned long i);
Print &operator<<(Print &printer, float f);
Print &operator<<(Print &printer, double d);
Print &operator<<(Print &printer, const Printable &p);
Print &operator<<(Print &printer, bool b);
Print &operator<<(Print &printer, manipulator pf);
struct Setbase {
uint8_t M_base;
};
Setbase setbase(uint8_t base);
Print &operator<<(Print &printer, Setbase f);
struct Setprecision {
int M_n;
};
Setprecision setprecision(int n);
Print &operator<<(Print &printer, Setprecision f);
struct Setbytesep {
char M_bytesep;
};
Setbytesep setbytesep(char bytesep);
Print &operator<<(Print &printer, Setbytesep f);
struct HexDump {
HexDump(const uint8_t *data, size_t length) : data(data), length(length) {}
template <size_t N>
explicit HexDump(const uint8_t (&data)[N]) : HexDump {data, N} {}
const uint8_t *data;
size_t length;
};
Print &operator<<(Print &p, HexDump h);
/// @}
END_AH_NAMESPACE
#ifndef ARDUINO
#include <iomanip>
#include <iostream>
BEGIN_AH_NAMESPACE
// TODO: check conflicts between Arduino version and C++ STL version
using std::endl;
// using std::setbase;
// using std::setprecision;
using std::boolalpha;
using std::dec;
using std::flush;
using std::hex;
using std::noboolalpha;
using std::noshowbase;
using std::nouppercase;
using std::showbase;
using std::uppercase;
inline std::ostream &operator<<(std::ostream &os, uint8_t u) {
// I'm lazy, I should probably implement one for uint8_t to get the leading
// zeros right
return os << static_cast<unsigned short>(u);
}
inline std::ostream &operator<<(std::ostream &os,
const __FlashStringHelper *s) {
return os << reinterpret_cast<const char *>(s);
}
std::ostream &operator<<(std::ostream &p, HexDump h);
END_AH_NAMESPACE
#endif
#include <Settings/NamespaceSettings.hpp>
BEGIN_CS_NAMESPACE
using AH::operator<<;
using AH::manipulator;
using AH::endl;
using AH::flush;
using AH::hex;
using AH::bin;
using AH::dec;
using AH::boolalpha;
using AH::noboolalpha;
using AH::leadingzeros;
using AH::noleadingzeros;
using AH::uppercase;
using AH::nouppercase;
using AH::showbase;
using AH::noshowbase;
using AH::setbase;
using AH::setprecision;
using AH::setbytesep;
END_CS_NAMESPACE
#endif // PrintStream_h