Apache Mesos
type_utils.hpp
Go to the documentation of this file.
1 // Licensed to the Apache Software Foundation (ASF) under one
2 // or more contributor license agreements. See the NOTICE file
3 // distributed with this work for additional information
4 // regarding copyright ownership. The ASF licenses this file
5 // to you under the Apache License, Version 2.0 (the
6 // "License"); you may not use this file except in compliance
7 // with the License. You may obtain a copy of the License at
8 //
9 // http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 
17 #ifndef __MESOS_TYPE_UTILS_H__
18 #define __MESOS_TYPE_UTILS_H__
19 
20 #include <iosfwd>
21 #include <string>
22 #include <vector>
23 
24 #include <boost/functional/hash.hpp>
25 
26 #include <google/protobuf/repeated_field.h>
27 
28 #include <mesos/mesos.hpp>
29 
30 #include <stout/stringify.hpp>
31 #include <stout/strings.hpp>
32 #include <stout/uuid.hpp>
33 
34 // This file includes definitions for operators on public protobuf
35 // classes (defined in mesos.proto, module.proto, etc.) that don't
36 // have these operators generated by the protobuf compiler. The
37 // corresponding definitions are in src/common/type_utils.cpp.
38 //
39 // Mesos modules need some of the protobuf classes defined in
40 // mesos.proto, module.proto, etc., and require some of these
41 // operators declared in type_utils.hpp. Exposing type_utils.hpp
42 // allows us to build modules without having a dependency on mesos
43 // source tree (src/*).
44 
45 namespace mesos {
46 
47 bool operator==(const CheckStatusInfo& left, const CheckStatusInfo& right);
48 bool operator==(const CommandInfo& left, const CommandInfo& right);
49 bool operator==(const CommandInfo::URI& left, const CommandInfo::URI& right);
50 bool operator==(const ContainerID& left, const ContainerID& right);
51 bool operator==(const ContainerInfo& left, const ContainerInfo& right);
52 bool operator==(const Credential& left, const Credential& right);
53 bool operator==(const CSIPluginInfo& left, const CSIPluginInfo& right);
54 
55 bool operator==(
56  const CSIPluginContainerInfo& left,
57  const CSIPluginContainerInfo& right);
58 
59 bool operator==(const DiscoveryInfo& left, const DiscoveryInfo& right);
60 bool operator==(const Environment& left, const Environment& right);
61 bool operator==(const ExecutorInfo& left, const ExecutorInfo& right);
62 bool operator==(const Label& left, const Label& right);
63 bool operator==(const Labels& left, const Labels& right);
64 bool operator==(const MasterInfo& left, const MasterInfo& right);
65 bool operator==(const Offer::Operation& left, const Offer::Operation& right);
66 bool operator==(const Operation& left, const Operation& right);
67 bool operator==(const OperationStatus& left, const OperationStatus& right);
68 
69 bool operator==(
70  const ResourceProviderInfo& left,
71  const ResourceProviderInfo& right);
72 
73 bool operator==(
74  const ResourceStatistics& left,
75  const ResourceStatistics& right);
76 
77 bool operator==(const SlaveInfo& left, const SlaveInfo& right);
78 bool operator==(const Task& left, const Task& right);
79 bool operator==(const TaskGroupInfo& left, const TaskGroupInfo& right);
80 bool operator==(const TaskInfo& left, const TaskInfo& right);
81 bool operator==(const TaskStatus& left, const TaskStatus& right);
82 bool operator==(const URL& left, const URL& right);
83 bool operator==(const UUID& left, const UUID& right);
84 bool operator==(const Volume& left, const Volume& right);
85 
86 bool operator!=(const CheckStatusInfo& left, const CheckStatusInfo& right);
87 bool operator!=(const ExecutorInfo& left, const ExecutorInfo& right);
88 bool operator!=(const Labels& left, const Labels& right);
89 bool operator!=(const Offer::Operation& left, const Offer::Operation& right);
90 bool operator!=(const Operation& left, const Operation& right);
91 bool operator!=(const OperationStatus& left, const OperationStatus& right);
92 
93 bool operator!=(const TaskStatus& left, const TaskStatus& right);
94 
95 inline bool operator==(const ExecutorID& left, const ExecutorID& right)
96 {
97  return left.value() == right.value();
98 }
99 
100 
101 inline bool operator==(const FrameworkID& left, const FrameworkID& right)
102 {
103  return left.value() == right.value();
104 }
105 
106 
107 inline bool operator==(const FrameworkInfo& left, const FrameworkInfo& right)
108 {
109  return (left.name() == right.name()) && (left.user() == right.user());
110 }
111 
112 
113 inline bool operator==(const OfferID& left, const OfferID& right)
114 {
115  return left.value() == right.value();
116 }
117 
118 
119 inline bool operator==(const OperationID& left, const OperationID& right)
120 {
121  return left.value() == right.value();
122 }
123 
124 
125 inline bool operator==(
126  const ResourceProviderID& left,
127  const ResourceProviderID& right)
128 {
129  return left.value() == right.value();
130 }
131 
132 
133 inline bool operator==(const SlaveID& left, const SlaveID& right)
134 {
135  return left.value() == right.value();
136 }
137 
138 
139 inline bool operator==(const TaskID& left, const TaskID& right)
140 {
141  return left.value() == right.value();
142 }
143 
144 
145 inline bool operator==(const TimeInfo& left, const TimeInfo& right)
146 {
147  return left.nanoseconds() == right.nanoseconds();
148 }
149 
150 
151 inline bool operator==(const DurationInfo& left, const DurationInfo& right)
152 {
153  return left.nanoseconds() == right.nanoseconds();
154 }
155 
156 
157 inline bool operator==(const ContainerID& left, const std::string& right)
158 {
159  return left.value() == right;
160 }
161 
162 
163 inline bool operator==(const ExecutorID& left, const std::string& right)
164 {
165  return left.value() == right;
166 }
167 
168 
169 inline bool operator==(const FrameworkID& left, const std::string& right)
170 {
171  return left.value() == right;
172 }
173 
174 
175 inline bool operator==(const OfferID& left, const std::string& right)
176 {
177  return left.value() == right;
178 }
179 
180 
181 inline bool operator==(const SlaveID& left, const std::string& right)
182 {
183  return left.value() == right;
184 }
185 
186 
187 inline bool operator==(const TaskID& left, const std::string& right)
188 {
189  return left.value() == right;
190 }
191 
192 
193 inline bool operator==(
194  const DomainInfo::FaultDomain::RegionInfo& left,
195  const DomainInfo::FaultDomain::RegionInfo& right)
196 {
197  return left.name() == right.name();
198 }
199 
200 
201 inline bool operator==(
202  const DomainInfo::FaultDomain::ZoneInfo& left,
203  const DomainInfo::FaultDomain::ZoneInfo& right)
204 {
205  return left.name() == right.name();
206 }
207 
208 
209 inline bool operator==(
210  const DomainInfo::FaultDomain& left,
211  const DomainInfo::FaultDomain& right)
212 {
213  return left.region() == right.region() && left.zone() == right.zone();
214 }
215 
216 
217 inline bool operator==(const DomainInfo& left, const DomainInfo& right)
218 {
219  return left.fault_domain() == right.fault_domain();
220 }
221 
222 
227 inline bool operator==(const MachineID& left, const MachineID& right)
228 {
229  // NOTE: Both fields default to the empty string if they are not specified,
230  // so the string comparisons are safe.
231  return left.has_hostname() == right.has_hostname() &&
232  strings::lower(left.hostname()) == strings::lower(right.hostname()) &&
233  left.has_ip() == right.has_ip() &&
234  left.ip() == right.ip();
235 }
236 
237 
238 inline bool operator!=(const ContainerID& left, const ContainerID& right)
239 {
240  return !(left == right);
241 }
242 
243 
244 inline bool operator!=(
245  const CSIPluginContainerInfo& left,
246  const CSIPluginContainerInfo& right)
247 {
248  return !(left == right);
249 }
250 
251 
252 inline bool operator!=(const ExecutorID& left, const ExecutorID& right)
253 {
254  return left.value() != right.value();
255 }
256 
257 
258 inline bool operator!=(const FrameworkID& left, const FrameworkID& right)
259 {
260  return left.value() != right.value();
261 }
262 
263 
264 inline bool operator!=(const OperationID& left, const OperationID& right)
265 {
266  return left.value() != right.value();
267 }
268 
269 
270 inline bool operator!=(
271  const ResourceProviderID& left,
272  const ResourceProviderID& right)
273 {
274  return left.value() != right.value();
275 }
276 
277 
278 inline bool operator!=(const SlaveID& left, const SlaveID& right)
279 {
280  return left.value() != right.value();
281 }
282 
283 
284 inline bool operator!=(
285  const ResourceProviderInfo& left,
286  const ResourceProviderInfo& right)
287 {
288  return !(left == right);
289 }
290 
291 
292 inline bool operator!=(const TimeInfo& left, const TimeInfo& right)
293 {
294  return !(left == right);
295 }
296 
297 
298 inline bool operator!=(const UUID& left, const UUID& right)
299 {
300  return !(left == right);
301 }
302 
303 
304 inline bool operator!=(const DurationInfo& left, const DurationInfo& right)
305 {
306  return !(left == right);
307 }
308 
309 
310 inline bool operator!=(
311  const DomainInfo::FaultDomain::RegionInfo& left,
312  const DomainInfo::FaultDomain::RegionInfo& right)
313 {
314  return left.name() != right.name();
315 }
316 
317 
318 inline bool operator<(const ContainerID& left, const ContainerID& right)
319 {
320  return left.value() < right.value();
321 }
322 
323 
324 inline bool operator<(const ExecutorID& left, const ExecutorID& right)
325 {
326  return left.value() < right.value();
327 }
328 
329 
330 inline bool operator<(const FrameworkID& left, const FrameworkID& right)
331 {
332  return left.value() < right.value();
333 }
334 
335 
336 inline bool operator<(const OfferID& left, const OfferID& right)
337 {
338  return left.value() < right.value();
339 }
340 
341 
342 inline bool operator<(const SlaveID& left, const SlaveID& right)
343 {
344  return left.value() < right.value();
345 }
346 
347 
348 inline bool operator<(const TaskID& left, const TaskID& right)
349 {
350  return left.value() < right.value();
351 }
352 
353 
354 std::ostream& operator<<(
355  std::ostream& stream,
356  const CapabilityInfo& capabilityInfo);
357 
358 
359 std::ostream& operator<<(
360  std::ostream& stream,
361  const DeviceWhitelist& deviceWhitelist);
362 
363 
364 std::ostream& operator<<(
365  std::ostream& stream,
366  const CheckStatusInfo& checkStatusInfo);
367 
368 
369 std::ostream& operator<<(std::ostream& stream, const CommandInfo& commandInfo);
370 
371 
372 std::ostream& operator<<(std::ostream& stream, const ContainerID& containerId);
373 
374 
375 std::ostream& operator<<(
376  std::ostream& stream,
377  const ContainerInfo& containerInfo);
378 
379 
380 std::ostream& operator<<(std::ostream& stream, const DomainInfo& domainInfo);
381 
382 
383 std::ostream& operator<<(std::ostream& stream, const Environment& environment);
384 
385 
386 std::ostream& operator<<(std::ostream& stream, const ExecutorID& executorId);
387 
388 
389 std::ostream& operator<<(std::ostream& stream, const ExecutorInfo& executor);
390 
391 
392 std::ostream& operator<<(std::ostream& stream, const FrameworkID& frameworkId);
393 
394 
395 std::ostream& operator<<(std::ostream& stream, const MasterInfo& master);
396 
397 
398 std::ostream& operator<<(std::ostream& stream, const OfferID& offerId);
399 
400 
401 std::ostream& operator<<(std::ostream& stream, const OperationID& operationId);
402 
403 
404 std::ostream& operator<<(std::ostream& stream, const OperationState& state);
405 
406 
407 std::ostream& operator<<(std::ostream& stream, const RateLimits& limits);
408 
409 
410 std::ostream& operator<<(
411  std::ostream& stream,
412  const ResourceProviderID& resourceProviderId);
413 
414 
415 std::ostream& operator<<(
416  std::ostream& stream,
417  const ResourceProviderInfo& resourceProviderInfo);
418 
419 
420 std::ostream& operator<<(std::ostream& stream, const RLimitInfo& rlimitInfo);
421 
422 
423 std::ostream& operator<<(std::ostream& stream, const SlaveID& slaveId);
424 
425 
426 std::ostream& operator<<(std::ostream& stream, const SlaveInfo& slave);
427 
428 
429 std::ostream& operator<<(std::ostream& stream, const TaskID& taskId);
430 
431 
432 std::ostream& operator<<(std::ostream& stream, const MachineID& machineId);
433 
434 
435 std::ostream& operator<<(std::ostream& stream, const TaskInfo& task);
436 
437 
438 std::ostream& operator<<(std::ostream& stream, const TaskState& state);
439 
440 
441 std::ostream& operator<<(
442  std::ostream& stream,
443  const UUID& uuid);
444 
445 
446 std::ostream& operator<<(std::ostream& stream, const CheckInfo::Type& type);
447 
448 
449 std::ostream& operator<<(
450  std::ostream& stream,
451  const CSIPluginContainerInfo::Service& service);
452 
453 
454 std::ostream& operator<<(
455  std::ostream& stream,
456  const FrameworkInfo::Capability& capability);
457 
458 
459 std::ostream& operator<<(std::ostream& stream, const Image::Type& imageType);
460 
461 
462 std::ostream& operator<<(std::ostream& stream, const Secret::Type& secretType);
463 
464 
465 std::ostream& operator<<(
466  std::ostream& stream,
467  const Offer::Operation::Type& operationType);
468 
469 
470 std::ostream& operator<<(
471  std::ostream& stream,
472  const Resource::DiskInfo::Source::Type& sourceType);
473 
474 
475 template <typename T>
476 inline std::ostream& operator<<(
477  std::ostream& stream,
478  const google::protobuf::RepeatedPtrField<T>& messages)
479 {
480  stream << "[ ";
481  for (auto it = messages.begin(); it != messages.end(); ++it) {
482  if (it != messages.begin()) {
483  stream << ", ";
484  }
485  stream << *it;
486  }
487  stream << " ]";
488  return stream;
489 }
490 
491 
492 template <typename T>
493 inline std::ostream& operator<<(
494  std::ostream& stream,
495  const std::vector<T>& messages)
496 {
497  stream << "[ ";
498  for (auto it = messages.begin(); it != messages.end(); ++it) {
499  if (it != messages.begin()) {
500  stream << ", ";
501  }
502  stream << *it;
503  }
504  stream << " ]";
505  return stream;
506 }
507 
508 } // namespace mesos {
509 
510 namespace std {
511 
512 template <>
513 struct hash<mesos::CommandInfo_URI>
514 {
515  typedef size_t result_type;
516 
517  typedef mesos::CommandInfo_URI argument_type;
518 
519  result_type operator()(const argument_type& uri) const
520  {
521  size_t seed = 0;
522 
523  if (uri.extract()) {
524  seed += 11;
525  }
526 
527  if (uri.executable()) {
528  seed += 2003;
529  }
530 
531  boost::hash_combine(seed, uri.value());
532  return seed;
533  }
534 };
535 
536 
537 template <>
538 struct hash<mesos::ContainerID>
539 {
540  typedef size_t result_type;
541 
542  typedef mesos::ContainerID argument_type;
543 
544  result_type operator()(const argument_type& containerId) const
545  {
546  size_t seed = 0;
547  boost::hash_combine(seed, containerId.value());
548 
549  if (containerId.has_parent()) {
550  boost::hash_combine(
551  seed,
552  std::hash<mesos::ContainerID>()(containerId.parent()));
553  }
554 
555  return seed;
556  }
557 };
558 
559 
560 template <>
561 struct hash<mesos::ExecutorID>
562 {
563  typedef size_t result_type;
564 
565  typedef mesos::ExecutorID argument_type;
566 
567  result_type operator()(const argument_type& executorId) const
568  {
569  size_t seed = 0;
570  boost::hash_combine(seed, executorId.value());
571  return seed;
572  }
573 };
574 
575 
576 template <>
577 struct hash<mesos::FrameworkID>
578 {
579  typedef size_t result_type;
580 
581  typedef mesos::FrameworkID argument_type;
582 
583  result_type operator()(const argument_type& frameworkId) const
584  {
585  size_t seed = 0;
586  boost::hash_combine(seed, frameworkId.value());
587  return seed;
588  }
589 };
590 
591 
592 template <>
593 struct hash<mesos::OfferID>
594 {
595  typedef size_t result_type;
596 
597  typedef mesos::OfferID argument_type;
598 
599  result_type operator()(const argument_type& offerId) const
600  {
601  size_t seed = 0;
602  boost::hash_combine(seed, offerId.value());
603  return seed;
604  }
605 };
606 
607 
608 template <>
609 struct hash<mesos::SlaveID>
610 {
611  typedef size_t result_type;
612 
613  typedef mesos::SlaveID argument_type;
614 
615  result_type operator()(const argument_type& slaveId) const
616  {
617  size_t seed = 0;
618  boost::hash_combine(seed, slaveId.value());
619  return seed;
620  }
621 };
622 
623 
624 template <>
625 struct hash<mesos::TaskID>
626 {
627  typedef size_t result_type;
628 
629  typedef mesos::TaskID argument_type;
630 
631  result_type operator()(const argument_type& taskId) const
632  {
633  size_t seed = 0;
634  boost::hash_combine(seed, taskId.value());
635  return seed;
636  }
637 };
638 
639 
640 template <>
641 struct hash<mesos::TaskState>
642 {
643  typedef size_t result_type;
644 
645  typedef mesos::TaskState argument_type;
646 
647  result_type operator()(const argument_type& taskState) const
648  {
649  // Use the underlying type of the enum as hash value.
650  return static_cast<size_t>(taskState);
651  }
652 };
653 
654 
655 template <>
656 struct hash<mesos::TaskStatus_Source>
657 {
658  typedef size_t result_type;
659 
660  typedef mesos::TaskStatus_Source argument_type;
661 
662  result_type operator()(const argument_type& source) const
663  {
664  // Use the underlying type of the enum as hash value.
665  return static_cast<size_t>(source);
666  }
667 };
668 
669 
670 template <>
671 struct hash<mesos::TaskStatus_Reason>
672 {
673  typedef size_t result_type;
674 
675  typedef mesos::TaskStatus_Reason argument_type;
676 
677  result_type operator()(const argument_type& reason) const
678  {
679  // Use the underlying type of the enum as hash value.
680  return static_cast<size_t>(reason);
681  }
682 };
683 
684 
685 template <>
686 struct hash<mesos::Image::Type>
687 {
688  typedef size_t result_type;
689 
691 
692  result_type operator()(const argument_type& imageType) const
693  {
694  // Use the underlying type of the enum as hash value.
695  return static_cast<size_t>(imageType);
696  }
697 };
698 
699 
700 template <>
701 struct hash<std::pair<mesos::FrameworkID, mesos::ExecutorID>>
702 {
703  typedef size_t result_type;
704 
705  typedef std::pair<
706  mesos::FrameworkID, mesos::ExecutorID> argument_type;
707 
708  result_type operator()(const argument_type& pair) const
709  {
710  size_t seed = 0;
711  boost::hash_combine(seed, std::hash<mesos::FrameworkID>()(pair.first));
712  boost::hash_combine(seed, std::hash<mesos::ExecutorID>()(pair.second));
713  return seed;
714  }
715 };
716 
717 
718 template <>
719 struct hash<mesos::MachineID>
720 {
721  typedef size_t result_type;
722 
723  typedef mesos::MachineID argument_type;
724 
725  result_type operator()(const argument_type& machineId) const
726  {
727  size_t seed = 0;
728  boost::hash_combine(seed, strings::lower(machineId.hostname()));
729  boost::hash_combine(seed, machineId.ip());
730  return seed;
731  }
732 };
733 
734 
735 template <>
736 struct hash<mesos::OperationID>
737 {
738  typedef size_t result_type;
739 
740  typedef mesos::OperationID argument_type;
741 
742  result_type operator()(const argument_type& operationId) const
743  {
744  size_t seed = 0;
745  boost::hash_combine(seed, operationId.value());
746  return seed;
747  }
748 };
749 
750 
751 template <>
752 struct hash<mesos::ResourceProviderID>
753 {
754  typedef size_t result_type;
755 
756  typedef mesos::ResourceProviderID argument_type;
757 
758  result_type operator()(const argument_type& resourceProviderId) const
759  {
760  size_t seed = 0;
761  boost::hash_combine(seed, resourceProviderId.value());
762  return seed;
763  }
764 };
765 
766 
767 template <>
768 struct hash<mesos::UUID>
769 {
770  typedef size_t result_type;
771 
772  typedef mesos::UUID argument_type;
773 
774  result_type operator()(const argument_type& uuid) const
775  {
776  size_t seed = 0;
777  boost::hash_combine(seed, uuid.value());
778  return seed;
779  }
780 };
781 
782 } // namespace std {
783 
784 #endif // __MESOS_TYPE_UTILS_H__
std::ostream & operator<<(std::ostream &stream, const Attribute &attribute)
size_t result_type
Definition: type_utils.hpp:770
Definition: type_utils.hpp:577
mesos::MachineID argument_type
Definition: type_utils.hpp:723
result_type operator()(const argument_type &executorId) const
Definition: type_utils.hpp:567
size_t result_type
Definition: type_utils.hpp:563
Definition: master.hpp:27
mesos::CommandInfo_URI argument_type
Definition: type_utils.hpp:517
result_type operator()(const argument_type &containerId) const
Definition: type_utils.hpp:544
mesos::Image::Type argument_type
Definition: type_utils.hpp:690
result_type operator()(const argument_type &slaveId) const
Definition: type_utils.hpp:615
size_t result_type
Definition: type_utils.hpp:627
result_type operator()(const argument_type &resourceProviderId) const
Definition: type_utils.hpp:758
mesos::TaskStatus_Source argument_type
Definition: type_utils.hpp:660
bool operator==(const Resource::ReservationInfo &left, const Resource::ReservationInfo &right)
Definition: type_utils.hpp:510
result_type operator()(const argument_type &offerId) const
Definition: type_utils.hpp:599
mesos::TaskState argument_type
Definition: type_utils.hpp:645
mesos::ContainerID argument_type
Definition: type_utils.hpp:542
Capability
Definition: capabilities.hpp:35
result_type operator()(const argument_type &reason) const
Definition: type_utils.hpp:677
Operation
Definition: cgroups.hpp:458
result_type operator()(const argument_type &machineId) const
Definition: type_utils.hpp:725
result_type operator()(const argument_type &uri) const
Definition: type_utils.hpp:519
size_t result_type
Definition: type_utils.hpp:721
bool operator<(const ContainerID &left, const ContainerID &right)
Definition: type_utils.hpp:318
mesos::TaskID argument_type
Definition: type_utils.hpp:629
size_t result_type
Definition: type_utils.hpp:673
size_t result_type
Definition: type_utils.hpp:658
mesos::ResourceProviderID argument_type
Definition: type_utils.hpp:756
mesos::FrameworkID argument_type
Definition: type_utils.hpp:581
size_t result_type
Definition: type_utils.hpp:688
result_type operator()(const argument_type &source) const
Definition: type_utils.hpp:662
bool operator!=(const Resource::ReservationInfo &left, const Resource::ReservationInfo &right)
Environment * environment
mesos::UUID argument_type
Definition: type_utils.hpp:772
result_type operator()(const argument_type &uuid) const
Definition: type_utils.hpp:774
Definition: spec.hpp:26
size_t result_type
Definition: type_utils.hpp:595
size_t result_type
Definition: type_utils.hpp:643
size_t result_type
Definition: type_utils.hpp:738
result_type operator()(const argument_type &taskId) const
Definition: type_utils.hpp:631
size_t result_type
Definition: type_utils.hpp:515
std::pair< mesos::FrameworkID, mesos::ExecutorID > argument_type
Definition: type_utils.hpp:706
result_type operator()(const argument_type &frameworkId) const
Definition: type_utils.hpp:583
result_type operator()(const argument_type &pair) const
Definition: type_utils.hpp:708
Type
Definition: capabilities.hpp:79
Try< uint32_t > type(const std::string &path)
Definition: type_utils.hpp:538
size_t result_type
Definition: type_utils.hpp:540
Definition: uri.hpp:21
mesos::ExecutorID argument_type
Definition: type_utils.hpp:565
result_type operator()(const argument_type &imageType) const
Definition: type_utils.hpp:692
size_t result_type
Definition: type_utils.hpp:611
mesos::SlaveID argument_type
Definition: type_utils.hpp:613
mesos::TaskStatus_Reason argument_type
Definition: type_utils.hpp:675
std::string lower(const std::string &s)
Definition: strings.hpp:429
mesos::OperationID argument_type
Definition: type_utils.hpp:740
mesos::OfferID argument_type
Definition: type_utils.hpp:597
size_t result_type
Definition: type_utils.hpp:754
result_type operator()(const argument_type &operationId) const
Definition: type_utils.hpp:742
Definition: type_utils.hpp:561
size_t result_type
Definition: type_utils.hpp:579
result_type operator()(const argument_type &taskState) const
Definition: type_utils.hpp:647