// file : libbuild2/target-state.hxx -*- C++ -*- // license : MIT; see accompanying LICENSE file #ifndef LIBBUILD2_TARGET_STATE_HXX #define LIBBUILD2_TARGET_STATE_HXX #include #include #include namespace build2 { // The order of the enumerators is arranged so that their integral values // indicate whether one "overrides" the other in the "merge" operator| // (see below). // // Note that postponed is "greater" than unchanged since it may result in // the changed state. // // Note also that value 0 is available to indicate absent/invalid state. // // NOTE: don't forget to also update operator<<(ostream,target_state) if // changing anything here. // enum class target_state: uint8_t { uninitialized = 0, unknown, unchanged, postponed, busy, changed, failed, group // Target's state is the group's state. }; inline target_state& operator |= (target_state& l, target_state r) { if (static_cast (r) > static_cast (l)) l = r; return l; } LIBBUILD2_SYMEXPORT string to_string (target_state); // target.cxx inline ostream& operator<< (ostream& o, target_state ts) { return o << to_string (ts); } } #endif // LIBBUILD2_TARGET_STATE_HXX