Audacity 3.2.0
Public Types | Public Member Functions | Public Attributes | List of all members
audacity::cloud::audiocom::sync::ProjectCloudExtension::CloudStatusChangedNotifier Struct Referencefinal
Inheritance diagram for audacity::cloud::audiocom::sync::ProjectCloudExtension::CloudStatusChangedNotifier:
[legend]
Collaboration diagram for audacity::cloud::audiocom::sync::ProjectCloudExtension::CloudStatusChangedNotifier:
[legend]

Public Types

using QueueType = std::vector< std::pair< CloudStatusChangedMessage, bool > >
 

Public Member Functions

void Enqueue (CloudStatusChangedMessage message, bool canMerge)
 
void PublishSafe ()
 
Observer::Subscription SubscribeSafe (std::function< void(const CloudStatusChangedMessage &)> callback)
 

Public Attributes

std::mutex QueueMutex
 
QueueType Queue
 
std::recursive_mutex ObserverMutex
 

Additional Inherited Members

- Private Types inherited from Observer::Publisher< CloudStatusChangedMessage >
using message_type = CloudStatusChangedMessage
 
using CallbackReturn = std::conditional_t< true, void, bool >
 
using Callback = std::function< CallbackReturn(const CloudStatusChangedMessage &) >
 Type of functions that can be connected to the Publisher. More...
 
- Private Member Functions inherited from Observer::Publisher< CloudStatusChangedMessage >
 Publisher (ExceptionPolicy *pPolicy=nullptr, Alloc a={})
 Constructor supporting type-erased custom allocation/deletion. More...
 
 Publisher (Publisher &&)=default
 
Publisheroperator= (Publisher &&)=default
 
Subscription Subscribe (Callback callback)
 Connect a callback to the Publisher; later-connected are called earlier. More...
 
Subscription Subscribe (Object &obj, Return(Object::*callback)(Args...))
 Overload of Subscribe takes an object and pointer-to-member-function. More...
 
CallbackReturn Publish (const CloudStatusChangedMessage &message)
 Send a message to connected callbacks. More...
 
- Static Private Attributes inherited from Observer::Publisher< CloudStatusChangedMessage >
static constexpr bool notifies_all
 

Detailed Description

Definition at line 62 of file ProjectCloudExtension.cpp.

Member Typedef Documentation

◆ QueueType

Definition at line 98 of file ProjectCloudExtension.cpp.

Member Function Documentation

◆ Enqueue()

void audacity::cloud::audiocom::sync::ProjectCloudExtension::CloudStatusChangedNotifier::Enqueue ( CloudStatusChangedMessage  message,
bool  canMerge 
)
inline

Definition at line 65 of file ProjectCloudExtension.cpp.

66 {
67 auto lock = std::lock_guard { QueueMutex };
68
69 if (Queue.empty() || !canMerge)
70 Queue.push_back({ message, canMerge });
71 else if (Queue.back().second)
72 Queue.back().first = message;
73 else
74 Queue.push_back({ message, canMerge });
75 }

References Queue, and QueueMutex.

◆ PublishSafe()

void audacity::cloud::audiocom::sync::ProjectCloudExtension::CloudStatusChangedNotifier::PublishSafe ( )
inline

Definition at line 77 of file ProjectCloudExtension.cpp.

78 {
79 QueueType queue;
80 {
81 auto lock = std::lock_guard { QueueMutex };
82 std::swap(queue, Queue);
83 }
84
85 auto lock = std::lock_guard { ObserverMutex };
86
87 for (const auto& [message, _] : queue)
88 Publish(message);
89 }
#define _(s)
Definition: Internat.h:73
CallbackReturn Publish(const CloudStatusChangedMessage &message)
Send a message to connected callbacks.
Definition: Observer.h:207
void swap(std::unique_ptr< Alg_seq > &a, std::unique_ptr< Alg_seq > &b)
Definition: NoteTrack.cpp:628
std::vector< std::pair< CloudStatusChangedMessage, bool > > QueueType

References _, ObserverMutex, Observer::Publisher< CloudStatusChangedMessage >::Publish(), Queue, QueueMutex, and anonymous_namespace{NoteTrack.cpp}::swap().

Here is the call graph for this function:

◆ SubscribeSafe()

Observer::Subscription audacity::cloud::audiocom::sync::ProjectCloudExtension::CloudStatusChangedNotifier::SubscribeSafe ( std::function< void(const CloudStatusChangedMessage &)>  callback)
inline

Definition at line 92 of file ProjectCloudExtension.cpp.

93 {
94 auto lock = std::lock_guard { ObserverMutex };
95 return Subscribe(std::move(callback));
96 }
Subscription Subscribe(Callback callback)
Connect a callback to the Publisher; later-connected are called earlier.
Definition: Observer.h:199

References ObserverMutex, and Observer::Publisher< CloudStatusChangedMessage >::Subscribe().

Here is the call graph for this function:

Member Data Documentation

◆ ObserverMutex

std::recursive_mutex audacity::cloud::audiocom::sync::ProjectCloudExtension::CloudStatusChangedNotifier::ObserverMutex

Definition at line 102 of file ProjectCloudExtension.cpp.

Referenced by PublishSafe(), and SubscribeSafe().

◆ Queue

QueueType audacity::cloud::audiocom::sync::ProjectCloudExtension::CloudStatusChangedNotifier::Queue

Definition at line 101 of file ProjectCloudExtension.cpp.

Referenced by Enqueue(), and PublishSafe().

◆ QueueMutex

std::mutex audacity::cloud::audiocom::sync::ProjectCloudExtension::CloudStatusChangedNotifier::QueueMutex

Definition at line 100 of file ProjectCloudExtension.cpp.

Referenced by Enqueue(), and PublishSafe().


The documentation for this struct was generated from the following file: