?? varconfig.h
字號:
#ifndef VARCONFIG_H#define VARCONFIG_H#include "VarSet.h"#include "VarSchema.h"#include <list>class VarConfig : public VarSet{ list<int> queryVars; VarSchema schema; int maxConfig; double maxConfigDouble;public: VarConfig(const list<int>& vars, const VarSchema& s) : VarSet(s.getNumVars()), queryVars(vars), schema(s), maxConfig(1), maxConfigDouble(1.0) { for (int var = 0; var < schema.getNumVars(); var++) { (*this)[var] = VarSet::UNTESTED; } list<int>::const_iterator i; for (i = queryVars.begin(); i != queryVars.end(); i++) { if (schema.getRange(*i) > 0) { maxConfig *= schema.getRange(*i); maxConfigDouble *= schema.getRange(*i); } (*this)[*i] = 0; } maxConfig--; maxConfigDouble--; } VarConfig(const VarSet& query, const list<int>& vars, const VarSchema& s) : VarSet(query), queryVars(vars), schema(s), maxConfig(1), maxConfigDouble(1.0) { list<int>::const_iterator i; for (i = queryVars.begin(); i != queryVars.end(); i++) { if (schema.getRange(*i) > 0) { maxConfig *= schema.getRange(*i); maxConfigDouble *= schema.getRange(*i); } } maxConfig--; maxConfigDouble--; } // Copy constructor VarConfig(const VarConfig& other) : VarSet(other), queryVars(other.queryVars), schema(other.schema), maxConfig(other.maxConfig) { /* NOP */ } int getIndex() const { int configNum = 0; list<int>::const_iterator i; for (i = queryVars.begin(); i != queryVars.end(); i++) { if (schema.getRange(*i) > 0) { configNum *= schema.getRange(*i); configNum += (int)(*this)[*i]; } } return configNum; } int getMaxIndex() { return maxConfig; } double getMaxIndexDouble() { return maxConfigDouble; } operator int() const { return getIndex(); } VarConfig& operator++() { list<int>::reverse_iterator i; for (i = queryVars.rbegin(); i != queryVars.rend(); i++) { if (schema.getRange(*i) < 0) { continue; } (*this)[*i]++; if ((*this)[*i] >= schema.getRange(*i)) { (*this)[*i] = 0; } else { break; } } return *this; } VarConfig operator++(int) { VarConfig orig = *this; ++(*this); return orig; } VarConfig& operator--() { list<int>::reverse_iterator i; for (i = queryVars.rbegin(); i != queryVars.rend(); i++) { if (schema.getRange(*i) < 0) { continue; } (*this)[*i]--; if ((*this)[*i] < 0) { (*this)[*i] = schema.getRange(*i) - 1; } else { break; } } return *this; } VarConfig operator--(int) { VarConfig orig = *this; --(*this); return orig; } // NOTE: does this work? Does operator= of the superclass work? VarConfig& operator=(const VarConfig& other) { schema = other.schema; queryVars = other.queryVars; return (*this); }};#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -