optimizations to json_tokener_parse_ex(), printbuf_memappend()

-- Brent Miller, bdmiller at yahoo dash inc dot com


git-svn-id: http://svn.metaparadigm.com/svn/json-c/trunk@34 327403b1-1117-474d-bef2-5cb71233fd97
This commit is contained in:
Michael Clark
2009-04-27 08:16:58 +00:00
parent aaec1ef3c5
commit 95f55a761c
4 changed files with 226 additions and 98 deletions

View File

@@ -7,6 +7,10 @@
* This library is free software; you can redistribute it and/or modify
* it under the terms of the MIT license. See COPYING for details.
*
*
* Copyright (c) 2008-2009 Yahoo! Inc. All rights reserved.
* The copyrights to the contents of this file are licensed under the MIT License
* (http://www.opensource.org/licenses/mit-license.php)
*/
#ifndef _printbuf_h_
@@ -27,9 +31,23 @@ struct printbuf {
extern struct printbuf*
printbuf_new(void);
/* As an optimization, printbuf_memappend is defined as a macro that
* handles copying data if the buffer is large enough; otherwise it
* invokes printbuf_memappend_real() which performs the heavy lifting
* of realloc()ing the buffer and copying data.
*/
extern int
printbuf_memappend(struct printbuf *p, const char *buf, int size);
#define printbuf_memappend_fast(p, bufptr, bufsize) \
do { \
if ((p->size - p->bpos) > bufsize) { \
memcpy(p->buf + p->bpos, (bufptr), bufsize); \
p->bpos += bufsize; \
p->buf[p->bpos]= '\0'; \
} else { printbuf_memappend(p, (bufptr), bufsize); } \
} while (0)
extern int
sprintbuf(struct printbuf *p, const char *msg, ...);