Matter SDK Coverage Report
Current view: top level - lib/support - CommonPersistentData.h (source / functions) Coverage Total Hit
Test: SHA:b879ecb8e99e175eea0a293a888bda853da2b19c Lines: 100.0 % 21 21
Test Date: 2025-01-17 19:00:11 Functions: 100.0 % 6 6

            Line data    Source code
       1              : /*
       2              :  *
       3              :  *    Copyright (c) 2022 Project CHIP Authors
       4              :  *
       5              :  *    Licensed under the Apache License, Version 2.0 (the "License");
       6              :  *    you may not use this file except in compliance with the License.
       7              :  *    You may obtain a copy of the License at
       8              :  *
       9              :  *        http://www.apache.org/licenses/LICENSE-2.0
      10              :  *
      11              :  *    Unless required by applicable law or agreed to in writing, software
      12              :  *    distributed under the License is distributed on an "AS IS" BASIS,
      13              :  *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      14              :  *    See the License for the specific language governing permissions and
      15              :  *    limitations under the License.
      16              :  */
      17              : 
      18              : /**
      19              :  *    @file
      20              :  *          Contains a class handling creation of linked list of stored persistent data.
      21              :  */
      22              : #pragma once
      23              : 
      24              : #include <lib/core/DataModelTypes.h>
      25              : #include <lib/support/PersistentData.h>
      26              : 
      27              : namespace chip {
      28              : namespace CommonPersistentData {
      29              : 
      30              : inline constexpr uint8_t kdefaultUndefinedEntry = 0;
      31              : 
      32              : /// @brief Generic class to implement storage of a list persistently
      33              : /// @tparam EntryType : Type of entry depends on the stored data
      34              : /// @tparam kMaxSerializedSize : inherited from PersistentData class
      35              : template <typename EntryType, size_t kMaxSerializedSize>
      36              : struct StoredDataList : public PersistentData<kMaxSerializedSize>
      37              : {
      38          357 :     static constexpr TLV::Tag TagFirstEntry() { return TLV::ContextTag(1); }
      39          357 :     static constexpr TLV::Tag TagEntryCount() { return TLV::ContextTag(2); }
      40              : 
      41              :     EntryType first_entry = kdefaultUndefinedEntry;
      42              :     uint16_t entry_count  = 0;
      43              : 
      44          320 :     StoredDataList() = default;
      45              :     StoredDataList(EntryType first) : first_entry(first), entry_count(1) {}
      46              : 
      47           56 :     CHIP_ERROR Serialize(TLV::TLVWriter & writer) const override
      48              :     {
      49              :         TLV::TLVType container;
      50           56 :         ReturnErrorOnFailure(writer.StartContainer(TLV::AnonymousTag(), TLV::kTLVType_Structure, container));
      51              : 
      52           56 :         ReturnErrorOnFailure(writer.Put(TagFirstEntry(), static_cast<uint16_t>(first_entry)));
      53           56 :         ReturnErrorOnFailure(writer.Put(TagEntryCount(), static_cast<uint16_t>(entry_count)));
      54              : 
      55           56 :         return writer.EndContainer(container);
      56              :     }
      57              : 
      58          301 :     CHIP_ERROR Deserialize(TLV::TLVReader & reader) override
      59              :     {
      60          301 :         ReturnErrorOnFailure(reader.Next(TLV::AnonymousTag()));
      61          301 :         VerifyOrReturnError(TLV::kTLVType_Structure == reader.GetType(), CHIP_ERROR_INTERNAL);
      62              : 
      63              :         TLV::TLVType container;
      64          301 :         ReturnErrorOnFailure(reader.EnterContainer(container));
      65              : 
      66              :         // first_entry
      67          301 :         ReturnErrorOnFailure(reader.Next(TagFirstEntry()));
      68          301 :         ReturnErrorOnFailure(reader.Get(first_entry));
      69              :         // entry_count
      70          301 :         ReturnErrorOnFailure(reader.Next(TagEntryCount()));
      71          301 :         ReturnErrorOnFailure(reader.Get(entry_count));
      72              : 
      73          301 :         return reader.ExitContainer(container);
      74              :     }
      75              : };
      76              : 
      77              : inline constexpr size_t kPersistentFabricBufferMax = 32;
      78              : struct FabricList : StoredDataList<FabricIndex, kPersistentFabricBufferMax>
      79              : {
      80              :     // Subclasses need to define UpdateKey to be whatever fabric list key they
      81              :     // care about.
      82              : 
      83          320 :     void Clear() override
      84              :     {
      85          320 :         first_entry = kUndefinedFabricIndex;
      86          320 :         entry_count = 0;
      87          320 :     }
      88              : };
      89              : } // namespace CommonPersistentData
      90              : } // namespace chip
        

Generated by: LCOV version 2.0-1