1 // -*- mode: C++ -*- 2 // 3 // Copyright (c) 2007, 2008, 2009, 2010, 2011 The University of Utah 4 // All rights reserved. 5 // 6 // This file is part of `csmith', a random generator of C programs. 7 // 8 // Redistribution and use in source and binary forms, with or without 9 // modification, are permitted provided that the following conditions are met: 10 // 11 // * Redistributions of source code must retain the above copyright notice, 12 // this list of conditions and the following disclaimer. 13 // 14 // * Redistributions in binary form must reproduce the above copyright 15 // notice, this list of conditions and the following disclaimer in the 16 // documentation and/or other materials provided with the distribution. 17 // 18 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21 // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 22 // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28 // POSSIBILITY OF SUCH DAMAGE. 29 30 #ifndef DEFAULT_OUTPUT_MGR_H 31 #define DEFAULT_OUTPUT_MGR_H 32 33 #include <vector> 34 #include <string> 35 #include <ostream> 36 #include <fstream> 37 #include "OutputMgr.h" 38 39 using namespace std; 40 41 class DefaultOutputMgr : public OutputMgr { 42 public: 43 static DefaultOutputMgr *CreateInstance(); 44 45 virtual ~DefaultOutputMgr(); 46 47 static bool create_output_dir(std::string dir); 48 49 virtual void OutputHeader(int argc, char *argv[], unsigned long seed); 50 51 virtual void Output(); 52 53 virtual void outputln(ostream &out); 54 55 virtual void output_comment_line(ostream &out, const std::string &comment); 56 57 virtual void output_tab(ostream &out, int indent); 58 59 private: 60 explicit DefaultOutputMgr(std::ofstream *ofile); 61 62 DefaultOutputMgr(); 63 64 virtual std::ostream &get_main_out(); 65 66 bool is_split(); 67 68 std::ofstream* open_one_output_file(int num); 69 70 void init(); 71 72 void OutputGlobals(); 73 74 void OutputAllHeaders(); 75 76 void RandomOutputDefs(); 77 78 void RandomOutputVarDefs(); 79 80 void RandomOutputFuncDefs(); 81 82 static DefaultOutputMgr *instance_; 83 84 std::vector<std::ofstream* > outs; 85 86 std::ofstream *ofile_; 87 }; 88 89 #endif // DEFAULT_OUTPUT_MGR_H 90