codekingpro/portable-devtools
116k
1/* Class autosprintf - formatted output to an ostream.2 Copyright (C) 2002, 2012-2016 Free Software Foundation, Inc.3 4 This program is free software: you can redistribute it and/or modify5 it under the terms of the GNU Lesser General Public License as published by6 the Free Software Foundation; either version 2.1 of the License, or7 (at your option) any later version.8 9 This program is distributed in the hope that it will be useful,10 but WITHOUT ANY WARRANTY; without even the implied warranty of11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the12 GNU Lesser General Public License for more details.13 14 You should have received a copy of the GNU Lesser General Public License15 along with this program. If not, see <http://www.gnu.org/licenses/>. */16 17#ifndef _AUTOSPRINTF_H18#define _AUTOSPRINTF_H19 20/* This feature is available in gcc versions 2.5 and later. */21#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__22# define _AUTOSPRINTF_ATTRIBUTE_FORMAT() /* empty */23#else24/* The __-protected variants of 'format' and 'printf' attributes25 are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */26# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)27# define _AUTOSPRINTF_ATTRIBUTE_FORMAT() \28 __attribute__ ((__format__ (__printf__, 2, 3)))29# else30# define _AUTOSPRINTF_ATTRIBUTE_FORMAT() \31 __attribute__ ((format (printf, 2, 3)))32# endif33#endif34 35#include <string>36#include <iostream>37 38namespace gnu39{40 /* A temporary object, usually allocated on the stack, representing41 the result of an asprintf() call. */42 class autosprintf43 {44 public:45 /* Constructor: takes a format string and the printf arguments. */46 autosprintf (const char *format, ...)47 _AUTOSPRINTF_ATTRIBUTE_FORMAT();48 /* Copy constructor. */49 autosprintf (const autosprintf& src);50 autosprintf& operator = (autosprintf copy);51 /* Destructor: frees the temporarily allocated string. */52 ~autosprintf ();53 /* Conversion to string. */54 operator char * () const;55 operator std::string () const;56 /* Output to an ostream. */57 friend inline std::ostream& operator<< (std::ostream& stream, const autosprintf& tmp)58 {59 stream << (tmp.str ? tmp.str : "(error in autosprintf)");60 return stream;61 }62 private:63 char *str;64 };65}66 67#endif /* _AUTOSPRINTF_H */68 