blob: d32eb7860896e3d670c3075310d57f4276092a89 [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "mojo/public/cpp/bindings/lib/filter_chain.h"
#include <algorithm>
#include "mojo/public/cpp/environment/logging.h"
namespace mojo {
namespace internal {
FilterChain::FilterChain(MessageReceiver* sink) : sink_(sink) {
}
FilterChain::FilterChain(FilterChain&& other) : sink_(other.sink_) {
other.sink_ = nullptr;
filters_.swap(other.filters_);
}
FilterChain& FilterChain::operator=(FilterChain&& other) {
std::swap(sink_, other.sink_);
filters_.swap(other.filters_);
return *this;
}
FilterChain::~FilterChain() {
for (std::vector<MessageFilter*>::iterator iter = filters_.begin();
iter != filters_.end();
++iter) {
delete *iter;
}
}
void FilterChain::SetSink(MessageReceiver* sink) {
MOJO_DCHECK(!sink_);
sink_ = sink;
if (!filters_.empty())
filters_.back()->set_sink(sink);
}
MessageReceiver* FilterChain::GetHead() {
MOJO_DCHECK(sink_);
return filters_.empty() ? sink_ : filters_.front();
}
} // namespace internal
} // namespace mojo