source: trunk/Alps/examples/Abc/AbcParams.h @ 277

Last change on this file since 277 was 277, checked in by andreasw, 13 years ago

first working version with autotools

File size: 6.7 KB
Line 
1/*===========================================================================*
2 * This file is part of the Abstract Library for Parallel Search (ALPS).     *
3 *                                                                           *
4 * ALPS is distributed under the Common Public License as part of the        *
5 * COIN-OR repository (http://www.coin-or.org).                              *
6 *                                                                           *
7 * Authors: Yan Xu, SAS Institute Inc.                                       *
8 *          Ted Ralphs, Lehigh University                                    *
9 *          Laszlo Ladanyi, IBM T.J. Watson Research Center                  *
10 *          Matthew Saltzman, Clemson University                             *
11 *                                                                           *
12 *                                                                           *
13 * Copyright (C) 2001-2004, International Business Machines                  *
14 * Corporation, Lehigh University, Yan Xu, Ted Ralphs, Matthew Salzman and   *
15 * others. All Rights Reserved.                                              *
16 *===========================================================================*/
17
18#ifndef AbcParams_h
19#define AbcParams_h
20
21#include "AlpsKnowledge.h"
22#include "AlpsParameterBase.h"
23
24
25//#############################################################################
26//#############################################################################
27//** Parameters used in Abc. */
28class AbcParams : public AlpsParameterSet {
29 public:
30  /** Character parameters. All of these variable are used as booleans
31      (ture = 1, false = 0). */
32  enum chrParams{
33    /// Whether generate cuts during rampup
34    cutDuringRampup,
35    //
36    endOfChrParams
37  };
38
39  /** Integer paramters. */
40  enum intParams{
41      /// The interval (number of nodes) to report current search status
42      statusInterval,
43      ///
44      logLevel,
45      //
46      endOfIntParams
47  };
48
49  /** Double parameters. */
50  enum dblParams{
51    dblDummy, 
52    //
53    endOfDblParams
54  };
55
56  /** String parameters. */
57  enum strParams{
58    strDummy,
59    //
60    endOfStrParams
61  };
62
63  /** There are no string array parameters. */
64  enum strArrayParams{
65    strArrayDummy,
66    //
67    endOfStrArrayParams
68  };
69
70 public:
71  /**@name Constructors. */
72  /*@{*/
73  /** The default constructor creates a parameter set with from the template
74      argument structure. The keyword list is created and the defaults are
75      set. */
76  AbcParams() :
77    AlpsParameterSet(
78    static_cast<int>(endOfChrParams),
79    static_cast<int>(endOfIntParams),
80    static_cast<int>(endOfDblParams),
81    static_cast<int>(endOfStrParams),
82    static_cast<int>(endOfStrArrayParams)
83    )
84    {
85      createKeywordList();
86      setDefaultEntries();
87    }
88  /*@}*/
89
90  /** Method for creating the list of keyword looked for in the parameter
91      file. */
92  virtual void createKeywordList();
93  /** Method for setting the default values for the parameters. */
94  virtual void setDefaultEntries();
95  /*@}*/
96
97
98 public:
99  //===========================================================================
100  /** For user application:
101   *   Following code are do NOT need to change.
102   *   The reason can not put following functions in base class
103   *   <CODE> AlpsParameterSet </CODE> is that <CODE> chrParams </CODE>
104   *   and <CODE> endOfChrParams </CODE> etc., are NOT the same as those
105   *   declared in base class.
106   */
107  //===========================================================================
108
109 
110  /**@name Query methods
111     
112     The members of the parameter set can be queried for using the overloaded
113     entry() method. Using the example in the class
114     documentation the user can get a parameter with the
115     "<code>param.entry(USER_par::parameter_name)</code>" expression.
116  */
117  /*@{*/
118  ///
119  inline char
120    entry(const chrParams key) const { return cpar_[key]; }
121  ///
122  inline int
123    entry(const intParams key) const { return ipar_[key]; }
124  ///
125  inline double
126    entry(const dblParams key) const { return dpar_[key]; }
127  ///
128  inline const std::string&
129    entry(const strParams key) const { return spar_[key]; }
130  ///
131  inline const std::vector<std::string>&
132    entry(const strArrayParams key) const { return sapar_[key]; }
133  /*@}*/
134
135  //---------------------------------------------------------------------------
136  /// char* is true(1) or false(0), not used
137  void setEntry(const chrParams key, const char * val) {
138    cpar_[key] = atoi(val); }
139  /// char is true(1) or false(0), not used
140  void setEntry(const chrParams key, const char val) {
141    cpar_[key] = val; }
142  /// This method is the one that ever been used.
143  void setEntry(const chrParams key, const bool val) {
144    cpar_[key] = val; }
145  ///
146  void setEntry(const intParams key, const char * val) {
147    ipar_[key] = atoi(val); }
148  ///
149  void setEntry(const intParams key, const int val) {
150    ipar_[key] = val; }
151  ///
152  void setEntry(const dblParams key, const char * val) {
153    dpar_[key] = atof(val); }
154  ///
155  void setEntry(const dblParams key, const double val) {
156    dpar_[key] = val; }
157  ///
158  void setEntry(const strParams key, const char * val) {
159    spar_[key] = val; }
160  ///
161  void setEntry(const strArrayParams key, const char *val) {
162    sapar_[key].push_back(val); }
163
164  //---------------------------------------------------------------------------
165
166  /**@name Packing/unpacking methods */
167  /*@{*/
168  /** Pack the parameter set into the buffer (AlpsEncoded is used
169      as buffer Here). */
170  void pack(AlpsEncoded& buf) {
171    buf.writeRep(cpar_, endOfChrParams)
172      .writeRep(ipar_, endOfIntParams)
173      .writeRep(dpar_, endOfDblParams);
174    for (int i = 0; i < endOfStrParams; ++i)
175      buf.writeRep(spar_[i]);
176    for (int i = 0; i < endOfStrArrayParams; ++i) {
177      buf.writeRep(sapar_[i].size());
178      for (size_t j = 0; j < sapar_[i].size(); ++j)
179        buf.writeRep(sapar_[i][j]);
180    }
181  }
182  /** Unpack the parameter set from the buffer. */
183  void unpack(AlpsEncoded& buf) {
184    int dummy;
185    // No need to allocate the arrays, they are of fixed length
186    dummy = static_cast<int>(endOfChrParams);
187    buf.readRep(cpar_, dummy, false);
188    dummy = static_cast<int>(endOfIntParams);
189    buf.readRep(ipar_, dummy, false);
190    dummy = static_cast<int>(endOfDblParams);
191    buf.readRep(dpar_, dummy, false);
192    for (int i = 0; i < endOfStrParams; ++i)
193      buf.readRep(spar_[i]);
194    for (int i = 0; i < endOfStrArrayParams; ++i) {
195      size_t str_size;
196      buf.readRep(str_size);
197      sapar_[i].reserve(str_size);
198      for (size_t j = 0; j < str_size; ++j){
199        //      sapar_[i].unchecked_push_back(std::string());
200        sapar_[i].push_back(std::string());
201        buf.readRep(sapar_[i].back());
202      }
203    }
204  }
205  /*@}*/
206
207};
208
209#endif
Note: See TracBrowser for help on using the repository browser.