// Copyright 2013 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef COMPONENTS_WEBRTC_LOGGING_COMMON_PARTIAL_CIRCULAR_BUFFER_H_ #define COMPONENTS_WEBRTC_LOGGING_COMMON_PARTIAL_CIRCULAR_BUFFER_H_ #include <stdint.h> #include "base/memory/raw_ptr.h" namespace webrtc_logging { // A wrapper around a memory buffer that allows circular read and write with a // selectable wrapping position. Buffer layout (after wrap; H is header): // ----------------------------------------------------------- // | H | Beginning | End | Middle | // ----------------------------------------------------------- // ^---- Non-wrapping -----^ ^--------- Wrapping ----------^ // The non-wrapping part is never overwritten. The wrapping part will be // circular. The very first part is the header (see the BufferData struct // below). It consists of the following information: // - Length written to the buffer (not including header). // - Wrapping position. // - End position of buffer. (If the last byte is at x, this will be x + 1.) // Users of wrappers around the same underlying buffer must ensure that writing // is finished before reading is started. class PartialCircularBuffer { … }; } // namespace webrtc_logging #endif // COMPONENTS_WEBRTC_LOGGING_COMMON_PARTIAL_CIRCULAR_BUFFER_H_