(root)/
gettext-0.22.4/
gettext-runtime/
libasprintf/
autosprintf.in.h
       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 modify
       5     it under the terms of the GNU Lesser General Public License as published by
       6     the Free Software Foundation; either version 2.1 of the License, or
       7     (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 of
      11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      12     GNU Lesser General Public License for more details.
      13  
      14     You should have received a copy of the GNU Lesser General Public License
      15     along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
      16  
      17  #ifndef _AUTOSPRINTF_H
      18  #define _AUTOSPRINTF_H
      19  
      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  #else
      24  /* The __-protected variants of 'format' and 'printf' attributes
      25     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  # else
      30  #  define _AUTOSPRINTF_ATTRIBUTE_FORMAT() \
      31    __attribute__ ((format (printf, 2, 3)))
      32  # endif
      33  #endif
      34  
      35  #include <string>
      36  #include <iostream>
      37  
      38  namespace gnu
      39  {
      40    /* A temporary object, usually allocated on the stack, representing
      41       the result of an asprintf() call.  */
      42    class autosprintf
      43    {
      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      /* Assignment operator.  */
      51      autosprintf& operator = (autosprintf temporary);
      52      /* Destructor: frees the temporarily allocated string.  */
      53      ~autosprintf ();
      54      /* Conversion to string.  */
      55      operator char * () const;
      56      operator std::string () const;
      57      /* Output to an ostream.  */
      58      friend inline std::ostream& operator<< (std::ostream& stream, const autosprintf& tmp)
      59      {
      60        stream << (tmp.str ? tmp.str : "(error in autosprintf)");
      61        return stream;
      62      }
      63    private:
      64      char *str;
      65    };
      66  }
      67  
      68  #endif /* _AUTOSPRINTF_H */