// Copyright 2012 Google Inc. All Rights Reserved.
//
// Licensed 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 "polo/pairing/message/optionsmessage.h"
#include <algorithm>
#include <iterator>
#include <string>
#include <sstream>
namespace polo {
namespace pairing {
namespace message {
OptionsMessage::OptionsMessage()
: PoloMessage(PoloMessage::kOptions),
protocol_role_preference_(kUnknown) {
}
void OptionsMessage::set_protocol_role_preference(
OptionsMessage::ProtocolRole preference) {
protocol_role_preference_ = preference;
}
OptionsMessage::ProtocolRole OptionsMessage::protocol_role_preference() const {
return protocol_role_preference_;
}
void OptionsMessage::AddInputEncoding(
const encoding::EncodingOption& encoding) {
input_encodings_.insert(encoding);
}
void OptionsMessage::AddOutputEncoding(
const encoding::EncodingOption& encoding) {
output_encodings_.insert(encoding);
}
bool OptionsMessage::SupportsInputEncoding(
const encoding::EncodingOption& encoding) const {
return std::find_if(input_encodings_.begin(), input_encodings_.end(),
encoding::EncodingOption::EncodingOptionPredicate(encoding))
!= input_encodings_.end();
}
bool OptionsMessage::SupportsOutputEncoding(
const encoding::EncodingOption& encoding) const {
return std::find_if(output_encodings_.begin(), output_encodings_.end(),
encoding::EncodingOption::EncodingOptionPredicate(encoding))
!= output_encodings_.end();
}
const encoding::EncodingOption::EncodingSet&
OptionsMessage::input_encodings() const {
return input_encodings_;
}
const encoding::EncodingOption::EncodingSet&
OptionsMessage::output_encodings() const {
return output_encodings_;
}
std::string OptionsMessage::ToString() const {
std::ostringstream ss;
ss << "[OptionsMessage inputs=";
encoding::EncodingOption::EncodingSet::const_iterator iter
= input_encodings_.begin();
while (iter != input_encodings_.end()) {
ss << iter->ToString();
if (++iter != input_encodings_.end()) {
ss << ",";
}
}
ss << ", outputs=";
iter = output_encodings_.begin();
while (iter != output_encodings_.end()) {
ss << iter->ToString() << ",";
if (++iter != output_encodings_.end()) {
ss << ",";
}
}
ss << ", pref=" << protocol_role_preference_ << "]";
return ss.str();
}
} // namespace message
} // namespace pairing
} // namespace polo