PLearn 0.1
ObjectGenerator.cc
Go to the documentation of this file.
00001 // -*- C++ -*-
00002 
00003 // ObjectGenerator.cc
00004 // Copyright (C) 2004 Rejean Ducharme
00005 //
00006 // Redistribution and use in source and binary forms, with or without
00007 // modification, are permitted provided that the following conditions are met:
00008 // 
00009 //  1. Redistributions of source code must retain the above copyright
00010 //     notice, this list of conditions and the following disclaimer.
00011 // 
00012 //  2. Redistributions in binary form must reproduce the above copyright
00013 //     notice, this list of conditions and the following disclaimer in the
00014 //     documentation and/or other materials provided with the distribution.
00015 // 
00016 //  3. The name of the authors may not be used to endorse or promote
00017 //     products derived from this software without specific prior written
00018 //     permission.
00019 // 
00020 // THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
00021 // IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
00022 // OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
00023 // NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
00024 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
00025 // TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00026 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
00027 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00028 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00029 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00030 // 
00031 // This file is part of the PLearn library. For more information on the PLearn
00032 // library, go to the PLearn Web site at www.plearn.org
00033 
00034 /* *******************************************************      
00035  * $Id: ObjectGenerator.cc 3994 2005-08-25 13:35:03Z chapados $
00036  ******************************************************* */
00037 
00038 #include "ObjectGenerator.h"
00039 
00040 namespace PLearn {
00041 using namespace std;
00042 
00043 PLEARN_IMPLEMENT_ABSTRACT_OBJECT(ObjectGenerator,
00044                                  "ObjectGenerator is the base class for implementing object-generation techniques.",
00045                                  "The OptionGenerator takes a template Object, and from a list of options,\n"
00046                                  "it will generate another Object (or a complete list).\n");
00047 
00048 ObjectGenerator::ObjectGenerator() : generation_began(false)
00049 {}
00050 
00051 void ObjectGenerator::build_()
00052 {
00053     if (template_object.isNull())
00054         PLERROR("An ObjectGenerator MUST contain a template Object");
00055 }
00056 
00057 void ObjectGenerator::build()
00058 {
00059     inherited::build();
00060     build_();
00061 }
00062 
00063 void ObjectGenerator::forget()
00064 {
00065     generation_began = false;
00066 }
00067 
00068 void ObjectGenerator::declareOptions(OptionList& ol)
00069 {
00070     declareOption(ol, "template_object", &ObjectGenerator::template_object,
00071                   OptionBase::buildoption, "The template Object from which all the others will be built. \n");
00072 
00073     inherited::declareOptions(ol);
00074 }
00075 
00076 TVec< PP<Object> > ObjectGenerator::generateAllObjects()
00077 {
00078     TVec< PP<Object> > all_objs;
00079 
00080     forget();
00081     while (true)
00082     {
00083         PP<Object> next_obj = generateNextObject();
00084         if (next_obj.isNull()) break; // no new Object
00085         all_objs.append(next_obj);
00086     }
00087     generation_began = true;
00088 
00089     return all_objs;
00090 }
00091 
00092 } // end of namespace PLearn
00093 
00094 
00095 /*
00096   Local Variables:
00097   mode:c++
00098   c-basic-offset:4
00099   c-file-style:"stroustrup"
00100   c-file-offsets:((innamespace . 0)(inline-open . 0))
00101   indent-tabs-mode:nil
00102   fill-column:79
00103   End:
00104 */
00105 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=79 :
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines