1 // -*- mode: C++ -*- 2 // 3 // Copyright (c) 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 CREST_EXTENSION_H 31 #define CREST_EXTENSION_H 32 33 #include <vector> 34 #include <ostream> 35 #include <string> 36 #include "AbsExtension.h" 37 #include "CVQualifiers.h" 38 39 class ExtensionValue; 40 41 class CrestExtension : public AbsExtension { 42 friend class ExtensionMgr; 43 public: 44 virtual void GenerateValues(); 45 46 virtual void OutputInit(std::ostream &out); 47 48 virtual void OutputFirstFunInvocation(std::ostream &out, FunctionInvocation *invoke); 49 50 virtual void OutputHeader(std::ostream &out); 51 52 virtual void OutputTail(std::ostream &out); 53 get_values()54 virtual std::vector<ExtensionValue *> &get_values() { return values_; } 55 56 private: 57 58 static std::string input_base_name_; 59 60 std::string type_to_string(const Type *t); 61 62 void output_symbolics(std::ostream &out); 63 64 std::vector<ExtensionValue*> values_; 65 66 CrestExtension(); 67 68 ~CrestExtension(); 69 }; 70 71 #endif // CREST_EXTENSION_H 72