351 } |
351 } |
352 |
352 |
353 // sort the array. |
353 // sort the array. |
354 bool contains(const T& x) const { return index_of(x) >= 0; } |
354 bool contains(const T& x) const { return index_of(x) >= 0; } |
355 |
355 |
356 T at(int i) const { assert(i >= 0 && i< _length, err_msg_res("oob: 0 <= %d < %d", i, _length)); return _data[i]; } |
356 T at(int i) const { assert(i >= 0 && i< _length, err_msg("oob: 0 <= %d < %d", i, _length)); return _data[i]; } |
357 void at_put(const int i, const T& x) { assert(i >= 0 && i< _length, err_msg_res("oob: 0 <= %d < %d", i, _length)); _data[i] = x; } |
357 void at_put(const int i, const T& x) { assert(i >= 0 && i< _length, err_msg("oob: 0 <= %d < %d", i, _length)); _data[i] = x; } |
358 T* adr_at(const int i) { assert(i >= 0 && i< _length, err_msg_res("oob: 0 <= %d < %d", i, _length)); return &_data[i]; } |
358 T* adr_at(const int i) { assert(i >= 0 && i< _length, err_msg("oob: 0 <= %d < %d", i, _length)); return &_data[i]; } |
359 int find(const T& x) { return index_of(x); } |
359 int find(const T& x) { return index_of(x); } |
360 |
360 |
361 T at_acquire(const int which) { return OrderAccess::load_acquire(adr_at(which)); } |
361 T at_acquire(const int which) { return OrderAccess::load_acquire(adr_at(which)); } |
362 void release_at_put(int which, T contents) { OrderAccess::release_store(adr_at(which), contents); } |
362 void release_at_put(int which, T contents) { OrderAccess::release_store(adr_at(which), contents); } |
363 |
363 |