changeset 18719:c8c8bed6dc88 draft

(svn r23567) -Codechange: use SmallVector for the buffer in strgen
author rubidium <rubidium@openttd.org>
date Sat, 17 Dec 2011 13:23:01 +0000
parents 8aea5ed3cf0d
children 6d803edb95e4
files src/strgen/strgen.cpp
diffstat 1 files changed, 11 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/src/strgen/strgen.cpp
+++ b/src/strgen/strgen.cpp
@@ -71,8 +71,9 @@
 #define HASH_SIZE 32767
 static uint16 _hash_head[HASH_SIZE];
 
-static byte _put_buf[4096];
-static uint _put_pos;
+/** The buffer for writing a single string. */
+typedef SmallVector<byte, 256> Buffer;
+Buffer _put_buf;
 static int _next_string_id;
 
 static uint32 _hash;
@@ -169,8 +170,7 @@
 
 static void PutByte(byte c)
 {
-	if (_put_pos >= lengthof(_put_buf)) error("Put buffer too small");
-	_put_buf[_put_pos++] = c;
+	*_put_buf.Append() = c;
 }
 
 
@@ -1224,27 +1224,26 @@
 
 					/* Write each case */
 					for (c = casep; c != NULL; c = c->next) {
-						uint pos;
-
 						PutByte(c->caseidx);
 						/* Make some space for the 16-bit length */
-						pos = _put_pos;
+						size_t pos = _put_buf.Length();
 						PutByte(0);
 						PutByte(0);
 						/* Write string */
 						PutCommandString(c->string);
 						PutByte(0); // terminate with a zero
 						/* Fill in the length */
-						_put_buf[pos + 0] = GB(_put_pos - (pos + 2), 8, 8);
-						_put_buf[pos + 1] = GB(_put_pos - (pos + 2), 0, 8);
+						size_t size = _put_buf.Length() - (pos + 2);
+						_put_buf[pos + 0] = GB(size, 8, 8);
+						_put_buf[pos + 1] = GB(size, 0, 8);
 					}
 				}
 
 				if (cmdp != NULL) PutCommandString(cmdp);
 
-				this->WriteLength(_put_pos);
-				this->Write(_put_buf, _put_pos);
-				_put_pos = 0;
+				this->WriteLength(_put_buf.Length());
+				this->Write(_put_buf.Begin(), _put_buf.Length());
+				_put_buf.Clear();
 			}
 		}
 	}