// file : build/operation -*- C++ -*- // copyright : Copyright (c) 2014-2015 Code Synthesis Tools CC // license : MIT; see accompanying LICENSE file #ifndef BUILD_OPERATION #define BUILD_OPERATION #include #include #include #include // string_table namespace build { // While we are using uint8_t for the meta/operation ids, we assume // that each is limited to 4 bits (max 128 entries) so that we can // store the combined action id in uint8_t as well. This makes our // life easier when it comes to defining switch labels for action // ids (no need to mess with endian-ness). // // Note that 0 is not a valid meta/operation/action id. // using meta_operation_id = std::uint8_t; using operation_id = std::uint8_t; using action_id = std::uint8_t; struct action { action (meta_operation_id m, operation_id o): id ((m << 4) | o) {} meta_operation_id meta_operation () const {return id >> 4;} operation_id operation () const {return id & 0xF;} // Implicit conversion operator to action_id for the switch() // statement, etc. // operator action_id () const {return id;} action_id id; }; std::ostream& operator<< (std::ostream&, action); // Id constants for build-in operations. // const meta_operation_id perform_id = 1; const meta_operation_id configure_id = 2; const meta_operation_id disfigure_id = 3; const operation_id update_id = 1; const operation_id clean_id = 2; const action_id perform_update_id = (perform_id << 4) | update_id; const action_id perform_clean_id = (perform_id << 4) | clean_id; // Meta/operation id tables. // using meta_operation_table = string_table; using operation_table = string_table; extern meta_operation_table meta_operations; extern operation_table operations; } #endif // BUILD_OPERATION