- add sources.
[platform/framework/web/crosswalk.git] / src / net / tools / balsa / simple_buffer.h
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.
4
5 #ifndef NET_TOOLS_BALSA_SIMPLE_BUFFER_H__
6 #define NET_TOOLS_BALSA_SIMPLE_BUFFER_H__
7
8 #include <string>
9
10 #include "base/compiler_specific.h"
11 #include "net/tools/balsa/buffer_interface.h"
12
13 namespace net {
14
15 class SimpleBuffer : public BufferInterface {
16  public:
17   SimpleBuffer();
18   explicit SimpleBuffer(int size);
19   virtual ~SimpleBuffer();
20
21   std::string str() const;
22
23   typedef char * iterator;
24   typedef const char * const_iterator;
25
26   iterator begin() { return storage_ + read_idx_; }
27   const_iterator begin() const { return storage_ + read_idx_; }
28
29   iterator end() { return storage_ + write_idx_; }
30   const_iterator end() const { return storage_ + write_idx_; }
31
32   // The following functions all override pure virtual functions
33   // in BufferInterface. See buffer_interface.h for a description
34   // of what they do.
35   virtual int ReadableBytes() const OVERRIDE;
36   virtual int BufferSize() const OVERRIDE;
37   virtual int BytesFree() const OVERRIDE;
38
39   virtual bool Empty() const OVERRIDE;
40   virtual bool Full() const OVERRIDE;
41
42   virtual int Write(const char* bytes, int size) OVERRIDE;
43
44   virtual void GetWritablePtr(char **ptr, int* size) const OVERRIDE;
45
46   virtual void GetReadablePtr(char **ptr, int* size) const OVERRIDE;
47
48   virtual int Read(char* bytes, int size) OVERRIDE;
49
50   virtual void Clear() OVERRIDE;
51
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   virtual bool Reserve(int size) OVERRIDE;
57
58   virtual void AdvanceReadablePtr(int amount_to_advance) OVERRIDE;
59
60   virtual void AdvanceWritablePtr(int amount_to_advance) OVERRIDE;
61
62   void Swap(SimpleBuffer* other) {
63     char* tmp = storage_;
64     storage_ = other->storage_;
65     other->storage_ = tmp;
66
67     int tmp_int = write_idx_;
68     write_idx_ = other->write_idx_;
69     other->write_idx_ = tmp_int;
70
71     tmp_int = read_idx_;
72     read_idx_ = other->read_idx_;
73     other->read_idx_ = tmp_int;
74
75     tmp_int = storage_size_;
76     storage_size_ = other->storage_size_;
77     other->storage_size_ = tmp_int;
78   }
79
80  protected:
81   char* storage_;
82   int write_idx_;
83   int read_idx_;
84   int storage_size_;
85
86  private:
87   //DISALLOW_COPY_AND_ASSIGN(SimpleBuffer);
88 };
89
90 }  // namespace net
91
92 #endif  // NET_TOOLS_BALSA_SIMPLE_BUFFER_H__