| // Copyright (c) 2012 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef SERVICE_SORTER_ |
| #define SERVICE_SORTER_ |
| |
| #include <vector> |
| |
| #include "shill/refptr_types.h" |
| #include "shill/service.h" |
| |
| namespace shill { |
| |
| class Manager; |
| |
| // This is a closure used by the Manager for STL sorting of the |
| // Service array. We pass instances of this object to STL sort(), |
| // which in turn will call the selected function in the Manager to |
| // compare two Service objects at a time. |
| class ServiceSorter { |
| public: |
| ServiceSorter(bool compare_connectivity_state, |
| const std::vector<Technology::Identifier> &tech_order) |
| : compare_connectivity_state_(compare_connectivity_state), |
| technology_order_(tech_order) {} |
| bool operator() (ServiceRefPtr a, ServiceRefPtr b) { |
| const char *reason; |
| return Service::Compare(a, b, compare_connectivity_state_, |
| technology_order_, &reason); |
| } |
| |
| private: |
| const bool compare_connectivity_state_; |
| const std::vector<Technology::Identifier> &technology_order_; |
| // We can't DISALLOW_COPY_AND_ASSIGN since this is passed by value to STL |
| // sort. |
| }; |
| |
| } // namespace shill |
| |
| #endif // SERVICE_SORTER_ |