1*11c03c6dSDamjan Jovanovic /************************************************************** 2*11c03c6dSDamjan Jovanovic * 3*11c03c6dSDamjan Jovanovic * Licensed to the Apache Software Foundation (ASF) under one 4*11c03c6dSDamjan Jovanovic * or more contributor license agreements. See the NOTICE file 5*11c03c6dSDamjan Jovanovic * distributed with this work for additional information 6*11c03c6dSDamjan Jovanovic * regarding copyright ownership. The ASF licenses this file 7*11c03c6dSDamjan Jovanovic * to you under the Apache License, Version 2.0 (the 8*11c03c6dSDamjan Jovanovic * "License"); you may not use this file except in compliance 9*11c03c6dSDamjan Jovanovic * with the License. You may obtain a copy of the License at 10*11c03c6dSDamjan Jovanovic * 11*11c03c6dSDamjan Jovanovic * http://www.apache.org/licenses/LICENSE-2.0 12*11c03c6dSDamjan Jovanovic * 13*11c03c6dSDamjan Jovanovic * Unless required by applicable law or agreed to in writing, 14*11c03c6dSDamjan Jovanovic * software distributed under the License is distributed on an 15*11c03c6dSDamjan Jovanovic * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*11c03c6dSDamjan Jovanovic * KIND, either express or implied. See the License for the 17*11c03c6dSDamjan Jovanovic * specific language governing permissions and limitations 18*11c03c6dSDamjan Jovanovic * under the License. 19*11c03c6dSDamjan Jovanovic * 20*11c03c6dSDamjan Jovanovic *************************************************************/ 21*11c03c6dSDamjan Jovanovic 22*11c03c6dSDamjan Jovanovic 23*11c03c6dSDamjan Jovanovic 24*11c03c6dSDamjan Jovanovic #ifndef CSV_STD_OUTP_HXX 25*11c03c6dSDamjan Jovanovic #define CSV_STD_OUTP_HXX 26*11c03c6dSDamjan Jovanovic 27*11c03c6dSDamjan Jovanovic // USED SERVICES 28*11c03c6dSDamjan Jovanovic // BASE CLASSES 29*11c03c6dSDamjan Jovanovic // COMPONENTS 30*11c03c6dSDamjan Jovanovic #include <cosv/csv_ostream.hxx> 31*11c03c6dSDamjan Jovanovic // PARAMETERS 32*11c03c6dSDamjan Jovanovic 33*11c03c6dSDamjan Jovanovic 34*11c03c6dSDamjan Jovanovic 35*11c03c6dSDamjan Jovanovic 36*11c03c6dSDamjan Jovanovic namespace csv 37*11c03c6dSDamjan Jovanovic { 38*11c03c6dSDamjan Jovanovic 39*11c03c6dSDamjan Jovanovic #ifdef CSV_NO_IOSTREAMS 40*11c03c6dSDamjan Jovanovic class redirect_out : public ostream 41*11c03c6dSDamjan Jovanovic { 42*11c03c6dSDamjan Jovanovic public: 43*11c03c6dSDamjan Jovanovic virtual ~redirect_out() {} 44*11c03c6dSDamjan Jovanovic 45*11c03c6dSDamjan Jovanovic void re_endl() { do_re_endl(); } 46*11c03c6dSDamjan Jovanovic void re_flush() { do_re_flush(); } 47*11c03c6dSDamjan Jovanovic 48*11c03c6dSDamjan Jovanovic static void set_( 49*11c03c6dSDamjan Jovanovic redirect_out & o_rStdOut, 50*11c03c6dSDamjan Jovanovic redirect_out & o_rStdErr ) 51*11c03c6dSDamjan Jovanovic { pStdOut_ = &o_rStdOut; 52*11c03c6dSDamjan Jovanovic pStdErr_ = &o_rStdErr; } 53*11c03c6dSDamjan Jovanovic 54*11c03c6dSDamjan Jovanovic static redirect_out & 55*11c03c6dSDamjan Jovanovic std_() { return *pStdOut_; } 56*11c03c6dSDamjan Jovanovic static redirect_out & 57*11c03c6dSDamjan Jovanovic err_() { return *pStdErr_; } 58*11c03c6dSDamjan Jovanovic static bool useme_() { return pStdOut_ != 0; } 59*11c03c6dSDamjan Jovanovic 60*11c03c6dSDamjan Jovanovic private: 61*11c03c6dSDamjan Jovanovic virtual void do_re_endl() = 0; 62*11c03c6dSDamjan Jovanovic virtual void do_re_flush() = 0; 63*11c03c6dSDamjan Jovanovic 64*11c03c6dSDamjan Jovanovic // DATA 65*11c03c6dSDamjan Jovanovic static redirect_out * 66*11c03c6dSDamjan Jovanovic pStdOut_; 67*11c03c6dSDamjan Jovanovic static redirect_out * 68*11c03c6dSDamjan Jovanovic pStdErr_; 69*11c03c6dSDamjan Jovanovic }; 70*11c03c6dSDamjan Jovanovic #endif // defined(CSV_NO_IOSTREAMS) 71*11c03c6dSDamjan Jovanovic 72*11c03c6dSDamjan Jovanovic 73*11c03c6dSDamjan Jovanovic inline ostream & 74*11c03c6dSDamjan Jovanovic Cout() 75*11c03c6dSDamjan Jovanovic { 76*11c03c6dSDamjan Jovanovic 77*11c03c6dSDamjan Jovanovic #ifndef CSV_NO_IOSTREAMS 78*11c03c6dSDamjan Jovanovic // return redirect_out::useme_() 79*11c03c6dSDamjan Jovanovic // ? (ostream&)( redirect_out::std_() ) 80*11c03c6dSDamjan Jovanovic // : (ostream&)( std::cout ); 81*11c03c6dSDamjan Jovanovic return (ostream&)( std::cout ); 82*11c03c6dSDamjan Jovanovic #else 83*11c03c6dSDamjan Jovanovic csv_assert( redirect_out::useme_() ); 84*11c03c6dSDamjan Jovanovic return redirect_out::std_(); 85*11c03c6dSDamjan Jovanovic #endif 86*11c03c6dSDamjan Jovanovic } 87*11c03c6dSDamjan Jovanovic 88*11c03c6dSDamjan Jovanovic inline ostream & 89*11c03c6dSDamjan Jovanovic Cerr() 90*11c03c6dSDamjan Jovanovic { 91*11c03c6dSDamjan Jovanovic #ifndef CSV_NO_IOSTREAMS 92*11c03c6dSDamjan Jovanovic // return redirect_out::useme_() 93*11c03c6dSDamjan Jovanovic // ? (ostream&)( redirect_out::err_() ) 94*11c03c6dSDamjan Jovanovic // : (ostream&)( std::cerr ); 95*11c03c6dSDamjan Jovanovic return (ostream&)( std::cerr ); 96*11c03c6dSDamjan Jovanovic #else 97*11c03c6dSDamjan Jovanovic csv_assert( redirect_out::useme_() ); 98*11c03c6dSDamjan Jovanovic return redirect_out::err_(); 99*11c03c6dSDamjan Jovanovic #endif 100*11c03c6dSDamjan Jovanovic } 101*11c03c6dSDamjan Jovanovic 102*11c03c6dSDamjan Jovanovic 103*11c03c6dSDamjan Jovanovic 104*11c03c6dSDamjan Jovanovic typedef void (*F_FLUSHING_FUNC)(ostream&, bool, int*); 105*11c03c6dSDamjan Jovanovic 106*11c03c6dSDamjan Jovanovic void Endl( ostream&, bool, int* ); 107*11c03c6dSDamjan Jovanovic 108*11c03c6dSDamjan Jovanovic void Flush( ostream&, bool, int* ); 109*11c03c6dSDamjan Jovanovic 110*11c03c6dSDamjan Jovanovic 111*11c03c6dSDamjan Jovanovic } // namespace csv 112*11c03c6dSDamjan Jovanovic 113*11c03c6dSDamjan Jovanovic 114*11c03c6dSDamjan Jovanovic 115*11c03c6dSDamjan Jovanovic inline csv::ostream & 116*11c03c6dSDamjan Jovanovic operator<<( csv::ostream & io_rStream, 117*11c03c6dSDamjan Jovanovic csv::F_FLUSHING_FUNC i_fFlushingFunc ) 118*11c03c6dSDamjan Jovanovic { 119*11c03c6dSDamjan Jovanovic #ifndef CSV_NO_IOSTREAMS 120*11c03c6dSDamjan Jovanovic // (*i_fFlushingFunc)( io_rStream, csv::redirect_out::useme_(), 0 ); 121*11c03c6dSDamjan Jovanovic (*i_fFlushingFunc)( io_rStream, false, 0 ); 122*11c03c6dSDamjan Jovanovic #else 123*11c03c6dSDamjan Jovanovic csv_assert( csv::redirect_out::useme_() ); 124*11c03c6dSDamjan Jovanovic (*i_fFlushingFunc)( io_rStream, true, 0 ); 125*11c03c6dSDamjan Jovanovic #endif 126*11c03c6dSDamjan Jovanovic return io_rStream; 127*11c03c6dSDamjan Jovanovic } 128*11c03c6dSDamjan Jovanovic 129*11c03c6dSDamjan Jovanovic 130*11c03c6dSDamjan Jovanovic #endif 131*11c03c6dSDamjan Jovanovic 132*11c03c6dSDamjan Jovanovic 133