[eros-cvs] cvs commit: eros/src/base/cross/lib/erosimg StrBuf.hxx Makefile
shap@eros.cs.jhu.edu
shap@eros.cs.jhu.edu
Tue, 23 Jan 2001 16:08:58 -0500
shap 01/01/23 16:08:58
Modified: src/base/cross/bin/mkimage gram.y
src/base/cross/lib/erosimg Makefile
Added: src/base/cross/lib/erosimg StrBuf.hxx
Log:
Moved the StrBuf logic from mkimage into the erosimg library, so that
I can use it in capidl as well.
Revision Changes Path
1.51 +1 -93 eros/src/base/cross/bin/mkimage/gram.y
Index: gram.y
===================================================================
RCS file: /cvs/eros/src/base/cross/bin/mkimage/gram.y,v
retrieving revision 1.50
retrieving revision 1.51
diff -u -r1.50 -r1.51
--- gram.y 2001/01/20 20:30:15 1.50
+++ gram.y 2001/01/23 21:08:57 1.51
@@ -34,6 +34,7 @@
#include <erosimg/ExecImage.hxx>
#include <erosimg/PtrMap.hxx>
#include <erosimg/Parse.hxx>
+#include <erosimg/StrBuf.hxx>
#include <eros/Key.h>
#include <eros/ProcessState.h>
#include <disk/DiskKey.hxx>
@@ -1485,99 +1486,6 @@
;
%%
-
-class StrBuf {
- char *s;
- uint32_t limit;
- uint32_t m_len;
-
- void Grow()
- {
- char *news = new char[limit + 4096];
- limit += 4096;
- strcpy(s, news);
- delete [] s;
- s = news;
- }
-public:
- StrBuf()
- {
- s = new char[4096];
- limit = 4096;
- m_len = 0;
- }
-
- StrBuf& operator << (char c)
- {
- if (m_len + 1 >= limit)
- Grow();
-
- s[m_len++] = c;
- s[m_len] = 0;
- return *this;
- }
-
- StrBuf& operator << (int i)
- {
- char str[20];
- sprintf(str, "%d", i);
- int str_len = strlen(str);
-
- while (m_len + str_len >= limit)
- Grow();
-
- strcat(s, str);
- m_len += str_len;
- return *this;
- }
-
- StrBuf& operator << (unsigned u)
- {
- char str[20];
- sprintf(str, "%u", u);
- int str_len = strlen(str);
-
- while (m_len + str_len >= limit)
- Grow();
-
- strcat(s, str);
- m_len += str_len;
- return *this;
- }
-
- StrBuf& operator << (const char *str)
- {
- uint32_t str_len = strlen(str);
- while (m_len + str_len >= limit)
- Grow();
-
- strcat(s, str);
- m_len += str_len;
- return *this;
- }
-
- StrBuf& operator << (const InternedString& is)
- {
- (*this) << is.str();
- return *this;
- }
-
- const char *str() const
- {
- return s;
- }
-
- int len() const
- {
- return m_len;
- }
-
- StrBuf& operator << (const StrBuf& sb)
- {
- (*this) << sb.str();
- return *this;
- }
-};
int
main(int argc, char *argv[])
1.34 +1 -0 eros/src/base/cross/lib/erosimg/Makefile
Index: Makefile
===================================================================
RCS file: /cvs/eros/src/base/cross/lib/erosimg/Makefile,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -r1.33 -r1.34
--- Makefile 1999/10/13 22:35:27 1.33
+++ Makefile 2001/01/23 21:08:57 1.34
@@ -49,6 +49,7 @@
HEADERS= App.hxx Diag.hxx DiskDescrip.hxx ErosImage.hxx
HEADERS+= ExecArch.hxx ExecImage.hxx Intern.hxx Parse.hxx
HEADERS+= PtrMap.hxx StringPool.hxx ArchDescrip.hxx Volume.hxx
+HEADERS+= StrBuf.hxx
CLEANLIST += gen.*
1.1 eros/src/base/cross/lib/erosimg/StrBuf.hxx
Index: StrBuf.hxx
===================================================================
#ifndef __STRBUF_HXX__
#define __STRBUF_HXX__
/*
* Copyright (C) 2001, Jonathan S. Shapiro.
*
* This file is part of the EROS Operating System.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2,
* or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include <eros/target.h>
class StrBuf {
char *s;
uint32_t limit;
uint32_t m_len;
void Grow()
{
char *news = new char[limit + 4096];
limit += 4096;
strcpy(s, news);
delete [] s;
s = news;
}
public:
StrBuf()
{
s = new char[4096];
limit = 4096;
m_len = 0;
}
StrBuf& operator << (char c)
{
if (m_len + 1 >= limit)
Grow();
s[m_len++] = c;
s[m_len] = 0;
return *this;
}
StrBuf& operator << (int i)
{
char str[20];
sprintf(str, "%d", i);
int str_len = strlen(str);
while (m_len + str_len >= limit)
Grow();
strcat(s, str);
m_len += str_len;
return *this;
}
StrBuf& operator << (unsigned u)
{
char str[20];
sprintf(str, "%u", u);
int str_len = strlen(str);
while (m_len + str_len >= limit)
Grow();
strcat(s, str);
m_len += str_len;
return *this;
}
StrBuf& operator << (const char *str)
{
uint32_t str_len = strlen(str);
while (m_len + str_len >= limit)
Grow();
strcat(s, str);
m_len += str_len;
return *this;
}
StrBuf& operator << (const InternedString& is)
{
(*this) << is.str();
return *this;
}
const char *str() const
{
return s;
}
int len() const
{
return m_len;
}
StrBuf& operator << (const StrBuf& sb)
{
(*this) << sb.str();
return *this;
}
};
#endif /* __STRBUF_HXX__ */