]> git.proxmox.com Git - ceph.git/blob - ceph/src/jaegertracing/thrift/lib/perl/lib/Thrift/MemoryBuffer.pm
buildsys: switch source download to quincy
[ceph.git] / ceph / src / jaegertracing / thrift / lib / perl / lib / Thrift / MemoryBuffer.pm
1 #
2 # Licensed to the Apache Software Foundation (ASF) under one
3 # or more contributor license agreements. See the NOTICE file
4 # distributed with this work for additional information
5 # regarding copyright ownership. The ASF licenses this file
6 # to you under the Apache License, Version 2.0 (the
7 # "License"); you may not use this file except in compliance
8 # with the License. You may obtain a copy of the License at
9 #
10 # http://www.apache.org/licenses/LICENSE-2.0
11 #
12 # Unless required by applicable law or agreed to in writing,
13 # software distributed under the License is distributed on an
14 # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 # KIND, either express or implied. See the License for the
16 # specific language governing permissions and limitations
17 # under the License.
18 #
19
20 use 5.10.0;
21 use strict;
22 use warnings;
23
24 use Thrift;
25 use Thrift::Transport;
26
27 package Thrift::MemoryBuffer;
28 use base('Thrift::Transport');
29 use version 0.77; our $VERSION = version->declare("$Thrift::VERSION");
30
31 sub new
32 {
33 my $classname = shift;
34
35 my $bufferSize= shift || 1024;
36
37 my $self = {
38 buffer => '',
39 bufferSize => $bufferSize,
40 wPos => 0,
41 rPos => 0,
42 };
43
44 return bless($self,$classname);
45 }
46
47 sub isOpen
48 {
49 return 1;
50 }
51
52 sub open
53 {
54
55 }
56
57 sub close
58 {
59
60 }
61
62 sub peek
63 {
64 my $self = shift;
65 return($self->{rPos} < $self->{wPos});
66 }
67
68
69 sub getBuffer
70 {
71 my $self = shift;
72 return $self->{buffer};
73 }
74
75 sub resetBuffer
76 {
77 my $self = shift;
78
79 my $new_buffer = shift || '';
80
81 $self->{buffer} = $new_buffer;
82 $self->{bufferSize} = length($new_buffer);
83 $self->{wPos} = length($new_buffer);
84 $self->{rPos} = 0;
85 }
86
87 sub available
88 {
89 my $self = shift;
90 return ($self->{wPos} - $self->{rPos});
91 }
92
93 sub read
94 {
95 my $self = shift;
96 my $len = shift;
97 my $ret;
98
99 my $avail = ($self->{wPos} - $self->{rPos});
100 return '' if $avail == 0;
101
102 #how much to give
103 my $give = $len;
104 $give = $avail if $avail < $len;
105
106 $ret = substr($self->{buffer},$self->{rPos},$give);
107
108 $self->{rPos} += $give;
109
110 return $ret;
111 }
112
113 sub readAll
114 {
115 my $self = shift;
116 my $len = shift;
117
118 my $avail = ($self->{wPos} - $self->{rPos});
119 if ($avail < $len) {
120 die TTransportException->new("Attempt to readAll($len) found only $avail available",
121 Thrift::TTransportException::END_OF_FILE);
122 }
123
124 my $data = '';
125 my $got = 0;
126
127 while (($got = length($data)) < $len) {
128 $data .= $self->read($len - $got);
129 }
130
131 return $data;
132 }
133
134 sub write
135 {
136 my $self = shift;
137 my $buf = shift;
138
139 $self->{buffer} .= $buf;
140 $self->{wPos} += length($buf);
141 }
142
143 sub flush
144 {
145
146 }
147
148 1;