]>
Commit | Line | Data |
---|---|---|
f67539c2 TL |
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; |