You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@avro.apache.org by cu...@apache.org on 2012/05/18 23:38:30 UTC
svn commit: r1340267 - in /avro/trunk: CHANGES.txt lang/php/lib/avro/io.php
Author: cutting
Date: Fri May 18 21:38:30 2012
New Revision: 1340267
URL: http://svn.apache.org/viewvc?rev=1340267&view=rev
Log:
AVRO-1050. PHP: Optimize memory use by string append. Contributed by A B.
Modified:
avro/trunk/CHANGES.txt
avro/trunk/lang/php/lib/avro/io.php
Modified: avro/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/avro/trunk/CHANGES.txt?rev=1340267&r1=1340266&r2=1340267&view=diff
==============================================================================
--- avro/trunk/CHANGES.txt (original)
+++ avro/trunk/CHANGES.txt Fri May 18 21:38:30 2012
@@ -41,6 +41,8 @@ Avro 1.7.0 (unreleased)
AVRO-1074. Java: Optimize Utf8#length() and #toString() to not
allocate a String when the length is zero. (cutting)
+ AVRO-1050. PHP: Optimize memory use by string append. (A B via cutting)
+
BUG FIXES
AVRO-1045. Java: Fix a bug in GenericData#deepCopy() of ByteBuffer values.
Modified: avro/trunk/lang/php/lib/avro/io.php
URL: http://svn.apache.org/viewvc/avro/trunk/lang/php/lib/avro/io.php?rev=1340267&r1=1340266&r2=1340267&view=diff
==============================================================================
--- avro/trunk/lang/php/lib/avro/io.php (original)
+++ avro/trunk/lang/php/lib/avro/io.php Fri May 18 21:38:30 2012
@@ -146,9 +146,9 @@ class AvroIO
class AvroStringIO extends AvroIO
{
/**
- * @var array array of individual bytes
+ * @var string
*/
- private $buffer;
+ private $string_buffer;
/**
* @var int current position in string
*/
@@ -167,11 +167,11 @@ class AvroStringIO extends AvroIO
public function __construct($str = '')
{
$this->is_closed = false;
- $this->buffer = array();
+ $this->string_buffer = '';
$this->current_index = 0;
if (is_string($str))
- $this->buffer = str_split($str);
+ $this->string_buffer .= $str;
else
throw new AvroIOException(
sprintf('constructor argument must be a string: %s', gettype($str)));
@@ -201,14 +201,14 @@ class AvroStringIO extends AvroIO
public function read($len)
{
$this->check_closed();
- $read=array();
+ $read='';
for($i=$this->current_index; $i<($this->current_index+$len); $i++)
- $read []=$this->buffer[$i];
- if (count($read) < $len)
+ $read .= $this->string_buffer[$i];
+ if (strlen($read) < $len)
$this->current_index = $this->length();
else
$this->current_index += $len;
- return join($read);
+ return $read;
}
/**
@@ -291,14 +291,13 @@ class AvroStringIO extends AvroIO
* @returns integer count of bytes written.
*/
private function append_str($str)
- {
- $this->check_closed();
- $ary = str_split($str);
- $len = count($ary);
- $this->buffer = array_merge($this->buffer, $ary);
- $this->current_index += $len;
- return $len;
- }
+ {
+ $this->check_closed();
+ $this->string_buffer .= $str;
+ $len = strlen($str);
+ $this->current_index += $len;
+ return $len;
+ }
/**
* Truncates the truncate buffer to 0 bytes and returns the pointer
@@ -308,7 +307,7 @@ class AvroStringIO extends AvroIO
public function truncate()
{
$this->check_closed();
- $this->buffer = array();
+ $this->string_buffer = '';
$this->current_index = 0;
return true;
}
@@ -318,12 +317,12 @@ class AvroStringIO extends AvroIO
* @internal Could probably memoize length for performance, but
* no need do this yet.
*/
- public function length() { return count($this->buffer); }
+ public function length() { return strlen($this->string_buffer); }
/**
* @returns string
*/
- public function __toString() { return join($this->buffer); }
+ public function __toString() { return $this->string_buffer; }
/**