1 // Copyright 2020 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 "cast/sender/public/cast_app_discovery_service.h"
6 
7 namespace openscreen {
8 namespace cast {
9 
Subscription(CastAppDiscoveryService * discovery_service,uint32_t id)10 CastAppDiscoveryService::Subscription::Subscription(
11     CastAppDiscoveryService* discovery_service,
12     uint32_t id)
13     : discovery_service_(discovery_service), id_(id) {}
14 
Subscription(Subscription && other)15 CastAppDiscoveryService::Subscription::Subscription(
16     Subscription&& other) noexcept
17     : discovery_service_(other.discovery_service_), id_(other.id_) {
18   other.discovery_service_ = nullptr;
19 }
20 
21 CastAppDiscoveryService::Subscription&
operator =(Subscription && other)22 CastAppDiscoveryService::Subscription::operator=(Subscription&& other) {
23   id_ = other.id_;
24   discovery_service_ = other.discovery_service_;
25   other.discovery_service_ = nullptr;
26   return *this;
27 }
28 
~Subscription()29 CastAppDiscoveryService::Subscription::~Subscription() {
30   Reset();
31 }
32 
Reset()33 void CastAppDiscoveryService::Subscription::Reset() {
34   if (discovery_service_) {
35     discovery_service_->RemoveAvailabilityCallback(id_);
36   }
37   discovery_service_ = nullptr;
38 }
39 
Swap(Subscription & other)40 void CastAppDiscoveryService::Subscription::Swap(Subscription& other) {
41   CastAppDiscoveryService* service = other.discovery_service_;
42   other.discovery_service_ = discovery_service_;
43   discovery_service_ = service;
44 
45   uint32_t id = other.id_;
46   other.id_ = id_;
47   id_ = id;
48 }
49 
50 }  // namespace cast
51 }  // namespace openscreen
52