/* * Copyright (c) 2017-2019 Cisco and/or its affiliates. * 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 #include #include namespace transport { namespace core { class Name; class ContentObject; class Interest; } // namespace core } // namespace transport namespace utils { using Name = transport::core::Name; using ContentObject = transport::core::ContentObject; using Interest = transport::core::Interest; typedef std::pair, std::chrono::steady_clock::time_point> ObjectTimeEntry; typedef std::pair>::iterator> ContentStoreEntry; typedef std::list> FIFOList; typedef std::unordered_map ContentStoreHashTable; class ContentStore { public: explicit ContentStore(std::size_t max_packets = (1 << 16)); ~ContentStore(); void insert(const std::shared_ptr &content_object); const std::shared_ptr find(const Interest &interest); void erase(const Name &exact_name); void setLimit(size_t max_packets); size_t getLimit() const; size_t size() const; void printContent(); private: ContentStoreHashTable content_store_hash_table_; FIFOList fifo_list_; std::shared_ptr empty_reference_; std::size_t max_content_store_size_; std::mutex cs_mutex_; }; } // end namespace utils