/* * This file is a part of EZC -- Easy templating in C++ * and is distributed under the (new) BSD licence. * Author: Tomasz Sowa */ /* * Copyright (c) 2007-2012, Tomasz Sowa * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * * Neither the name Tomasz Sowa nor the names of contributors to this * project may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF * THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef headerfile_ezc_funinfo #define headerfile_ezc_funinfo #include namespace Ezc { struct FunData { FunData() { } virtual ~FunData() { } }; template struct FunInfo { // output stream StreamType & out; // the out stream is treated in case sensitive // used only in [is...] statements // default: true bool case_sensitive; // table of parameters // the table can be empty std::vector & params; // the first parameter // you can always use it even if there is not any parameters (params is empty) // in such a way the reference points to an empty string const std::wstring & par; // an input stream used in [filter] statement // if there is other statement than [filter] then this is an empty stream const StreamType & in; // indicates that this function is from [for ...] statement bool is_for; // indicates that this function is from [if ...] statement // is true for all kind of if's: if-one, if-any, if-no.... bool is_if; // indicates that this function is from [is ...] or [is-no ...] statements bool is_is; // indicates that this funcion is a normal statement e.g.: [funcion_name] bool is_normal; // indicates that this function is from a filter statement [filter ...] bool is_filter; // a pointer to FunData struct // !! IMPROVE ME // !! give some info here // can be null FunData * fun_data; FunData * last_fun_data; bool remove_fun_data; // this is set by Generator // it indicates the number of a current iteration for the [for] statement (the first iteration is 0) // if there was not any [for] before the value is zero // for other statements than [for] this is always zero size_t iter; // this is set by Generator // it indicates the number of a previous [for] iteration // if there was not any [for] before the value is zero // for a [for] it returns not the current iterator but a value from a previous [for] size_t last_iter; // return value from a user function (default false if not set directly by the user function) // for a variable it is set to true if the variable is not empty bool res; // arguments: output_stream, table_of_parameters, the_first_parameter FunInfo(StreamType & o, std::vector & pars, const std::wstring & first_par, const StreamType & i) : out(o), params(pars), par(first_par), in(i) { Clear(); } void Clear() { res = false; // result is false by default is_for = false; is_if = false; is_is = false; is_normal = false; is_filter = false; iter = 0; last_iter = 0; case_sensitive = true; remove_fun_data = true; fun_data = 0; last_fun_data = 0; } }; } // namespace Ezc #endif