home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c480 / 19.ddi / INCLUDE / IOMANIP.H_ / IOMANIP.H
Encoding:
C/C++ Source or Header  |  1993-02-08  |  4.1 KB  |  129 lines

  1. /***
  2. *iomanip.h - definitions/declarations for iostream's parameterized manipulators
  3. *
  4. *   Copyright (c) 1991-1992, Microsoft Corporation.  All rights reserved.
  5. *
  6. *Purpose:
  7. *   This file defines the classes, values, macros, and functions
  8. *   used by the iostream classes' paramterized manipulators.
  9. *   [AT&T C++]
  10. *
  11. ****/
  12.  
  13. #ifndef _INC_IOMANIP
  14. #define _INC_IOMANIP
  15. #include <iostream.h>
  16.  
  17. // Force word packing to avoid possible -Zp override
  18. #pragma pack(2)
  19.  
  20. #pragma warning(disable:4505)       // disable unwanted /W4 warning
  21. // #pragma warning(default:4505)    // use this to reenable, if necessary
  22.  
  23. // CONSIDER: use macro to define these
  24. // #define __MKMANIP(X) \#define X##(T) __##X##_ \#\# T
  25. // __MKMANIP(SMANIP);
  26. // __MKMANIP(SAPP);
  27. // __MKMANIP(IMANIP);
  28. // __MKMANIP(IAPP);
  29. // __MKMANIP(OMANIP);
  30. // __MKMANIP(OAPP);
  31. // __MKMANIP(IOMANIP);
  32. // __MKMANIP(IOAPP);
  33.  
  34. #define SMANIP(T) __SMANIP_##T
  35. #define SAPP(T) __SAPP_##T
  36. #define IMANIP(T) __IMANIP_##T
  37. #define IAPP(T) __IAPP_##T
  38. #define OMANIP(T) __OMANIP_##T
  39. #define OAPP(T) __OAPP_##T
  40. #define IOMANIP(T) __IOMANIP_##T
  41. #define IOAPP(T) __IOAPP_##T
  42.  
  43. #define IOMANIPdeclare(T)  \
  44. class SMANIP(T) { \
  45. public: \
  46.     SMANIP(T)(ios& (*f)(ios&,T), T t) { _fp = f; _tp = t; } \
  47.     friend istream& operator>>(istream& s, SMANIP(T) & sm) { (*(sm._fp))(s,sm._tp); return s; } \
  48.     friend ostream& operator<<(ostream& s, SMANIP(T) & sm) { (*(sm._fp))(s,sm._tp); return s; } \
  49. private:    \
  50.     ios& (* _fp)(ios&,T); \
  51.     T _tp; \
  52. };  \
  53. class SAPP(T) { \
  54. public: \
  55.     SAPP(T)( ios& (*f)(ios&,T)) { _fp = f; }    \
  56.     SMANIP(T) operator()(T t) { return SMANIP(T)(_fp,t); }  \
  57. private:    \
  58.     ios& (* _fp)(ios&,T); \
  59. };  \
  60. class IMANIP(T) { \
  61. public: \
  62.     IMANIP(T)(istream& (*f)(istream&,T), T t) { _fp = f; _tp = t; } \
  63.     friend istream& operator>>(istream& s, IMANIP(T) & sm) { (*sm._fp)(s,sm._tp); return s; } \
  64. private:    \
  65.     istream& (* _fp)(istream&,T); \
  66.     T _tp;  \
  67. };  \
  68. class IAPP(T) { \
  69. public: \
  70.     IAPP(T)( istream& (*f)(istream&,T)) { _fp = f; }    \
  71.     IMANIP(T) operator()(T t) { return IMANIP(T)(_fp,t); }  \
  72. private:    \
  73.     istream& (* _fp)(istream&,T); \
  74. };  \
  75. class OMANIP(T) { \
  76. public: \
  77.     OMANIP(T)(ostream& (*f)(ostream&,T), T t) { _fp = f; _tp = t; } \
  78.     friend ostream& operator<<(ostream& s, OMANIP(T) & sm) { (*sm._fp)(s,sm._tp); return s; } \
  79. private:    \
  80.     ostream& (* _fp)(ostream&,T); \
  81.     T _tp; \
  82. };  \
  83. class OAPP(T) { \
  84. public: \
  85.     OAPP(T)(ostream& (*f)(ostream&,T)) { _fp = f; } \
  86.     OMANIP(T) operator()(T t) { return OMANIP(T)(_fp,t); } \
  87. private:    \
  88.     ostream& (* _fp)(ostream&,T); \
  89. };  \
  90. \
  91. class IOMANIP(T) { \
  92. public: \
  93.     IOMANIP(T)(iostream& (*f)(iostream&,T), T t) { _fp = f; _tp = t; } \
  94.     friend istream& operator>>(iostream& s, IOMANIP(T) & sm) { (*sm._fp)(s,sm._tp); return s; } \
  95.     friend ostream& operator<<(iostream& s, IOMANIP(T) & sm) { (*sm._fp)(s,sm._tp); return s; } \
  96. private:    \
  97.     iostream& (* _fp)(iostream&,T); \
  98.     T _tp; \
  99. };  \
  100. class IOAPP(T) {    \
  101. public: \
  102.     IOAPP(T)( iostream& (*f)(iostream&,T)) { _fp = f; } \
  103.     IOMANIP(T) operator()(T t) { return IOMANIP(T)(_fp,t); }    \
  104. private:    \
  105.     iostream& (* _fp)(iostream&,T); \
  106. }; \
  107.  
  108.  
  109. IOMANIPdeclare(int)
  110.  
  111. IOMANIPdeclare(long)
  112.  
  113. inline ios& __resetiosflags(ios& s, long _flg) { s.setf(0,_flg); return s; }
  114. inline ios& __setfill(ios& s, int _fc) { s.fill((char)_fc); return s; }
  115. inline ios& __setiosflags(ios& s, long _flg) { s.setf(_flg); return s; }
  116. inline ios& __setprecision(ios& s, int _pre) { s.precision(_pre); return s; }
  117. inline ios& __setw(ios& s, int _wid) { s.width(_wid); return s; }
  118.  
  119. inline SMANIP(long) resetiosflags(long _l) { return SMANIP(long)(__resetiosflags, _l); }
  120. inline SMANIP(int)  setfill(int _m) {return SMANIP(int)(__setfill, _m); }
  121. inline SMANIP(long) setiosflags(long _l) {return SMANIP(long)(__setiosflags, _l); }
  122. inline SMANIP(int)  setprecision(int _p) {return SMANIP(int)(__setprecision, _p); }
  123. inline SMANIP(int)  setw(int _w) { return SMANIP(int)(__setw, _w); }
  124.  
  125. // Restore default packing
  126. #pragma pack()
  127.  
  128. #endif 
  129.