[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__ */