| // Copyright 2015 The Weave 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 LIBWEAVE_SRC_STATES_STATE_CHANGE_QUEUE_H_ | 
 | #define LIBWEAVE_SRC_STATES_STATE_CHANGE_QUEUE_H_ | 
 |  | 
 | #include <map> | 
 | #include <memory> | 
 | #include <vector> | 
 |  | 
 | #include <base/macros.h> | 
 | #include <base/time/time.h> | 
 | #include <base/values.h> | 
 |  | 
 | namespace weave { | 
 |  | 
 | // A simple notification record event to track device state changes. | 
 | // The |timestamp| records the time of the state change. | 
 | // |changed_properties| contains a property set with the new property values | 
 | // which were updated at the time the event was recorded. | 
 | struct StateChange { | 
 |   StateChange(base::Time time, | 
 |               std::unique_ptr<base::DictionaryValue> properties) | 
 |       : timestamp{time}, changed_properties{std::move(properties)} {} | 
 |   base::Time timestamp; | 
 |   std::unique_ptr<base::DictionaryValue> changed_properties; | 
 | }; | 
 |  | 
 | // An object to record and retrieve device state change notification events. | 
 | class StateChangeQueue { | 
 |  public: | 
 |   explicit StateChangeQueue(size_t max_queue_size); | 
 |  | 
 |   bool NotifyPropertiesUpdated( | 
 |       base::Time timestamp, | 
 |       const base::DictionaryValue& changed_properties); | 
 |   std::vector<StateChange> GetAndClearRecordedStateChanges(); | 
 |  | 
 |  private: | 
 |   // Maximum queue size. If it is full, the oldest state update records are | 
 |   // merged together until the queue size is within the size limit. | 
 |   const size_t max_queue_size_; | 
 |  | 
 |   // Accumulated list of device state change notifications. | 
 |   std::map<base::Time, std::unique_ptr<base::DictionaryValue>> state_changes_; | 
 |  | 
 |   DISALLOW_COPY_AND_ASSIGN(StateChangeQueue); | 
 | }; | 
 |  | 
 | }  // namespace weave | 
 |  | 
 | #endif  // LIBWEAVE_SRC_STATES_STATE_CHANGE_QUEUE_H_ |