PLearn 0.1
|
00001 // -*- C++ -*- 00002 00003 // ConditionalDictionary.h 00004 // 00005 // Copyright (C) 2004 Hugo Larochelle Christopher Kermorvant 00006 // 00007 // Redistribution and use in source and binary forms, with or without 00008 // modification, are permitted provided that the following conditions are met: 00009 // 00010 // 1. Redistributions of source code must retain the above copyright 00011 // notice, this list of conditions and the following disclaimer. 00012 // 00013 // 2. Redistributions in binary form must reproduce the above copyright 00014 // notice, this list of conditions and the following disclaimer in the 00015 // documentation and/or other materials provided with the distribution. 00016 // 00017 // 3. The name of the authors may not be used to endorse or promote 00018 // products derived from this software without specific prior written 00019 // permission. 00020 // 00021 // THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR 00022 // IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 00023 // OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN 00024 // NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 00025 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 00026 // TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 00027 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 00028 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 00029 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 00030 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00031 // 00032 // This file is part of the PLearn library. For more information on the PLearn 00033 // library, go to the PLearn Web site at www.plearn.org 00034 00035 /* ******************************************************* 00036 * $Id: ConditionalDictionary.h 4184 2005-10-04 14:02:12Z larocheh $ 00037 ******************************************************* */ 00038 00039 // Authors: Hugo Larochelle, Christopher Kermorvant 00040 00044 #ifndef ConditionalDictionary_INC 00045 #define ConditionalDictionary_INC 00046 #include "Dictionary.h" 00047 00048 namespace PLearn { 00049 using namespace std; 00050 00069 class ConditionalDictionary: public Dictionary 00070 { 00071 00072 private: 00073 00074 typedef Dictionary inherited; 00075 00076 string tmp_str; 00077 TVec<int> tmp_sym; 00078 00079 protected: 00080 00082 map<string,Vec> options_to_symbols; 00083 00085 Vec possible_values; 00086 00087 public: 00088 00089 // ************************ 00090 // * public build options * 00091 // ************************ 00092 00094 bool options_to_lower_case; 00095 00097 string mapping_file_path; 00098 00099 // **************** 00100 // * Constructors * 00101 // **************** 00102 00104 ConditionalDictionary(); 00105 00106 // ****************** 00107 // * Object methods * 00108 // ****************** 00109 00110 private: 00112 void build_(); 00113 00114 string get_option_string(TVec<string> options); 00115 00116 protected: 00118 static void declareOptions(OptionList& ol); 00119 00120 public: 00121 // Declares other standard object methods. 00122 PLEARN_DECLARE_OBJECT(ConditionalDictionary); 00123 00124 virtual void getValues(TVec<string> options, Vec& values); 00125 00126 virtual int size(TVec<string> options=TVec<string>(0)); 00127 00128 // simply calls inherited::build() then build_() 00129 virtual void build(); 00130 00132 virtual void makeDeepCopyFromShallowCopy(CopiesMap& copies); 00133 00134 }; 00135 00136 // Declares a few other classes and functions related to this class 00137 DECLARE_OBJECT_PTR(ConditionalDictionary); 00138 00139 } // end of namespace PLearn 00140 00141 #endif 00142 00143 00144 /* 00145 Local Variables: 00146 mode:c++ 00147 c-basic-offset:4 00148 c-file-style:"stroustrup" 00149 c-file-offsets:((innamespace . 0)(inline-open . 0)) 00150 indent-tabs-mode:nil 00151 fill-column:79 00152 End: 00153 */ 00154 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=79 :