add MQTT stuff
This commit is contained in:
60
PString/PString.cpp
Normal file
60
PString/PString.cpp
Normal file
@ -0,0 +1,60 @@
|
||||
/*
|
||||
PString.cpp - Lightweight printable string class
|
||||
Copyright (c) 2009-2012 Mikal Hart. All right reserved.
|
||||
|
||||
This library 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 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
This library 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 library; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include "PString.h"
|
||||
|
||||
void PString::begin()
|
||||
{
|
||||
_cur = _buf;
|
||||
if (_size > 0)
|
||||
_buf[0] = '\0';
|
||||
}
|
||||
|
||||
#if defined(ARDUINO) && ARDUINO >= 100
|
||||
size_t PString::write(uint8_t b)
|
||||
#else
|
||||
void PString::write(uint8_t b)
|
||||
#endif
|
||||
{
|
||||
if (_cur + 1 < _buf + _size)
|
||||
{
|
||||
*_cur++ = (char)b;
|
||||
*_cur = '\0';
|
||||
#if defined(ARDUINO) && ARDUINO >= 100
|
||||
return 1;
|
||||
#endif
|
||||
}
|
||||
|
||||
#if defined(ARDUINO) && ARDUINO >= 100
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
int PString::format(char *str, ...)
|
||||
{
|
||||
va_list argptr;
|
||||
va_start(argptr, str);
|
||||
int ret = vsnprintf(_cur, _size - (_cur - _buf), str, argptr);
|
||||
if (_size)
|
||||
while (*_cur)
|
||||
++_cur;
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
87
PString/PString.h
Normal file
87
PString/PString.h
Normal file
@ -0,0 +1,87 @@
|
||||
/*
|
||||
PString.h - Lightweight printable string class
|
||||
Copyright (c) 2009-2012 Mikal Hart. All right reserved.
|
||||
|
||||
This library 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 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
This library 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 library; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#ifndef PString_h
|
||||
#define PString_h
|
||||
|
||||
#include "Print.h"
|
||||
#include <stdarg.h>
|
||||
#include <stddef.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#define PSTRING_LIBRARY_VERSION 3
|
||||
|
||||
class PString : public Print
|
||||
{
|
||||
private:
|
||||
char *_buf, *_cur;
|
||||
size_t _size;
|
||||
public:
|
||||
#if defined(ARDUINO) && ARDUINO >= 100
|
||||
virtual size_t write(uint8_t);
|
||||
#else
|
||||
virtual void write(uint8_t);
|
||||
#endif
|
||||
|
||||
public:
|
||||
|
||||
// Basic constructor requires a preallocated buffer
|
||||
PString(char *buf, size_t size) : _buf(buf), _size(size)
|
||||
{ begin(); }
|
||||
|
||||
// templated constructors allow inline renderings of this type: PString(buf, size, myfloat[, modifier]);
|
||||
template<class T> PString(char *buf, size_t size, T arg) : _buf(buf), _size(size)
|
||||
{ begin(); print(arg); }
|
||||
|
||||
template<class T> PString(char *buf, size_t size, T arg, int modifier) : _buf(buf), _size(size)
|
||||
{ begin(); print(arg, modifier); }
|
||||
|
||||
// returns the length of the current string, not counting the 0 terminator
|
||||
inline const size_t length()
|
||||
{ return _cur - _buf; }
|
||||
|
||||
// returns the capacity of the string
|
||||
inline const size_t capacity()
|
||||
{ return _size; }
|
||||
|
||||
// gives access to the internal string
|
||||
inline operator const char *()
|
||||
{ return _buf; }
|
||||
|
||||
// compare to another string
|
||||
bool operator==(const char *str)
|
||||
{ return _size > 0 && !strcmp(_buf, str); }
|
||||
|
||||
// call this to re-use an existing string
|
||||
void begin();
|
||||
|
||||
// This function allows assignment to an arbitrary scalar value like str = myfloat;
|
||||
template<class T> inline PString &operator =(T arg)
|
||||
{ begin(); print(arg); return *this; }
|
||||
|
||||
// Concatenation str += myfloat;
|
||||
template<class T> inline PString &operator +=(T arg)
|
||||
{ print(arg); return *this; }
|
||||
|
||||
// Safe access to sprintf-like formatting, e.g. str.format("Hi, my name is %s and I'm %d years old", name, age);
|
||||
int format(char *str, ...);
|
||||
};
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user