Esempio n. 1
0
    Node* popOpenList() {
        if (openList.isEmpty()) {
            throw MetronomeException("Open list was empty, goal not reachable.");
        }

        Node* node = openList.pop();
        node->open = false;
        return node;
    }
    static Domain getDomain(const Configuration& configuration, const std::string& resourcesDir) {
        if (configuration.hasMember(RAW_DOMAIN)) {
            std::string rawDomain{configuration.getString(RAW_DOMAIN)};
            std::stringstream stringStream{rawDomain};

            return Domain{configuration, stringStream};
        } else if (configuration.hasMember(DOMAIN_PATH)) {
            std::string domainPath{resourcesDir + configuration.getString(DOMAIN_PATH)};

            // Check if file exists
            if (!fileExists(domainPath)) {
                throw MetronomeException{"Invalid domain file path: " + domainPath};
            }

            std::fstream fileInputStream;
            fileInputStream.open(domainPath, std::fstream::in);
            Domain domain{configuration, fileInputStream};
            fileInputStream.close();

            return domain;
        } else {
            throw MetronomeException("Domain not found.");
        }
    }