49 if (
id == cmd_iter->id) {
50 return cmd_iter.get();
60 if (cmd_iter.get() == cmd) {
76 bool is_duplicate =
false;
78 std::cerr <<
"warning: registered duplicate command \"" << cmd->id
79 <<
"\", this will be inaccessible" << std::endl;
80 cmd_exists->is_duplicate =
true;
83 cmd->is_duplicate = is_duplicate;
90 if (cmd_index == -1) {
91 std::cerr <<
"failed to unregister command handler" << std::endl;
100 if (cmd == cmd_iter.get()) {
103 if (cmd_iter->is_duplicate && (cmd_iter->id == cmd->
id)) {
109 cmd_other = cmd_iter.get();
125 if (cmd ==
nullptr) {
126 std::cerr <<
"Unrecognized command: \"" <<
id <<
"\"" << std::endl;
130 std::cerr <<
"Command: \"" <<
id
131 <<
"\" was registered multiple times, must be resolved, aborting!" << std::endl;
135 return cmd->
exec(C, argc, argv);
146 for (
int pass = 0; pass < 2; pass++) {
147 std::cout << ((pass == 0) ?
"Blender Command Listing:" :
148 "Duplicate Command Listing (ignored):")
151 const bool is_duplicate = pass > 0;
153 bool has_duplicate =
false;
155 if (cmd_iter->is_duplicate) {
156 has_duplicate =
true;
158 if (cmd_iter->is_duplicate != is_duplicate) {
162 std::cout <<
"\t" << cmd_iter->id << std::endl;
167 std::cout <<
"\tNone found" << std::endl;
170 if (pass == 0 && !has_duplicate) {
Blender CLI Generic --command Support.
Read Guarded memory(de)allocation.
blender::Vector< CommandHandlerPtr > g_command_handlers
int BKE_blender_cli_command_exec(bContext *C, const char *id, const int argc, const char **argv)
std::unique_ptr< CommandHandler > CommandHandlerPtr
void BKE_blender_cli_command_print_help()
static CommandHandler * blender_cli_command_lookup(const std::string &id)
void BKE_blender_cli_command_free_all()
bool BKE_blender_cli_command_unregister(CommandHandler *cmd)
void BKE_blender_cli_command_register(std::unique_ptr< CommandHandler > cmd)
static int blender_cli_command_index(const CommandHandler *cmd)
virtual int exec(struct bContext *C, int argc, const char **argv)=0
local_group_size(16, 16) .push_constant(Type b