Cleanup and memory reduction.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@423 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
c4216cdc4d
commit
f60c0d540b
1 changed files with 5 additions and 31 deletions
|
|
@ -25,8 +25,6 @@ typedef struct String {
|
||||||
int hashkey; /* Hash key value */
|
int hashkey; /* Hash key value */
|
||||||
int sp; /* Current position */
|
int sp; /* Current position */
|
||||||
char *str; /* String data */
|
char *str; /* String data */
|
||||||
char pb[4]; /* Pushback data */
|
|
||||||
int pbi;
|
|
||||||
} String;
|
} String;
|
||||||
|
|
||||||
/* Forward references */
|
/* Forward references */
|
||||||
|
|
@ -153,7 +151,6 @@ NewString(const DOH *so)
|
||||||
DohXInit(str);
|
DohXInit(str);
|
||||||
str->hashkey = -1;
|
str->hashkey = -1;
|
||||||
str->sp = 0;
|
str->sp = 0;
|
||||||
str->pbi = 0;
|
|
||||||
str->line = 1;
|
str->line = 1;
|
||||||
str->file = 0;
|
str->file = 0;
|
||||||
max = INIT_MAXSIZE;
|
max = INIT_MAXSIZE;
|
||||||
|
|
@ -208,7 +205,6 @@ CopyString(DOH *so) {
|
||||||
str->line = s->line;
|
str->line = s->line;
|
||||||
str->file = s->file;
|
str->file = s->file;
|
||||||
if (str->file) Incref(str->file);
|
if (str->file) Incref(str->file);
|
||||||
str->pbi = 0;
|
|
||||||
max = s->maxsize;
|
max = s->maxsize;
|
||||||
str->str = (char *) DohMalloc(max);
|
str->str = (char *) DohMalloc(max);
|
||||||
memmove(str->str, s->str, max);
|
memmove(str->str, s->str, max);
|
||||||
|
|
@ -383,7 +379,6 @@ String_clear(DOH *so)
|
||||||
*(s->str) = 0;
|
*(s->str) = 0;
|
||||||
s->sp = 0;
|
s->sp = 0;
|
||||||
s->line = 1;
|
s->line = 1;
|
||||||
s->pbi = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -495,18 +490,12 @@ String_read(DOH *so, void *buffer, int len) {
|
||||||
int reallen, retlen;
|
int reallen, retlen;
|
||||||
char *cb;
|
char *cb;
|
||||||
String *s = (String *) so;
|
String *s = (String *) so;
|
||||||
if (((s->sp-s->pbi) + len) > s->len) reallen = (s->len - (s->sp-s->pbi));
|
if ((s->sp + len) > s->len) reallen = (s->len - s->sp);
|
||||||
else reallen = len;
|
else reallen = len;
|
||||||
|
|
||||||
cb = (char *) buffer;
|
cb = (char *) buffer;
|
||||||
retlen = reallen;
|
retlen = reallen;
|
||||||
|
|
||||||
/* Read the push-back buffer contents first */
|
|
||||||
while (reallen > 0) {
|
|
||||||
if (s->pbi <= 0) break;
|
|
||||||
*(cb++) = (char) s->pb[--s->pbi];
|
|
||||||
reallen--;
|
|
||||||
}
|
|
||||||
if (reallen > 0) {
|
if (reallen > 0) {
|
||||||
memmove(cb, s->str+s->sp, reallen);
|
memmove(cb, s->str+s->sp, reallen);
|
||||||
s->sp += reallen;
|
s->sp += reallen;
|
||||||
|
|
@ -534,7 +523,6 @@ String_write(DOH *so, void *buffer, int len) {
|
||||||
if ((s->sp+len) > s->len) s->len = s->sp + len;
|
if ((s->sp+len) > s->len) s->len = s->sp + len;
|
||||||
memmove(s->str+s->sp,buffer,len);
|
memmove(s->str+s->sp,buffer,len);
|
||||||
s->sp += len;
|
s->sp += len;
|
||||||
s->pbi = 0;
|
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -577,8 +565,6 @@ String_seek(DOH *so, long offset, int whence) {
|
||||||
s->sp = nsp;
|
s->sp = nsp;
|
||||||
#endif
|
#endif
|
||||||
assert (s->sp >= 0);
|
assert (s->sp >= 0);
|
||||||
|
|
||||||
s->pbi = 0;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -590,7 +576,7 @@ String_seek(DOH *so, long offset, int whence) {
|
||||||
long
|
long
|
||||||
String_tell(DOH *so) {
|
String_tell(DOH *so) {
|
||||||
String *s = (String *) so;
|
String *s = (String *) so;
|
||||||
return (long) (s->sp - s->pbi);
|
return (long) (s->sp);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -----------------------------------------------------------------------------
|
/* -----------------------------------------------------------------------------
|
||||||
|
|
@ -612,7 +598,6 @@ String_putc(DOH *so, int ch) {
|
||||||
if (ch == '\n') s->line++;
|
if (ch == '\n') s->line++;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
s->pbi = 0;
|
|
||||||
return ch;
|
return ch;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -626,10 +611,7 @@ int String_getc(DOH *so) {
|
||||||
int c;
|
int c;
|
||||||
String *s = (String *) so;
|
String *s = (String *) so;
|
||||||
|
|
||||||
if (s->pbi) {
|
if (s->sp >= s->len)
|
||||||
c = (int) s->pb[--s->pbi];
|
|
||||||
}
|
|
||||||
else if (s->sp >= s->len)
|
|
||||||
c = EOF;
|
c = EOF;
|
||||||
else
|
else
|
||||||
c = (int) s->str[s->sp++];
|
c = (int) s->str[s->sp++];
|
||||||
|
|
@ -647,15 +629,8 @@ int String_getc(DOH *so) {
|
||||||
int String_ungetc(DOH *so, int ch) {
|
int String_ungetc(DOH *so, int ch) {
|
||||||
String *s = (String *) so;
|
String *s = (String *) so;
|
||||||
if (ch == EOF) return ch;
|
if (ch == EOF) return ch;
|
||||||
if ((s->sp - s->pbi) <= 0) return EOF;
|
if (s->sp <= 0) return EOF;
|
||||||
if (s->pbi == 4) {
|
s->sp--;
|
||||||
s->pb[0] = s->pb[1];
|
|
||||||
s->pb[1] = s->pb[2];
|
|
||||||
s->pb[2] = s->pb[3];
|
|
||||||
s->pb[3] = (char) ch;
|
|
||||||
} else {
|
|
||||||
s->pb[s->pbi++] = (char) ch;
|
|
||||||
}
|
|
||||||
#ifdef DOH_STRING_UPDATE_LINES
|
#ifdef DOH_STRING_UPDATE_LINES
|
||||||
if (ch == '\n') s->line--;
|
if (ch == '\n') s->line--;
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -829,6 +804,5 @@ String_chop(DOH *s) {
|
||||||
}
|
}
|
||||||
assert (str->sp >= 0);
|
assert (str->sp >= 0);
|
||||||
str->hashkey = -1;
|
str->hashkey = -1;
|
||||||
str->pbi = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue