1 #ifndef WARPCORE_STATUS_CUH
2 #define WARPCORE_STATUS_CUH
10 template<status_base_t Ignore>
25 "unsupported base type");
195 template<
class Group>
207 static constexpr base_type mask = 0xFFF;
216 template<
class OStream>
217 OStream& operator<<(OStream& os,
Status status)
219 std::vector<std::string> msg;
221 if(status.has_duplicate_key())
222 msg.push_back(
"duplicate key");
223 if(status.has_unknown_error())
224 msg.push_back(
"unknown error");
225 if(status.has_probing_length_exceeded())
226 msg.push_back(
"probing length exceeded");
227 if(status.has_invalid_configuration())
228 msg.push_back(
"invalid configuration");
229 if(status.has_invalid_key())
230 msg.push_back(
"invalid key");
231 if(status.has_key_not_found())
232 msg.push_back(
"key not found");
233 if(status.has_index_overflow())
234 msg.push_back(
"index overflow");
235 if(status.has_out_of_memory())
236 msg.push_back(
"out of memory");
237 if(status.has_not_initialized())
238 msg.push_back(
"not initialized");
239 if(status.has_dry_run())
240 msg.push_back(
"dry run");
241 if(status.has_invalid_phase_overlap())
242 msg.push_back(
"invalid phase overlap");
243 if(status.has_max_values_for_key_reached())
244 msg.push_back(
"max values for key reached");
245 if(status.has_invalid_value())
246 msg.push_back(
"invalid value");
252 case 0: os <<
"[]";
break;
253 case 1: os <<
"[" << msg[0] <<
"]";
break;
258 while(i < msg.size() - 1)
260 os << msg[i] <<
", ";
281 using base_type =
void;
284 DEVICEQUALIFIER INLINEQUALIFIER
302 DEVICEQUALIFIER INLINEQUALIFIER
316 template<Status::base_type Ignore =
Status::
none()>
320 using base_type =
bool;
323 DEVICEQUALIFIER INLINEQUALIFIER