1<?php
2
3/**
4 * Copyright (c) 2006- Facebook
5 * Distributed under the Thrift Software License
6 *
7 * See accompanying file LICENSE or visit the Thrift site at:
8 * http://developers.facebook.com/thrift/
9 *
10 * @package thrift.transport
11 * @author Levy Klots <lklots@facebook.com>
12 */
13
14/**
15 * A memory buffer is a tranpsort that simply reads from and writes to an
16 * in-memory string buffer. Anytime you call write on it, the data is simply
17 * placed into a buffer, and anytime you call read, data is read from that
18 * buffer.
19 *
20 * @package thrift.transport
21 * @author Levy Klots <lklots@facebook.com>
22 */
23class TMemoryBuffer extends TTransport {
24
25  /**
26   * Constructor. Optionally pass an initial value
27   * for the buffer.
28   */
29  public function __construct($buf = '') {
30    $this->buf_ = $buf;
31  }
32
33  protected $buf_ = '';
34
35  public function isOpen() {
36    return true;
37  }
38
39  public function open() {}
40
41  public function close() {}
42
43  public function write($buf) {
44    $this->buf_ .= $buf;
45  }
46
47  public function read($len) {
48    if (strlen($this->buf_) === 0) {
49      throw new TTransportException('TMemoryBuffer: Could not read ' .
50                                    $len . ' bytes from buffer.',
51                                    TTransportException::UNKNOWN);
52    }
53
54    if (strlen($this->buf_) <= $len) {
55      $ret = $this->buf_;
56      $this->buf_ = '';
57      return $ret;
58    }
59
60    $ret = substr($this->buf_, 0, $len);
61    $this->buf_ = substr($this->buf_, $len);
62
63    return $ret;
64  }
65
66  function getBuffer() {
67    return $this->buf_;
68  }
69
70  public function available() {
71    return strlen($this->buf_);
72  }
73}
74
75?>
76