1 // Copyright 2012 Google Inc. All Rights Reserved.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14
15 #include "polo/pairing/message/optionsmessage.h"
16
17 #include <algorithm>
18 #include <iterator>
19 #include <string>
20 #include <sstream>
21
22 namespace polo {
23 namespace pairing {
24 namespace message {
25
OptionsMessage()26 OptionsMessage::OptionsMessage()
27 : PoloMessage(PoloMessage::kOptions),
28 protocol_role_preference_(kUnknown) {
29 }
30
set_protocol_role_preference(OptionsMessage::ProtocolRole preference)31 void OptionsMessage::set_protocol_role_preference(
32 OptionsMessage::ProtocolRole preference) {
33 protocol_role_preference_ = preference;
34 }
35
protocol_role_preference() const36 OptionsMessage::ProtocolRole OptionsMessage::protocol_role_preference() const {
37 return protocol_role_preference_;
38 }
39
AddInputEncoding(const encoding::EncodingOption & encoding)40 void OptionsMessage::AddInputEncoding(
41 const encoding::EncodingOption& encoding) {
42 input_encodings_.insert(encoding);
43 }
44
AddOutputEncoding(const encoding::EncodingOption & encoding)45 void OptionsMessage::AddOutputEncoding(
46 const encoding::EncodingOption& encoding) {
47 output_encodings_.insert(encoding);
48 }
49
SupportsInputEncoding(const encoding::EncodingOption & encoding) const50 bool OptionsMessage::SupportsInputEncoding(
51 const encoding::EncodingOption& encoding) const {
52 return std::find_if(input_encodings_.begin(), input_encodings_.end(),
53 encoding::EncodingOption::EncodingOptionPredicate(encoding))
54 != input_encodings_.end();
55 }
56
SupportsOutputEncoding(const encoding::EncodingOption & encoding) const57 bool OptionsMessage::SupportsOutputEncoding(
58 const encoding::EncodingOption& encoding) const {
59 return std::find_if(output_encodings_.begin(), output_encodings_.end(),
60 encoding::EncodingOption::EncodingOptionPredicate(encoding))
61 != output_encodings_.end();
62 }
63
64 const encoding::EncodingOption::EncodingSet&
input_encodings() const65 OptionsMessage::input_encodings() const {
66 return input_encodings_;
67 }
68
69 const encoding::EncodingOption::EncodingSet&
output_encodings() const70 OptionsMessage::output_encodings() const {
71 return output_encodings_;
72 }
73
ToString() const74 std::string OptionsMessage::ToString() const {
75 std::ostringstream ss;
76 ss << "[OptionsMessage inputs=";
77 encoding::EncodingOption::EncodingSet::const_iterator iter
78 = input_encodings_.begin();
79 while (iter != input_encodings_.end()) {
80 ss << iter->ToString();
81 if (++iter != input_encodings_.end()) {
82 ss << ",";
83 }
84 }
85
86 ss << ", outputs=";
87 iter = output_encodings_.begin();
88 while (iter != output_encodings_.end()) {
89 ss << iter->ToString() << ",";
90 if (++iter != output_encodings_.end()) {
91 ss << ",";
92 }
93 }
94
95 ss << ", pref=" << protocol_role_preference_ << "]";
96 return ss.str();
97 }
98
99 } // namespace message
100 } // namespace pairing
101 } // namespace polo
102
103