| /** |
| * 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. |
| */ |
| |
| #ifndef __MESOS_TYPE_UTILS_H__ |
| #define __MESOS_TYPE_UTILS_H__ |
| |
| #include <boost/functional/hash.hpp> |
| |
| #include <mesos/mesos.hpp> |
| |
| #include <mesos/module/module.hpp> |
| |
| #include <stout/uuid.hpp> |
| |
| // This file includes definitions for operators on public protobuf |
| // classes (defined in mesos.proto, module.proto, etc.) that don't |
| // have these operators generated by the protobuf compiler. The |
| // corresponding definitions are in src/common/type_utils.cpp. |
| // |
| // Mesos modules need some of the protobuf classes defined in |
| // mesos.proto, module.proto, etc., and require some of these |
| // operators declared in type_utils.hpp. Exposing type_utils.hpp |
| // allows us to build modules without having a dependency on mesos |
| // source tree (src/*). |
| |
| namespace mesos { |
| |
| bool operator == (const CommandInfo& left, const CommandInfo& right); |
| bool operator == (const CommandInfo::URI& left, const CommandInfo::URI& right); |
| bool operator == (const Credential& left, const Credential& right); |
| bool operator == (const Environment& left, const Environment& right); |
| bool operator == (const ExecutorInfo& left, const ExecutorInfo& right); |
| bool operator == (const MasterInfo& left, const MasterInfo& right); |
| bool operator == (const SlaveInfo& left, const SlaveInfo& right); |
| bool operator == (const Volume& left, const Volume& right); |
| |
| |
| inline bool operator == (const ContainerID& left, const ContainerID& right) |
| { |
| return left.value() == right.value(); |
| } |
| |
| |
| inline bool operator == (const ExecutorID& left, const ExecutorID& right) |
| { |
| return left.value() == right.value(); |
| } |
| |
| |
| inline bool operator == (const FrameworkID& left, const FrameworkID& right) |
| { |
| return left.value() == right.value(); |
| } |
| |
| |
| inline bool operator == (const FrameworkInfo& left, const FrameworkInfo& right) |
| { |
| return (left.name() == right.name()) && (left.user() == right.user()); |
| } |
| |
| |
| inline bool operator == (const OfferID& left, const OfferID& right) |
| { |
| return left.value() == right.value(); |
| } |
| |
| |
| inline bool operator == (const SlaveID& left, const SlaveID& right) |
| { |
| return left.value() == right.value(); |
| } |
| |
| |
| inline bool operator == (const TaskID& left, const TaskID& right) |
| { |
| return left.value() == right.value(); |
| } |
| |
| |
| inline bool operator == (const ContainerID& left, const std::string& right) |
| { |
| return left.value() == right; |
| } |
| |
| |
| inline bool operator == (const ExecutorID& left, const std::string& right) |
| { |
| return left.value() == right; |
| } |
| |
| |
| inline bool operator == (const FrameworkID& left, const std::string& right) |
| { |
| return left.value() == right; |
| } |
| |
| |
| inline bool operator == (const OfferID& left, const std::string& right) |
| { |
| return left.value() == right; |
| } |
| |
| |
| inline bool operator == (const SlaveID& left, const std::string& right) |
| { |
| return left.value() == right; |
| } |
| |
| |
| inline bool operator == (const TaskID& left, const std::string& right) |
| { |
| return left.value() == right; |
| } |
| |
| |
| inline bool operator != (const ContainerID& left, const ContainerID& right) |
| { |
| return left.value() != right.value(); |
| } |
| |
| |
| inline bool operator != (const FrameworkID& left, const FrameworkID& right) |
| { |
| return left.value() != right.value(); |
| } |
| |
| |
| inline bool operator != (const SlaveID& left, const SlaveID& right) |
| { |
| return left.value() != right.value(); |
| } |
| |
| |
| inline bool operator < (const ContainerID& left, const ContainerID& right) |
| { |
| return left.value() < right.value(); |
| } |
| |
| |
| inline bool operator < (const ExecutorID& left, const ExecutorID& right) |
| { |
| return left.value() < right.value(); |
| } |
| |
| |
| inline bool operator < (const FrameworkID& left, const FrameworkID& right) |
| { |
| return left.value() < right.value(); |
| } |
| |
| |
| inline bool operator < (const OfferID& left, const OfferID& right) |
| { |
| return left.value() < right.value(); |
| } |
| |
| |
| inline bool operator < (const SlaveID& left, const SlaveID& right) |
| { |
| return left.value() < right.value(); |
| } |
| |
| |
| inline bool operator < (const TaskID& left, const TaskID& right) |
| { |
| return left.value() < right.value(); |
| } |
| |
| |
| inline std::size_t hash_value(const ContainerID& containerId) |
| { |
| size_t seed = 0; |
| boost::hash_combine(seed, containerId.value()); |
| return seed; |
| } |
| |
| |
| inline std::size_t hash_value(const ExecutorID& executorId) |
| { |
| size_t seed = 0; |
| boost::hash_combine(seed, executorId.value()); |
| return seed; |
| } |
| |
| |
| inline std::size_t hash_value(const FrameworkID& frameworkId) |
| { |
| size_t seed = 0; |
| boost::hash_combine(seed, frameworkId.value()); |
| return seed; |
| } |
| |
| |
| inline std::size_t hash_value(const OfferID& offerId) |
| { |
| size_t seed = 0; |
| boost::hash_combine(seed, offerId.value()); |
| return seed; |
| } |
| |
| |
| inline std::size_t hash_value(const SlaveID& slaveId) |
| { |
| size_t seed = 0; |
| boost::hash_combine(seed, slaveId.value()); |
| return seed; |
| } |
| |
| |
| inline std::size_t hash_value(const TaskID& taskId) |
| { |
| size_t seed = 0; |
| boost::hash_combine(seed, taskId.value()); |
| return seed; |
| } |
| |
| |
| inline std::ostream& operator << ( |
| std::ostream& stream, |
| const ACLs& acls) |
| { |
| return stream << acls.DebugString(); |
| } |
| |
| |
| inline std::ostream& operator << ( |
| std::ostream& stream, |
| const ContainerID& containerId) |
| { |
| return stream << containerId.value(); |
| } |
| |
| |
| inline std::ostream& operator << ( |
| std::ostream& stream, |
| const ContainerInfo& containerInfo) |
| { |
| return stream << containerInfo.DebugString(); |
| } |
| |
| |
| inline std::ostream& operator << ( |
| std::ostream& stream, |
| const ExecutorID& executorId) |
| { |
| return stream << executorId.value(); |
| } |
| |
| |
| inline std::ostream& operator << ( |
| std::ostream& stream, |
| const ExecutorInfo& executor) |
| { |
| return stream << executor.DebugString(); |
| } |
| |
| |
| inline std::ostream& operator << ( |
| std::ostream& stream, |
| const FrameworkID& frameworkId) |
| { |
| return stream << frameworkId.value(); |
| } |
| |
| |
| inline std::ostream& operator << ( |
| std::ostream& stream, |
| const MasterInfo& master) |
| { |
| return stream << master.DebugString(); |
| } |
| |
| |
| inline std::ostream& operator << ( |
| std::ostream& stream, |
| const OfferID& offerId) |
| { |
| return stream << offerId.value(); |
| } |
| |
| |
| inline std::ostream& operator << ( |
| std::ostream& stream, |
| const RateLimits& limits) |
| { |
| return stream << limits.DebugString(); |
| } |
| |
| |
| inline std::ostream& operator << ( |
| std::ostream& stream, |
| const SlaveID& slaveId) |
| { |
| return stream << slaveId.value(); |
| } |
| |
| |
| inline std::ostream& operator << ( |
| std::ostream& stream, |
| const SlaveInfo& slave) |
| { |
| return stream << slave.DebugString(); |
| } |
| |
| |
| inline std::ostream& operator << ( |
| std::ostream& stream, |
| const TaskID& taskId) |
| { |
| return stream << taskId.value(); |
| } |
| |
| |
| inline std::ostream& operator << ( |
| std::ostream& stream, |
| const TaskInfo& task) |
| { |
| return stream << task.DebugString(); |
| } |
| |
| |
| inline std::ostream& operator << ( |
| std::ostream& stream, |
| const TaskState& state) |
| { |
| return stream << TaskState_descriptor()->FindValueByNumber(state)->name(); |
| } |
| |
| |
| inline std::ostream& operator << ( |
| std::ostream& stream, |
| const std::vector<TaskID>& taskIds) |
| { |
| stream << "[ "; |
| for (auto it = taskIds.begin(); it != taskIds.end(); ++it) { |
| if (it != taskIds.begin()) { |
| stream << ", "; |
| } |
| stream << *it; |
| } |
| stream << " ]"; |
| return stream; |
| } |
| |
| |
| template <typename T> |
| inline std::ostream& operator << ( |
| std::ostream& stream, |
| const google::protobuf::RepeatedPtrField<T>& messages) |
| { |
| stream << "[ "; |
| for (auto it = messages.begin(); it != messages.end(); ++it) { |
| if (it != messages.begin()) { |
| stream << ", "; |
| } |
| stream << *it; |
| } |
| stream << " ]"; |
| return stream; |
| } |
| |
| |
| inline std::ostream& operator << ( |
| std::ostream& stream, |
| const Modules& modules) |
| { |
| return stream << modules.DebugString(); |
| } |
| |
| } // namespace mesos { |
| |
| #endif // __MESOS_TYPE_UTILS_H__ |