Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

Tools/Streams/InStreams.cpp

Go to the documentation of this file.
00001 /**
00002 * @file InStreams.cpp
00003 *
00004 * Implementation of in stream classes.
00005 *
00006 * @author Thomas Röfer
00007 * @author Martin Lötzsch
00008 */
00009 
00010 #include "InStreams.h"
00011 #include <string.h>
00012 #include "Platform/GTAssert.h"
00013 
00014 void StreamReader::skipData(int size, PhysicalInStream& stream)
00015 {
00016   // default implementation
00017   char* dummy = new char[size];
00018   readData(dummy, size, stream);
00019   delete [] dummy;
00020 }
00021 
00022 void PhysicalInStream::skipInStream(int size)
00023 {
00024   // default implementation
00025   char* dummy = new char[size];
00026   readFromStream(dummy, size);
00027   delete [] dummy;
00028 }
00029 
00030 void InText::readString(char* value, PhysicalInStream& stream)
00031 {
00032   skipWhitespace(stream);
00033   while(!isEof(stream) && !isWhitespace())
00034   {
00035     if(theChar == '\\')
00036       nextChar(stream);
00037     *value++ = theChar;
00038     if(!isEof(stream))
00039       nextChar(stream);
00040   }
00041   *value = 0;
00042   skipWhitespace(stream);
00043 }
00044 
00045 void InText::readData(void *p,int size, PhysicalInStream& stream)
00046 {
00047   for(int i = 0; i < size; ++i)
00048     readChar(*((char*&) p)++,stream);
00049 }
00050 
00051 bool InText::isWhitespace()
00052 {
00053   return theChar == ' ' || theChar == '\n' || theChar == '\r' || theChar == '\t';
00054 }
00055 
00056 void InText::skipWhitespace(PhysicalInStream& stream)
00057 {
00058   while(!isEof(stream) && isWhitespace())
00059     nextChar(stream);
00060 }
00061 
00062 void InConfig::create(const char* sectionName, PhysicalInStream& stream)
00063 {
00064   if(stream.exists() && sectionName) 
00065   {
00066     char fileEntry[200];
00067     char section[200];
00068     
00069     ASSERT(strlen(sectionName) + 2 < sizeof(section));
00070     strcpy(section,"[");
00071     strcat(section,sectionName);
00072     strcat(section,"]");
00073     
00074     while(!isEof(stream)) 
00075     {
00076       readString(fileEntry,stream);
00077       if(!strcmp(fileEntry,section)) 
00078         break;
00079     }
00080     readSection = true;
00081   }
00082 }
00083 
00084 bool InConfig::isWhitespace()
00085 {
00086   return theChar == '/' || theChar == '#' || InText::isWhitespace();
00087 }
00088 
00089 void InConfig::skipWhitespace(PhysicalInStream& stream)
00090 {
00091   while(!isEof(stream) && isWhitespace())
00092   {
00093     while(!isEof(stream) && InText::isWhitespace())
00094       nextChar(stream);
00095     if(!isEof(stream))
00096       if(theChar == '/')
00097       {
00098         nextChar(stream);
00099         if(theChar == '/')
00100           skipLine(stream);
00101         else if(theChar == '*')
00102           skipComment(stream);
00103         else
00104           ASSERT(false); // "/" used in stream
00105       }
00106       else if(theChar == '#')
00107         skipLine(stream);
00108   }
00109 }
00110 
00111 void InConfig::nextChar(PhysicalInStream& stream) 
00112 {
00113   InText::nextChar(stream);
00114   if (readSection && theChar == '[')
00115     while (!isEof(stream)) 
00116       InText::nextChar(stream);
00117 }
00118 
00119 void InConfig::skipLine(PhysicalInStream& stream)
00120 {
00121   while(!isEof(stream) && theChar != '\n')
00122     nextChar(stream);
00123   if(!isEof(stream))
00124     nextChar(stream);
00125 }
00126 
00127 void InConfig::skipComment(PhysicalInStream& stream)
00128 {
00129   while(!isEof(stream) && theChar != '/')
00130   {
00131     while(!isEof(stream) && theChar != '*')
00132       nextChar(stream);
00133     if(!isEof(stream))
00134       nextChar(stream);
00135   }
00136   if(!isEof(stream))
00137     nextChar(stream);
00138 }
00139 
00140 void InMemory::readFromStream(void* p, int size)
00141 {
00142   if (memory!=0) 
00143   { 
00144     memcpy(p,memory,size); 
00145     memory += size; 
00146   }
00147 }

Generated on Mon Mar 20 22:00:09 2006 for GT2005 by doxygen 1.3.6