/* * * Copyright (c) 2024 Project CHIP Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #pragma once // NOTE: Functionality in this class uses HEAP and std::set. It is generally // intended for large systems only #include #include #include // TODO move to chip namespace template struct ListMemberTypeGetter { }; template struct ListMemberTypeGetter> { // We use List in data model data structures, so consumers can // use const data. Just grab the type with the const stripped off. using Type = std::remove_const_t; }; struct ListHolderBase { // Just here so we can delete an instance to trigger the subclass destructor. virtual ~ListHolderBase() {} }; template struct ListHolder : ListHolderBase { ListHolder(size_t N) { mList = new T[N]; } ~ListHolder() { delete[] mList; } T * mList; }; struct ListFreer { ~ListFreer() { for (auto listHolder : mListHolders) { delete listHolder; } } void add(ListHolderBase * listHolder) { mListHolders.insert(listHolder); } std::set mListHolders; };