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
22namespace polo {
23namespace pairing {
24namespace message {
25
26OptionsMessage::OptionsMessage()
27    : PoloMessage(PoloMessage::kOptions),
28      protocol_role_preference_(kUnknown) {
29}
30
31void OptionsMessage::set_protocol_role_preference(
32    OptionsMessage::ProtocolRole preference) {
33  protocol_role_preference_ = preference;
34}
35
36OptionsMessage::ProtocolRole OptionsMessage::protocol_role_preference() const {
37  return protocol_role_preference_;
38}
39
40void OptionsMessage::AddInputEncoding(
41    const encoding::EncodingOption& encoding) {
42  input_encodings_.insert(encoding);
43}
44
45void OptionsMessage::AddOutputEncoding(
46    const encoding::EncodingOption& encoding) {
47  output_encodings_.insert(encoding);
48}
49
50bool 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
57bool 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
64const encoding::EncodingOption::EncodingSet&
65    OptionsMessage::input_encodings() const {
66  return input_encodings_;
67}
68
69const encoding::EncodingOption::EncodingSet&
70    OptionsMessage::output_encodings() const {
71  return output_encodings_;
72}
73
74std::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