~aleteoryx/muditaos

ref: 43148cea15fb632bdecccba873ec5921ee128a42 muditaos/module-vfs/src/newlib/HandleManager.cpp -rw-r--r-- 832 bytes
43148cea — Alek Rudnik [EGD-5778] Add signal strength dBM inidcator 5 years ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "HandleManager.hpp"

namespace vfsn::internal::stdlib::impl
{
    auto HandleManager::clearHandle(int hwnd) noexcept -> void *
    {
        if (hwnd < FIRST_HANDLE || hwnd >= MAX_HANDLES + FIRST_HANDLE) {
            return nullptr;
        }
        hwnd -= FIRST_HANDLE;
        return mHandles[hwnd].exchange(nullptr);
    }

    auto HandleManager::setHandle(void *hwnd) noexcept -> int
    {
        for (int h = 0; h < MAX_HANDLES; ++h) {
            void *tst_val = nullptr;
            if (mHandles[h].compare_exchange_strong(tst_val, hwnd)) {
                return h + FIRST_HANDLE;
            }
        }
        return -1;
    }
} // namespace vfsn::internal::stdlib::impl