A wrapper class for instance data
| 49 | |
| 50 | /// A wrapper class for instance data |
| 51 | class Spec { |
| 52 | protected: |
| 53 | /// Raw instance data |
| 54 | const int* data; |
| 55 | /// Instance name |
| 56 | const char* n; |
| 57 | /// Find instance by name \a s |
| 58 | static const int* find(const char* s) { |
| 59 | for (int i=0; name[i] != nullptr; i++) |
| 60 | if (!strcmp(s,name[i])) |
| 61 | return mbpp[i]; |
| 62 | return nullptr; |
| 63 | } |
| 64 | public: |
| 65 | /// Initialize |
| 66 | Spec(const char* s) : data(find(s)), n(s) {} |
| 67 | /// Whether a valid specification has been found |
| 68 | bool valid(void) const { |
| 69 | return data != nullptr; |
| 70 | } |
| 71 | /// Return dimension |
| 72 | int dimension(void) const { |
| 73 | return data[0]; |
| 74 | } |
| 75 | /// Return instance name |
| 76 | const char* iname(void) const { |
| 77 | return n; |
| 78 | } |
| 79 | /// Return number of items |
| 80 | int items(void) const { |
| 81 | return data[1]; |
| 82 | } |
| 83 | /// Return number of bins |
| 84 | int bins(void) const { |
| 85 | return data[2]; |
| 86 | } |
| 87 | /// Return item size for item \a i in dimension \a k |
| 88 | int size(int i, int k) const { |
| 89 | return data[3+i*dimension()+k]; |
| 90 | } |
| 91 | /// Return maximal capacity of bin \a j |
| 92 | int capacity(int j) const { |
| 93 | return data[3+items()*dimension()+j]; |
| 94 | } |
| 95 | }; |
| 96 | |
| 97 | } |
| 98 |