/* * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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 "Enum.h" #include "qpid/Msg.h" #include "qpid/Exception.h" #include #include #include namespace qpid { namespace ha { const std::string QPID_REPLICATE("qpid.replicate"); std::string EnumBase::str() const { assert(value < count); return names[value]; } void EnumBase::parse(const std::string& s) { if (!parseNoThrow(s)) throw Exception(QPID_MSG("Invalid " << names[count] << " value: " << s)); } bool EnumBase::parseNoThrow(const std::string& s) { const char** i = std::find(names, names+count, s); value = i - names; return value < count; } template <> const char* Enum::NAMES[] = { "none", "configuration", "all", "replication" }; template <> const size_t Enum::N = 3; template <> const char* Enum::NAMES[] = { "joining", "catchup", "ready", "recovering", "active", "standalone", "broker status" }; template <> const size_t Enum::N = 7; std::ostream& operator<<(std::ostream& o, EnumBase e) { return o << e.str(); } std::istream& operator>>(std::istream& i, EnumBase& e) { std::string s; i >> s; e.parse(s); return i; } }} // namespace qpid::ha