Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ num_put(3C++) — Sun WorkShop 5.0

Media Vault

Software Library

Restoration Projects

Artifacts Sought

num_put(3C++)

Standard C++ Library
Copyright 1998, Rogue Wave Software, Inc.

 

NAME

 
num_put
 
 - A numeric formatting facet for output.
 
 
 

SYNOPSIS

 
 
#include <locale>
template <class charT, class OutputIterator> class num_put;
 
 
 

DESCRIPTION

 
 
The num_put<charT,OutputIterator>_facet allows for formatted output of numbers. basic_ostream and all other output-oriented streams use this facet to implement formatted numeric output.
 
 
 

INTERFACE

 
 
 
template <class charT, class OutputIterator =

ostreambuf_iterator<charT> >

class num_put : public locale::facet {
public:

typedef charT            char_type;
typedef OutputIterator   iter_type;
explicit num_put(size_t = 0);

 

iter_type put(iter_type, ios_base&, char_type, bool)

const;

iter_type put(iter_type, ios_base&, char_type, long)

const;

iter_type put(iter_type, ios_base&, char_type,

unsigned long) const;

iter_type put(iter_type, ios_base&, char_type,

double) const;

iter_type put(iter_type, ios_base&, char_type,

long double) const;

static locale::id id;

 
protected:

~num_put();  // virtual

virtual iter_type do_put(iter_type, ios_base&, char_type,

bool) const;

virtual iter_type do_put(iter_type, ios_base&, char_type,

long) const;

virtual iter_type do_put(iter_type, ios_base&, char_type,

unsigned long) const;

virtual iter_type do_put(iter_type, ios_base&, char_type,

double) const;

virtual iter_type do_put(iter_type, ios_base&, char_type,

long double) const;

};
 
 
 

TYPES

 
 
 
char_type

 
 
Type of character upon which the facet is instantiated.
 

 
 
iter_type

 
 
Type of iterator used to scan the character buffer.
 

 
 
 

CONSTRUCTORS

 
 
 
explicit num_put(size_t refs = 0)

 
 
Constructs a num_put facet. If the refs argument is 0, then destruction of the object is delegated to the locale, or locales, containing it. This allows the user to ignore lifetime management issues. On the other hand, if refs is 1, then the object must be explicitly deleted; the locale does not do so. In this case, the object can be maintained across the lifetime of multiple locales. 
 

 
 
 

DESTRUCTORS

 
 
 
~num_put();  // virtual and protected

 
 
Destroys the facet.
 

 
 
 

FACET ID

 
 
 
static locale::id id;

 
 
Unique identifier for this type of facet.
 

 
 
 

PUBLIC MEMBER FUNCTIONS

 
 
The public members of the num_put facet include an interface to protected members. Each public member xxx has a corresponding virtual protected member do_xxx. All work is delegated to these protected members.   For instance, the long version of the public put function simply calls its protected cousin do_put. 
 
 
iter_type
put(iter_type s, ios_base& io, char_type fill, bool v)

const;

iter_type
put(iter_type s, ios_base& io, char_type fill, long v)

const;

iter_type
put(iter_type s, ios_base& io, char_type fill,

unsigned long v) const;

iter_type
put(iter_type s, ios_base& io, char_type fill, double v)

const;

iter_type
put(iter_type s, ios_base& io, char_type fill,

long double v) const;

 
 
Each of the five overloads of the put function simply call the corresponding do_put function. 
 

 
 
 

PROTECTED MEMBER FUNCTIONS

 
 
 

virtual iter_type
do_put(iter_type s, ios_base& io,

char_type fill, bool v) const;

virtual iter_type
do_put(iter_type s, ios_base& io,

char_type fill, long v) const;

virtual iter_type
do_put(iter_type s, ios_base& io,

char_type fill,unsigned long) const;

virtual iter_type
do_put(iter_type s, ios_base& io,

char_type fill, double v) const;

virtual iter_type
do_put(iter_type s, ios_base& io,

char_type fill,long double v) const;

 
 
The five overloads of the do_put member function all take a numeric value and output a formatted character string representing that value. The character string is output through the s argument to the function. The io argument is used to obtain formatting specifications, and the fill argument determines the character to use in padding. 
 

 
 
 

EXAMPLE

 
 
 

//
// numput.cpp
//
 
#include <iostream>
 
int main ()
{

using namespace std;

 

typedef ostreambuf_iterator<char,char_traits<char> >

iter_type;
 

locale loc;
bool bval = true;
long lval = 422432L;
unsigned long ulval = 12328889UL;
double dval = 10933.8934;
long double ldval = 100028933.8934;

 

// Construct a ostreambuf_iterator on cout

iter_type begin(cout);

 

// Get a num_put facet reference

const num_put<char,iter_type>& np =

#ifndef _RWSTD_NO_TEMPLATE_ON_RETURN_TYPE

use_facet<num_put<char,iter_type> >(loc);

#else

use_facet(loc,(num_put<char,iter_type>∗)0);

#endif
 

// Put out a bool

cout << bval << " --> ";
np.put(begin,cout,’ ’,bval);

 

// Put out a long

cout << endl << lval << " --> ";
np.put(begin,cout,’ ’,lval);

 

// Put out an unsigned long

cout << endl << ulval << " --> ";
np.put(begin,cout,’ ’,ulval);

 

// Put out a double

cout << endl << dval << " --> ";
np.put(begin,cout,’ ’,dval);

 

// Put out a long double

cout << endl << ldval << " --> ";
np.put(begin,cout,’ ’,ldval);

 

cout <<  endl;

 

return 0;

}
 
 
 

SEE ALSO

 
 
locale, facets, numget, numpunct, ctype
 

Rogue Wave Software  —  Last change: 02 Apr 1998

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026