Coverage Report

Created: 2026-01-17 06:14

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/openthread/tests/nexus/platform/nexus_settings.hpp
Line
Count
Source
1
/*
2
 *  Copyright (c) 2024, The OpenThread Authors.
3
 *  All rights reserved.
4
 *
5
 *  Redistribution and use in source and binary forms, with or without
6
 *  modification, are permitted provided that the following conditions are met:
7
 *  1. Redistributions of source code must retain the above copyright
8
 *     notice, this list of conditions and the following disclaimer.
9
 *  2. Redistributions in binary form must reproduce the above copyright
10
 *     notice, this list of conditions and the following disclaimer in the
11
 *     documentation and/or other materials provided with the distribution.
12
 *  3. Neither the name of the copyright holder nor the
13
 *     names of its contributors may be used to endorse or promote products
14
 *     derived from this software without specific prior written permission.
15
 *
16
 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17
 *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18
 *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19
 *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
20
 *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21
 *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22
 *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23
 *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24
 *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25
 *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26
 *  POSSIBILITY OF SUCH DAMAGE.
27
 */
28
29
#ifndef OT_NEXUS_PLATFORM_NEXUS_SETTINGS_HPP_
30
#define OT_NEXUS_PLATFORM_NEXUS_SETTINGS_HPP_
31
32
#include "common/const_cast.hpp"
33
#include "common/owning_list.hpp"
34
#include "instance/instance.hpp"
35
36
namespace ot {
37
namespace Nexus {
38
39
struct Settings
40
{
41
    enum SetAddMode : uint8_t
42
    {
43
        kSet,
44
        kAdd,
45
    };
46
47
    Error Get(uint16_t aKey, int aIndex, uint8_t *aValue, uint16_t *aValueLength) const;
48
    Error SetOrAdd(SetAddMode aMode, uint16_t aKey, const uint8_t *aValue, uint16_t aValueLength);
49
    Error Delete(uint16_t aKey, int aIndex);
50
    void  Wipe(void);
51
52
    struct IndexMatcher
53
    {
54
950k
        IndexMatcher(int aIndex) { mIndex = aIndex; }
55
56
        int mIndex;
57
    };
58
59
    struct Entry : public Heap::Allocatable<Entry>, public LinkedListEntry<Entry>
60
    {
61
        struct Value : public Heap::Allocatable<Value>, public LinkedListEntry<Value>
62
        {
63
319k
            bool Matches(const IndexMatcher &aIndexMataher) const { return (AsNonConst(aIndexMataher).mIndex-- == 0); }
64
65
            Value     *mNext;
66
            Heap::Data mData;
67
        };
68
69
2.37M
        bool Matches(uint16_t aKey) const { return mKey == aKey; }
70
71
        Entry            *mNext;
72
        uint16_t          mKey;
73
        OwningList<Value> mValues;
74
    };
75
76
    OwningList<Entry> mEntries;
77
};
78
79
} // namespace Nexus
80
} // namespace ot
81
82
#endif // OT_NEXUS_PLATFORM_NEXUS_SETTINGS_HPP_