42#ifndef TEUCHOS_FANCY_O_STREAM_HPP
43#define TEUCHOS_FANCY_O_STREAM_HPP
62template<
typename CharT,
typename Traits>
72 typedef typename traits_type::int_type
int_type;
74 typedef typename traits_type::pos_type
pos_type;
76 typedef typename traits_type::off_type
off_type;
80 const RCP<std::basic_ostream<char_type,traits_type> > &oStream
81 ,
const std::basic_string<char_type,traits_type> &tabIndentStr
82 ,
const int startingTab
83 ,
const bool showLinePrefix
84 ,
const int maxLenLinePrefix
85 ,
const bool showTabCount
86 ,
const bool showProcRank
91 const RCP<std::basic_ostream<char_type,traits_type> > &oStream
92 ,
const std::basic_string<char_type,traits_type> &tabIndentStr
93 ,
const int startingTab
94 ,
const bool showLinePrefix
95 ,
const int maxLenLinePrefix
96 ,
const bool showTabCount
97 ,
const bool showProcRank
196 const std::basic_string<char_type,traits_type> &linePrefix
222#ifdef TEUCHOS_FANCY_OSTREAM_SHOW_ALL_CALLS
224 void imbue(
const locale& l)
226 std::cerr <<
"\ncalled imbue()\n";
227 std::basic_streambuf<CharT,Traits>::imbue(l);
230 basic_streambuf<char_type,Traits>*
233 std::cerr <<
"\ncalled setbuf()\n";
234 return std::basic_streambuf<CharT,Traits>::setbuf(s,n);
238 seekoff(
off_type a, ios_base::seekdir b,ios_base::openmode c)
240 std::cerr <<
"\ncalled seekoff()\n";
241 return std::basic_streambuf<CharT,Traits>::seekoff(a,b,c);
245 seekpos(
pos_type a, ios_base::openmode b)
247 std::cerr <<
"\ncalled seekpos()\n";
248 return std::basic_streambuf<CharT,Traits>::seekpos(a,b);
254 std::cerr <<
"\ncalled sync()\n";
255 return std::basic_streambuf<CharT,Traits>::sync();
261 std::cerr <<
"\ncalled showmanyc()\n";
262 return std::basic_streambuf<CharT,Traits>::showmanyc();
268 std::cerr <<
"\ncalled xsgetn()\n";
269 return std::basic_streambuf<CharT,Traits>::xsgetn(s,n);
275 std::cerr <<
"\ncalled underflow()\n";
276 return std::basic_streambuf<CharT,Traits>::underflow();
282 std::cerr <<
"\ncalled uflow()\n";
283 return std::basic_streambuf<CharT,Traits>::uflow();
287 pbackfail(
int_type c = traits_type::eof())
289 std::cerr <<
"\ncalled pbackfail()\n";
290 return std::basic_streambuf<CharT,Traits>::pbackfail(c);
302 typedef std::basic_string<char_type,traits_type>
string_t;
380template <
typename CharT,
typename Traits = std::
char_traits<CharT> >
403 typedef std::basic_ostream<char_type, traits_type>
ostream_t;
441 const RCP< std::basic_ostream<char_type,traits_type> > &oStream
442 ,
const std::basic_string<char_type,traits_type> &tabIndentStr =
" "
443 ,
const int startingTab = 0
444 ,
const bool showLinePrefix =
false
445 ,
const int maxLenLinePrefix = 10
446 ,
const bool showTabCount =
false
447 ,
const bool showProcRank =
false
454 const RCP< std::basic_ostream<char_type,traits_type> > &oStream
455 ,
const std::basic_string<char_type,traits_type> &tabIndentStr =
" "
456 ,
const int startingTab = 0
457 ,
const bool showLinePrefix =
false
458 ,
const int maxLenLinePrefix = 10
459 ,
const bool showTabCount =
false
460 ,
const bool showProcRank =
false
468 const std::basic_string<char_type,traits_type> &tabIndentStr
598 const RCP< std::basic_ostream<char> >& oStream,
599 const std::basic_string<char>& tabIndentStr =
" ",
600 const int startingTab = 0,
601 const bool showLinePrefix =
false,
602 const int maxLenLinePrefix = 10,
603 const bool showTabCount =
false,
604 const bool showProcRank =
false
610 oStream,tabIndentStr,startingTab,showLinePrefix,
611 maxLenLinePrefix,showTabCount,showProcRank
652template <
typename CharT,
typename Traits = std::
char_traits<CharT> >
663 ,
const std::basic_string<CharT,Traits> linePrefix =
""
673 const RCP<std::basic_ostream<CharT,Traits> > &oStream
675 ,
const std::basic_string<CharT,Traits> linePrefix =
""
687 ,
const std::basic_string<CharT,Traits> linePrefix =
""
697 std::basic_ostream<CharT,Traits> &oStream
699 ,
const std::basic_string<CharT,Traits> linePrefix =
""
789template <
typename CharT,
typename Traits>
794 const std::basic_string<CharT,Traits> linePrefix =
""
826template <
typename CharT,
typename Traits>
829 const RCP<std::basic_ostream<CharT,Traits> > &out
831 ,
const std::basic_string<CharT,Traits> linePrefix =
""
857#define TEUCHOS_OSTAB ::Teuchos::OSTab __localThisTab = this->getOSTab()
862#define TEUCHOS_OSTAB_DIFF( DIFF ) ::Teuchos::OSTab DIFF ## __localThisTab = this->getOSTab()
874template<
typename CharT,
typename Traits>
876 const RCP<std::basic_ostream<char_type,traits_type> > &oStream
877 ,
const std::basic_string<char_type,traits_type> &tabIndentStr
878 ,
const int startingTab
879 ,
const bool showLinePrefix
880 ,
const int maxLenLinePrefix
881 ,
const bool showTabCount
882 ,
const bool showProcRank
885 this->
initialize(oStream,tabIndentStr,startingTab,showLinePrefix,
886 maxLenLinePrefix,showTabCount,showProcRank);
890template<
typename CharT,
typename Traits>
892 const RCP<std::basic_ostream<char_type,traits_type> > &oStream
893 ,
const std::basic_string<char_type,traits_type> &tabIndentStr
894 ,
const int startingTab
895 ,
const bool showLinePrefix
896 ,
const int maxLenLinePrefix
897 ,
const bool showTabCount
898 ,
const bool showProcRank
920template<
typename CharT,
typename Traits>
928template<
typename CharT,
typename Traits>
930 const std::basic_string<char_type,traits_type> &tabIndentStr
937template<
typename CharT,
typename Traits>
938const std::basic_string<CharT,Traits>&
945template<
typename CharT,
typename Traits>
952template<
typename CharT,
typename Traits>
959template<
typename CharT,
typename Traits>
967template<
typename CharT,
typename Traits>
974template<
typename CharT,
typename Traits>
981template<
typename CharT,
typename Traits>
988template<
typename CharT,
typename Traits>
995template<
typename CharT,
typename Traits>
1002template<
typename CharT,
typename Traits>
1004 const int procRank,
const int numProcs
1012template<
typename CharT,
typename Traits>
1019template<
typename CharT,
typename Traits>
1026template<
typename CharT,
typename Traits>
1050template<
typename CharT,
typename Traits>
1057template<
typename CharT,
typename Traits>
1071template<
typename CharT,
typename Traits>
1078template<
typename CharT,
typename Traits>
1086template<
typename CharT,
typename Traits>
1088 const std::basic_string<char_type,traits_type> &linePrefix
1095template<
typename CharT,
typename Traits>
1102template<
typename CharT,
typename Traits>
1103const std::basic_string<CharT,Traits>&
1110template<
typename CharT,
typename Traits>
1117template<
typename CharT,
typename Traits>
1127template<
typename CharT,
typename Traits>
1132#ifdef TEUCHOS_FANCY_OSTREAM_SHOW_ALL_CALLS
1133 std::cerr <<
"\ncalled xsputn()\n";
1140template<
typename CharT,
typename Traits>
1144#ifdef TEUCHOS_FANCY_OSTREAM_SHOW_ALL_CALLS
1145 std::cerr <<
"\ncalled overflow()\n";
1147 if(c != traits_type::eof()) {
1148 const char_type cc[] = { traits_type::to_char_type(c) };
1151 return traits_type::not_eof(c);
1159template<
typename CharT,
typename Traits>
1168template<
typename CharT,
typename Traits>
1174 std::streamsize p = 0, first_p = 0;
1175 bool done_outputting =
false;
1177 while( !done_outputting ) {
1179 for( p = first_p; p < n; ++p ) {
1180 if(s[p] == newline) {
1187 done_outputting =
true;
1189 else if( p == n-1 && s[p] == newline ) {
1191 done_outputting =
true;
1199 out().write(s+first_p,p-first_p+1);
1200 if(s[p] == newline) {
1208 if(!done_outputting)
1214template<
typename CharT,
typename Traits>
1217 bool didOutput =
false;
1218 std::ostream &o = this->
out();
1226 std::string currLinePrefix =
"";
1229 const int localMaxLenLinePrefix =
1231 o << std::left << std::setw(localMaxLenLinePrefix);
1232 o << currLinePrefix;
1238 o <<
"tabs=" << std::right << std::setw(2) <<
tabIndent_;
1259template<
typename CharT,
typename Traits>
1261 const RCP< std::basic_ostream<char_type,traits_type> > &oStream
1262 ,
const std::basic_string<char_type,traits_type> &tabIndentStr
1263 ,
const int startingTab
1264 ,
const bool showLinePrefix
1265 ,
const int maxLenLinePrefix
1266 ,
const bool showTabCount
1267 ,
const bool showProcRank
1270 streambuf_(oStream,tabIndentStr,startingTab,showLinePrefix,
1271 maxLenLinePrefix,showTabCount,showProcRank)
1277template<
typename CharT,
typename Traits>
1279 const RCP< std::basic_ostream<char_type,traits_type> > &oStream
1280 ,
const std::basic_string<char_type,traits_type> &tabIndentStr
1281 ,
const int startingTab
1282 ,
const bool showLinePrefix
1283 ,
const int maxLenLinePrefix
1284 ,
const bool showTabCount
1285 ,
const bool showProcRank
1288 streambuf_.initialize(oStream,tabIndentStr,startingTab,
1289 showLinePrefix,maxLenLinePrefix,showTabCount,showProcRank);
1294template<
typename CharT,
typename Traits>
1302template<
typename CharT,
typename Traits>
1305 const std::basic_string<char_type,traits_type> &tabIndentStr
1313template<
typename CharT,
typename Traits>
1314const std::basic_string<CharT,Traits>&
1321template<
typename CharT,
typename Traits>
1324 const bool showAllFrontMatter
1327 streambuf_.setShowLinePrefix(showAllFrontMatter);
1328 streambuf_.setShowTabCount(showAllFrontMatter);
1329 streambuf_.setShowProcRank(showAllFrontMatter);
1334template<
typename CharT,
typename Traits>
1338 streambuf_.setShowLinePrefix(showLinePrefix);
1343template<
typename CharT,
typename Traits>
1347 streambuf_.setMaxLenLinePrefix(maxLenLinePrefix);
1352template<
typename CharT,
typename Traits>
1361template<
typename CharT,
typename Traits>
1370template<
typename CharT,
typename Traits>
1374 streambuf_.setProcRankAndSize(procRank,numProcs);
1379template<
typename CharT,
typename Traits>
1388template<
typename CharT,
typename Traits>
1395template<
typename CharT,
typename Traits>
1410template<
typename CharT,
typename Traits>
1417template<
typename CharT,
typename Traits>
1424template<
typename CharT,
typename Traits>
1431template<
typename CharT,
typename Traits>
1433 const std::basic_string<char_type,traits_type> &linePrefix
1440template<
typename CharT,
typename Traits>
1447template<
typename CharT,
typename Traits>
1448const std::basic_string<CharT,Traits>&
1455template<
typename CharT,
typename Traits>
1462template<
typename CharT,
typename Traits>
#define TEUCHOS_MAX(x, y)
A MPI utilities class, providing methods for initializing, finalizing, and querying the global MPI se...
Reference-counted pointer class and non-member templated function implementations.
Definition of Teuchos::as, for conversions between types.
Smart reference counting pointer class for automatic garbage collection.
void set_extra_data(const T1 &extra_data, const std::string &name, const Ptr< ArrayRCP< T2 > > &p, EPrePostDestruction destroy_when=POST_DESTROY, bool force_unique=true)
Set extra data associated with a ArrayRCP object.
static int getRank()
The rank of the calling process in MPI_COMM_WORLD.
static int getNProc()
The number of processes in MPI_COMM_WORLD.
Ptr< T > inOutArg(T &arg)
create a non-persisting (required or optional) input/output argument for a function call.
Smart reference counting pointer class for automatic garbage collection.
RCP< T2 > rcp_dynamic_cast(const RCP< T1 > &p1, bool throw_on_fail=false)
Dynamic cast of underlying RCP type from T1* to T2*.
Stream buffering class that performs the magic of indenting data sent to an std::ostream object.
int_type overflow(int_type c)
int getNumProcs() const
Get the number of processes in the communicator.
void popTab()
Pop the current tab.
void setShowProcRank(const bool showProcRank)
void setOutputToRootOnly(const int rootRank)
Set the stream to print only on the (MPI) process with the given rank.
std::deque< string_t > linePrefixStack_t
std::basic_string< char_type, traits_type > tabIndentStr_
int getMaxLenLinePrefix() const
std::deque< int > tabIndentStack_t
RCP< std::basic_ostream< char_type, traits_type > > getOStream()
const std::basic_string< char_type, traits_type > & getTabIndentStr() const
basic_FancyOStream_buf< CharT, Traits > operator=(const basic_FancyOStream_buf< CharT, Traits > &)
void setTabIndentStr(const std::basic_string< char_type, traits_type > &tabIndentStr)
void setShowTabCount(const bool showTabCount)
int getNumCurrTabs() const
void pushLinePrefix(const std::basic_string< char_type, traits_type > &linePrefix)
std::basic_string< char_type, traits_type > string_t
void setProcRankAndSize(const int procRank, const int numProcs)
Set the (MPI) process rank and the number of processes in the communicator.
basic_FancyOStream_buf(const basic_FancyOStream_buf< CharT, Traits > &)
bool getShowProcRank() const
traits_type::pos_type pos_type
RCP< std::basic_ostream< char_type, traits_type > > oStreamSet_
void pushDisableTabbing()
int getProcRank() const
Get the rank of the calling (MPI) process.
void setMaxLenLinePrefix(const int maxLenLinePrefix)
int getOutputToRootOnly() const
void pushTab(const int tabs)
Push one or more tabs.
bool getShowLinePrefix() const
traits_type::off_type off_type
RCP< std::basic_ostream< char_type, traits_type > > oStream_
traits_type::int_type int_type
const std::basic_string< char_type, traits_type > & getTopLinePrefix() const
void initialize(const RCP< std::basic_ostream< char_type, traits_type > > &oStream, const std::basic_string< char_type, traits_type > &tabIndentStr, const int startingTab, const bool showLinePrefix, const int maxLenLinePrefix, const bool showTabCount, const bool showProcRank)
void setShowLinePrefix(const bool showLinePrefix)
bool getShowTabCount() const
linePrefixStack_t linePrefixStack_
basic_FancyOStream_buf(const RCP< std::basic_ostream< char_type, traits_type > > &oStream, const std::basic_string< char_type, traits_type > &tabIndentStr, const int startingTab, const bool showLinePrefix, const int maxLenLinePrefix, const bool showTabCount, const bool showProcRank)
RCP< std::ostringstream > lineOut_
void writeChars(const char_type s[], std::streamsize n)
std::streamsize xsputn(const char_type *s, std::streamsize n)
tabIndentStack_t tabIndentStack_
std::ostream subclass that performs the magic of indenting data sent to an std::ostream object among ...
traits_type::off_type off_type
void initialize(const RCP< std::basic_ostream< char_type, traits_type > > &oStream, const std::basic_string< char_type, traits_type > &tabIndentStr=" ", const int startingTab=0, const bool showLinePrefix=false, const int maxLenLinePrefix=10, const bool showTabCount=false, const bool showProcRank=false)
Initialize the output stream.
basic_FancyOStream & setTabIndentStr(const std::basic_string< char_type, traits_type > &tabIndentStr)
Set the tab indent string.
basic_FancyOStream & setShowAllFrontMatter(const bool showAllFrontMatter)
Control whether this stream prints "front matter.".
basic_FancyOStream & setProcRankAndSize(const int procRank, const int numProcs)
Set the (MPI) process rank and the number of processes in the communicator.
void popTab()
Pop the current tab.
basic_FancyOStream(const basic_FancyOStream< CharT, Traits > &)
traits_type::pos_type pos_type
int getNumCurrTabs() const
const std::basic_string< char_type, traits_type > & getTabIndentStr() const
Get the tab indent string.
basic_FancyOStream & setOutputToRootOnly(const int rootRank)
Set the stream to print only on the (MPI) process with the given rank.
RCP< basic_FancyOStream< CharT, Traits > > tab(const RCP< basic_FancyOStream< CharT, Traits > > &out, const int tabs=1, const std::basic_string< CharT, Traits > linePrefix="")
Create a tab for an RCP-wrapped basic_FancyOStream object to cause the indentation of all output auto...
basic_FancyOStream & setMaxLenLinePrefix(const int maxLenLinePrefix)
std::basic_ostream< char_type, traits_type > ostream_t
traits_type::int_type int_type
void pushLinePrefix(const std::basic_string< char_type, traits_type > &linePrefix)
basic_FancyOStream & setShowLinePrefix(const bool showLinePrefix)
RCP< std::basic_ostream< char_type, traits_type > > getOStream()
Get the output stream this object wraps.
basic_FancyOStream(const RCP< std::basic_ostream< char_type, traits_type > > &oStream, const std::basic_string< char_type, traits_type > &tabIndentStr=" ", const int startingTab=0, const bool showLinePrefix=false, const int maxLenLinePrefix=10, const bool showTabCount=false, const bool showProcRank=false)
Constructor.
const std::basic_string< char_type, traits_type > & getTopLinePrefix() const
basic_FancyOStream_buf< CharT, Traits > streambuf_t
void copyAllOutputOptions(const basic_FancyOStream< CharT, Traits > &oStream)
basic_FancyOStream< CharT, Traits > operator=(const basic_FancyOStream< CharT, Traits > &)
int getOutputToRootOnly() const
basic_FancyOStream & setShowTabCount(const bool showTabCount)
void pushDisableTabbing()
RCP< basic_FancyOStream< char > > fancyOStream(const RCP< std::basic_ostream< char > > &oStream, const std::basic_string< char > &tabIndentStr=" ", const int startingTab=0, const bool showLinePrefix=false, const int maxLenLinePrefix=10, const bool showTabCount=false, const bool showProcRank=false)
Dynamically allocate a FancyOStream and return it wrapped in an RCP object.
basic_FancyOStream & setShowProcRank(const bool showProcRank)
RCP< basic_FancyOStream< char > > getFancyOStream(const RCP< std::basic_ostream< char > > &out)
Get a FancyOStream from an std::ostream object.
RCP< basic_FancyOStream< CharT, Traits > > tab(const RCP< std::basic_ostream< CharT, Traits > > &out, const int tabs=1, const std::basic_string< CharT, Traits > linePrefix="")
Create a tab for an RCP-wrapped std:: std::ostream object to cause the indentation of all output auto...
void pushTab(const int tabs=1)
Push one or more tabs.
Tabbing class for helping to create formated, indented output for a basic_FancyOStream object.
RCP< basic_FancyOStream< char, std::char_traits< char > > > fancyOStream_
std::basic_string< char, std::char_traits< char > > linePrefix_
basic_FancyOStream< CharT, Traits > * get() const
basic_OSTab(std::basic_ostream< CharT, Traits > &oStream, const int tabs=1, const std::basic_string< CharT, Traits > linePrefix="")
Warning: Only call this constructor for stack-based object.
static const int DISABLE_TABBING
basic_OSTab(basic_FancyOStream< CharT, Traits > &fancyOStream, const int tabs=1, const std::basic_string< CharT, Traits > linePrefix="")
Warning: Only call this constructor for stack-based object.
basic_OSTab< CharT, Traits > & operator=(const basic_OSTab &osTab)
basic_OSTab(const RCP< basic_FancyOStream< CharT, Traits > > &fancyOStream, const int tabs=1, const std::basic_string< CharT, Traits > linePrefix="")
basic_OSTab< CharT, Traits > & incrTab(const int tabs=1)
basic_FancyOStream< CharT, Traits > & o() const
basic_OSTab(const RCP< std::basic_ostream< CharT, Traits > > &oStream, const int tabs=1, const std::basic_string< CharT, Traits > linePrefix="")
basic_OSTab(const basic_OSTab &osTab)
#define TEUCHOS_TEST_FOR_EXCEPT(throw_exception_test)
This macro is designed to be a short version of TEUCHOS_TEST_FOR_EXCEPTION() that is easier to call.
bool is_null(const std::shared_ptr< T > &p)
Returns true if p.get()==NULL.
bool nonnull(const std::shared_ptr< T > &p)
Returns true if p.get()!=NULL.
TypeTo as(const TypeFrom &t)
Convert from one value type to another.
basic_FancyOStream< char > FancyOStream
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Deprecated.
basic_OSTab< char > OSTab
basic_oblackholestream< char, std::char_traits< char > > oblackholestream