I am trying to verify if a string (string_view) is one of the “allowed” combinations.
String is always 3 characters.
Currently thinking about something like this:
constexpr uint32_t s2u(std::string_view s){
using T = uint32_t;
return
(T(s[0]) << 8 * 0) |
(T(s[1]) << 8 * 1) |
(T(s[2]) << 8 * 2) ;
}
bool validate(std::string_view s){
if (s.size() != 3)
return false;
switch( s2u(s) ){
case s2u("abc") : case s2u("ABC") :
case s2u("acb") : case s2u("ACB") :
case s2u("bac") : case s2u("BAC") :
case s2u("bca") : case s2u("BCA") :
case s2u("cab") : case s2u("CAB") :
case s2u("cba") : case s2u("CBA") : return true;
default:
return false;
}
}
Is there faster way to do it?
C solutions are welcome too.