C++程序  |  75行  |  2.54 KB

/*
 * Copyright (C) 2014 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include "utils/command_utils.h"

#include <cstdio>

#include "command_executors/diff_executor.h"
#include "command_executors/header_executor.h"
#include "command_executors/help_executor.h"
#include "command_executors/info_executor.h"
#include "command_executors/makedict_executor.h"

namespace latinime {
namespace dicttoolkit {

/* static */ CommandType CommandUtils::getCommandType(const std::string &commandName) {
    if (commandName == InfoExecutor::COMMAND_NAME) {
        return CommandType::Info;
    } else if (commandName == DiffExecutor::COMMAND_NAME) {
        return CommandType::Diff;
    } else if (commandName == MakedictExecutor::COMMAND_NAME) {
        return CommandType::Makedict;
    } else if (commandName == HeaderExecutor::COMMAND_NAME) {
        return CommandType::Header;
    } else if (commandName == HelpExecutor::COMMAND_NAME) {
        return CommandType::Help;
    } else {
        return CommandType::Unknown;
    }
}

/* static */ void CommandUtils::printCommandUnknownMessage(const std::string &programName,
        const std::string &commandName) {
    fprintf(stderr, "Command '%s' is unknown. Try '%s %s' for more information.\n",
            commandName.c_str(), programName.c_str(), HelpExecutor::COMMAND_NAME);
}

/* static */ std::function<int(int, char **)> CommandUtils::getCommandExecutor(
        const CommandType commandType) {
    switch (commandType) {
        case CommandType::Info:
            return InfoExecutor::run;
        case CommandType::Diff:
            return DiffExecutor::run;
        case CommandType::Makedict:
            return MakedictExecutor::run;
        case CommandType::Header:
            return HeaderExecutor::run;
        case CommandType::Help:
            return HelpExecutor::run;
        default:
            return [] (int, char **) -> int {
                printf("Command executor not found.");
                return 1;
            };
    }
}

} // namespace dicttoolkit
} // namespace latinime