1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- /* Class autosprintf - formatted output to an ostream.
- Copyright (C) 2002, 2012-2016 Free Software Foundation, Inc.
- This program 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 program 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 <https://www.gnu.org/licenses/>. */
- #ifndef _AUTOSPRINTF_H
- #define _AUTOSPRINTF_H
- /* This feature is available in gcc versions 2.5 and later. */
- #if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__
- # define _AUTOSPRINTF_ATTRIBUTE_FORMAT() /* empty */
- #else
- /* The __-protected variants of 'format' and 'printf' attributes
- are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */
- # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
- # define _AUTOSPRINTF_ATTRIBUTE_FORMAT() \
- __attribute__ ((__format__ (__printf__, 2, 3)))
- # else
- # define _AUTOSPRINTF_ATTRIBUTE_FORMAT() \
- __attribute__ ((format (printf, 2, 3)))
- # endif
- #endif
- #include <string>
- #include <iostream>
- namespace gnu
- {
- /* A temporary object, usually allocated on the stack, representing
- the result of an asprintf() call. */
- class autosprintf
- {
- public:
- /* Constructor: takes a format string and the printf arguments. */
- autosprintf (const char *format, ...)
- _AUTOSPRINTF_ATTRIBUTE_FORMAT();
- /* Copy constructor. */
- autosprintf (const autosprintf& src);
- /* Assignment operator. */
- autosprintf& operator = (autosprintf temporary);
- /* Destructor: frees the temporarily allocated string. */
- ~autosprintf ();
- /* Conversion to string. */
- operator char * () const;
- operator std::string () const;
- /* Output to an ostream. */
- friend inline std::ostream& operator<< (std::ostream& stream, const autosprintf& tmp)
- {
- stream << (tmp.str ? tmp.str : "(error in autosprintf)");
- return stream;
- }
- private:
- char *str;
- };
- }
- #endif /* _AUTOSPRINTF_H */
|