1c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Copyright (c) 2009 The Chromium Authors. All rights reserved.
2c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Use of this source code is governed by a BSD-style license that can be
3c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// found in the LICENSE file.
4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
5c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#ifndef NET_TOOLS_FLIP_SERVER_BUFFER_INTERFACE_H__
6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define NET_TOOLS_FLIP_SERVER_BUFFER_INTERFACE_H__
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once
8c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
9c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottnamespace net {
10c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
11c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottclass BufferInterface {
12c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott public:
13c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
14c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //   Returns the bytes which can be read from the buffer.  There is no
15c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //   guarantee that the bytes are contiguous.
16c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  virtual int ReadableBytes() const = 0;
17c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
18c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // Summary:
19c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //   returns the size of this buffer
20c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // Returns:
21c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //   size of this buffer.
22c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  virtual int BufferSize() const = 0;
23c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
24c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // Summary:
25c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //   returns the number of bytes free in this buffer.
26c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // Returns:
27c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //   number of bytes free.
28c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  virtual int BytesFree() const = 0;
29c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
30c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // Summary:
31c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //   Returns true if empty.
32c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // Returns:
33c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //   true - if empty
34c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //   false - otherwise
35c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  virtual bool Empty() const = 0;
36c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
37c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // Summary:
38c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //   Returns true if the buffer is full.
39c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  virtual bool Full() const = 0;
40c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
41c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // Summary:
42c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //   returns the number of characters written.
43c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //   appends up-to-'size' bytes to the buffer.
44c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // Args:
45c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //   bytes - bytes which are read, and copied into the buffer.
46c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //   size  - number of bytes which are read and copied.
47c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //           this number shall be >= 0.
48c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  virtual int Write(const char* bytes, int size) = 0;
49c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
50c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // Summary:
51c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //   Gets a pointer which can be written to (assigned to).
52c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //   this pointer (and size) can be used in functions like
53c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //   recv() or read(), etc.
54c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //   If *size is zero upon returning from this function, that it
55c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //   is unsafe to dereference *ptr.
56c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // Args:
57c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //   ptr - assigned a pointer to which we can write
58c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //   size - the amount of data (in bytes) that it is safe to write to ptr.
59c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  virtual void GetWritablePtr(char **ptr, int* size) const = 0;
60c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
61c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // Summary:
62c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //   Gets a pointer which can be read from
63c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //   this pointer (and size) can be used in functions like
64c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //   send() or write(), etc.
65c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //   If *size is zero upon returning from this function, that it
66c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //   is unsafe to dereference *ptr.
67c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // Args:
68c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //   ptr - assigned a pointer from which we may read
69c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //   size - the amount of data (in bytes) that it is safe to read
70c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  virtual void GetReadablePtr(char **ptr, int* size) const = 0;
71c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
72c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // Summary:
73c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //   Reads bytes out of the buffer, and writes them into 'bytes'.
74c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //   Returns the number of bytes read.
75c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //   Consumes bytes from the buffer (possibly, but not necessarily
76c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //   rendering them free)
77c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // Args:
78c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //   bytes - the pointer into which bytes are read from this buffer
79c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //           and written into
80c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //   size  - number of bytes which are read and copied.
81c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //           this number shall be >= 0.
82c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // Returns:
83c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //   the number of bytes read from 'bytes'
84c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  virtual int Read(char* bytes, int size) = 0;
85c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
86c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // Summary:
87c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //   removes all data from the buffer
88c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  virtual void Clear() = 0;
89c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
90c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // Summary:
91c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //   reserves contiguous writable empty space in the buffer of size bytes.
92c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //   Returns true if the reservation is successful.
93c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //   If a derive class chooses not to implement reservation, its
94c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //   implementation should return false.
95c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  virtual bool Reserve(int size) = 0;
96c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
97c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // Summary:
98c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //   removes the oldest 'amount_to_consume' characters from this buffer,
99c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // Args:
100c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //   amount_to_advance - .. this should be self-explanatory =)
101c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //                       this number shall be >= 0.
102c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  virtual void AdvanceReadablePtr(int amount_to_advance) = 0;
103c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
104c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // Summary:
105c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //   Moves the internal pointers around such that the
106c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //   amount of data specified here is expected to
107c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //   already be resident (as if it was Written)
108c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // Args:
109c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //   amount_to_advance - self explanatory.
110c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  //                       this number shall be >= 0.
111c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  virtual void AdvanceWritablePtr(int amount_to_advance) = 0;
112c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
113c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  virtual ~BufferInterface() {}
114c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
115c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott protected:
116c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  BufferInterface() {}
117c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott};
118c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
119c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}  // namespace net
120c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
121c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif  // NET_TOOLS_FLIP_SERVER_BUFFER_INTERFACE__H__
122c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
123