00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00046
#ifndef OptionBase_INC
00047
#define OptionBase_INC
00048
00049
#include <plearn/io/pl_io.h>
00050
#include "PP.h"
00051
#include <plearn/io/PStream.h>
00052
#include <plearn/io/PStream_util.h>
00053
#include <vector>
00054
00055
namespace PLearn {
00056
using namespace std;
00057
00058
00059
class Object;
00060
00062 class OptionBase:
public PPointable
00063 {
00064
public:
00065 typedef unsigned int flag_t;
00066
00069
static const flag_t buildoption;
00070
00073
static const flag_t learntoption;
00074
00076
static const flag_t tuningoption;
00077
00079
static const flag_t nosave;
00080
00081
protected:
00082 string optionname_;
00083 flag_t flags_;
00084 string optiontype_;
00085 string defaultval_;
00086 string description_;
00087
00088
public:
00089
00092 OptionBase(
const string& optionname, flag_t flags,
00093
const string& optiontype,
const string& defaultval,
00094
const string& description)
00095 :
optionname_(optionname),
flags_(flags),
00096
optiontype_(optiontype),
defaultval_(defaultval),
00097
description_(description) {}
00098
00099
virtual void read(
Object* o,
PStream& in)
const = 0;
00100
00102
virtual bool shouldBeSkipped() const;
00103
00104 virtual
void read_and_discard(
PStream& in) const = 0;
00105 virtual
void write(const
Object* o,
PStream& out) const = 0;
00106
00107
00108
00109
string writeIntoString(const
Object* o) const;
00110
00111 virtual
Object* getAsObject(
Object* o) const = 0;
00112 virtual const
Object* getAsObject(const
Object* o) const = 0;
00113 virtual
Object *getIndexedObject(
Object *o,
int i) const = 0;
00114 virtual const
Object *getIndexedObject(const
Object *o,
int i) const = 0;
00115
00117 virtual
string optionHolderClassName(const
Object* o) const = 0;
00118
00120 inline const
string& optionname()
const {
return optionname_; }
00121 inline bool isOptionNamed(
string name)
const {
return name ==
optionname(); }
00122
00123 inline const string&
optiontype()
const {
return optiontype_; }
00124 inline const string&
defaultval()
const {
return defaultval_; }
00125 inline const string&
description()
const {
return description_; }
00126 inline flag_t flags()
const {
return flags_; }
00127
00129 inline void setDefaultVal(
const string& newdefaultval)
00130 {
defaultval_ = newdefaultval; }
00131 };
00132
00133 typedef vector< PP<OptionBase> >
OptionList;
00134
00135
00136
00137 }
00138
00139
#endif