1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef NET_TOOLS_BALSA_SIMPLE_BUFFER_H__
6 #define NET_TOOLS_BALSA_SIMPLE_BUFFER_H__
10 #include "base/compiler_specific.h"
11 #include "net/tools/balsa/buffer_interface.h"
15 class SimpleBuffer
: public BufferInterface
{
18 explicit SimpleBuffer(int size
);
19 ~SimpleBuffer() override
;
21 std::string
str() const;
23 typedef char * iterator
;
24 typedef const char * const_iterator
;
26 iterator
begin() { return storage_
+ read_idx_
; }
27 const_iterator
begin() const { return storage_
+ read_idx_
; }
29 iterator
end() { return storage_
+ write_idx_
; }
30 const_iterator
end() const { return storage_
+ write_idx_
; }
32 // The following functions all override pure virtual functions
33 // in BufferInterface. See buffer_interface.h for a description
35 int ReadableBytes() const override
;
36 int BufferSize() const override
;
37 int BytesFree() const override
;
39 bool Empty() const override
;
40 bool Full() const override
;
42 int Write(const char* bytes
, int size
) override
;
44 void GetWritablePtr(char** ptr
, int* size
) const override
;
46 void GetReadablePtr(char** ptr
, int* size
) const override
;
48 int Read(char* bytes
, int size
) override
;
50 void Clear() override
;
52 // This can be an expensive operation: costing a new/delete, and copying of
53 // all existing data. Even if the existing buffer does not need to be
54 // resized, unread data may still need to be non-destructively copied to
55 // consolidate fragmented free space.
56 bool Reserve(int size
) override
;
58 void AdvanceReadablePtr(int amount_to_advance
) override
;
60 void AdvanceWritablePtr(int amount_to_advance
) override
;
62 void Swap(SimpleBuffer
* other
) {
64 storage_
= other
->storage_
;
65 other
->storage_
= tmp
;
67 int tmp_int
= write_idx_
;
68 write_idx_
= other
->write_idx_
;
69 other
->write_idx_
= tmp_int
;
72 read_idx_
= other
->read_idx_
;
73 other
->read_idx_
= tmp_int
;
75 tmp_int
= storage_size_
;
76 storage_size_
= other
->storage_size_
;
77 other
->storage_size_
= tmp_int
;
87 //DISALLOW_COPY_AND_ASSIGN(SimpleBuffer);
92 #endif // NET_TOOLS_BALSA_SIMPLE_BUFFER_H__