/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. * Use of this file is governed by the BSD 3-clause license that * can be found in the LICENSE.txt file in the project root. */ #pragma once #include "antlr4-common.h" namespace antlrcpp { class ANTLR4CPP_PUBLIC Arrays { public: static std::string listToString(const std::vector &list, const std::string &separator); template static bool equals(const std::vector &a, const std::vector &b) { if (a.size() != b.size()) return false; for (size_t i = 0; i < a.size(); ++i) if (!(a[i] == b[i])) return false; return true; } template static bool equals(const std::vector &a, const std::vector &b) { if (a.size() != b.size()) return false; for (size_t i = 0; i < a.size(); ++i) { if (a[i] == b[i]) continue; if (!(*a[i] == *b[i])) return false; } return true; } template static bool equals(const std::vector> &a, const std::vector> &b) { if (a.size() != b.size()) return false; for (size_t i = 0; i < a.size(); ++i) { if (!a[i] && !b[i]) continue; if (!a[i] || !b[i]) return false; if (a[i] == b[i]) continue; if (!(*a[i] == *b[i])) return false; } return true; } template static std::string toString(const std::vector &source) { std::string result = "["; bool firstEntry = true; for (auto &value : source) { result += value.toString(); if (firstEntry) { result += ", "; firstEntry = false; } } return result + "]"; } template static std::string toString(const std::vector> &source) { std::string result = "["; bool firstEntry = true; for (auto &value : source) { result += value->toString(); if (firstEntry) { result += ", "; firstEntry = false; } } return result + "]"; } template static std::string toString(const std::vector &source) { std::string result = "["; bool firstEntry = true; for (auto value : source) { result += value->toString(); if (firstEntry) { result += ", "; firstEntry = false; } } return result + "]"; } }; template <> std::string Arrays::toString(const std::vector &source); }