• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "mojo/public/cpp/bindings/lib/filter_chain.h"
6 
7 #include <assert.h>
8 
9 #include <algorithm>
10 
11 namespace mojo {
12 namespace internal {
13 
FilterChain(MessageReceiver * sink)14 FilterChain::FilterChain(MessageReceiver* sink) : sink_(sink) {
15 }
16 
FilterChain(RValue other)17 FilterChain::FilterChain(RValue other) : sink_(other.object->sink_) {
18   other.object->sink_ = NULL;
19   filters_.swap(other.object->filters_);
20 }
21 
operator =(RValue other)22 FilterChain& FilterChain::operator=(RValue other) {
23   std::swap(sink_, other.object->sink_);
24   filters_.swap(other.object->filters_);
25   return *this;
26 }
27 
~FilterChain()28 FilterChain::~FilterChain() {
29   for (std::vector<MessageFilter*>::iterator iter = filters_.begin();
30        iter != filters_.end();
31        ++iter) {
32     delete *iter;
33   }
34 }
35 
SetSink(MessageReceiver * sink)36 void FilterChain::SetSink(MessageReceiver* sink) {
37   assert(!sink_);
38   sink_ = sink;
39   if (!filters_.empty())
40     filters_.back()->set_sink(sink);
41 }
42 
GetHead()43 MessageReceiver* FilterChain::GetHead() {
44   assert(sink_);
45   return filters_.empty() ? sink_ : filters_.front();
46 }
47 
48 }  // namespace internal
49 }  // namespace mojo
50