You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4cxx-dev@logging.apache.org by ca...@apache.org on 2008/01/26 02:59:35 UTC

svn commit: r615425 - in /logging/log4cxx/trunk: build.xml src/main/cpp/locationinfo.cpp src/main/cpp/loggingevent.cpp src/main/cpp/objectoutputstream.cpp src/main/include/log4cxx/helpers/objectoutputstream.h src/main/include/log4cxx/spi/loggingevent.h

Author: carnold
Date: Fri Jan 25 17:59:34 2008
New Revision: 615425

URL: http://svn.apache.org/viewvc?rev=615425&view=rev
Log:
LOGCXX-7: Allow reuse of class descriptions for SocketAppender

Modified:
    logging/log4cxx/trunk/build.xml
    logging/log4cxx/trunk/src/main/cpp/locationinfo.cpp
    logging/log4cxx/trunk/src/main/cpp/loggingevent.cpp
    logging/log4cxx/trunk/src/main/cpp/objectoutputstream.cpp
    logging/log4cxx/trunk/src/main/include/log4cxx/helpers/objectoutputstream.h
    logging/log4cxx/trunk/src/main/include/log4cxx/spi/loggingevent.h

Modified: logging/log4cxx/trunk/build.xml
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/build.xml?rev=615425&r1=615424&r2=615425&view=diff
==============================================================================
--- logging/log4cxx/trunk/build.xml (original)
+++ logging/log4cxx/trunk/build.xml Fri Jan 25 17:59:34 2008
@@ -796,81 +796,9 @@
     </cc>
 </target>
 
-<target name="build-defaultinit-unittest" depends="build, build-cppunit"
-    description="Builds test of default init">
-    <mkdir dir="${log4cxx.lib.dir}/log4cxx-test_obj"/>
 
-    <property name="project.compiler" value="${compiler}"/>
-    <cc name="${project.compiler}"
-                exceptions="true"
-                outfile="${log4cxx.lib.dir}/log4cxx-defaultinit-test"
-                subsystem="console"
-                multithreaded="true"
-                outputfileproperty="log4cxx-defaultinit-test.exe"
-                outtype="executable"
-                objdir="${log4cxx.lib.dir}/log4cxx-test_obj"
-                debug="${debug}"
-                projectsOnly="${projectsOnly}">
-        <fileset dir="${tests.cpp.dir}" includes="defaultinit/*.cpp main.cpp">
-        </fileset>
-        <includepath path="${cppunit.include.dir}" if="cppunit.include.dir"/>
-        <includepath path="${include.dir}"/>
-        <includepath path="${apr.include.dir}"/>
-        <includepath path="${aprutil.include.dir}"/>
-        <defineset define="LOG4CXX_STATIC" if="is-static"/>
-        <defineset define="APR_DECLARE_STATIC" if="apr-static"/>
-        <defineset define="APU_DECLARE_STATIC" if="aprutil-static"/>
-        <defineset define="WIN32" if="is-windows"/>
-        <compilerarg value="${pic-option}" if="pic-option"/>
-
-        <libset libs="log4cxx${lib-suffix}" dir="${log4cxx.lib.dir}"/>
-        <libset libs="${cppunit.lib.name}${lib-suffix}" dir="${cppunit.lib.dir}" if="cppunit.lib.dir"/>
-        <libset libs="${cppunit.lib.name}${lib-suffix}" unless="cppunit.lib.dir"/>
-        <libset libs="dl" if="is-unix"/>
-        &libsets;
-
-        <project outfile="${project.dir}/log4cxx-defaultinit-test"
-                 type="${project.type}"
-                 if="project.if"/>
-    </cc>
-</target>
 
 
-<target name="make-unittest">
-    <mkdir dir="${log4cxx.lib.dir}/log4cxx-test_obj"/>
-
-    <property name="project.compiler" value="${compiler}"/>
-    <cc name="${project.compiler}"
-                exceptions="true"
-                outfile="${log4cxx.lib.dir}/${outfile.name}"
-                subsystem="console"
-                multithreaded="true"
-                outputfileproperty="${outfile.property}"
-                outtype="executable"
-                objdir="${log4cxx.lib.dir}/log4cxx-test_obj"
-                debug="${debug}"
-                projectsOnly="${projectsOnly}">
-        <fileset dir="${tests.cpp.dir}" includes="${src.pattern}">
-        </fileset>
-        <includepath path="${cppunit.include.dir}" if="cppunit.include.dir"/>
-        <includepath path="${include.dir}"/>
-        <includepath path="${apr.include.dir}"/>
-        <includepath path="${aprutil.include.dir}"/>
-        <defineset define="LOG4CXX_STATIC" if="is-static"/>
-        <defineset define="APR_DECLARE_STATIC" if="apr-static"/>
-        <defineset define="APU_DECLARE_STATIC" if="aprutil-static"/>
-        <defineset define="WIN32" if="is-windows"/>
-        <compilerarg value="${pic-option}" if="pic-option"/>
-
-        <libset libs="log4cxx${lib-suffix}" dir="${log4cxx.lib.dir}"/>
-        <libset libs="${cppunit.lib.name}${lib-suffix}" dir="${cppunit.lib.dir}" if="cppunit.lib.dir"/>
-        <libset libs="${cppunit.lib.name}${lib-suffix}" unless="cppunit.lib.dir"/>
-        &libsets;
-
-        <project outfile="${project.dir}/log4cxx-test" type="${project.type}" if="project.if"/>
-    </cc>
-</target>
-
 <target name="build-standalone-unittest"
     depends="build-cppunit"
     description="Builds a unit tests + log4cxx executable">
@@ -925,7 +853,7 @@
      </delete>
 </target>
 
-<target name="run-defaultinit-unittest" depends="build-defaultinit-unittest"
+<target name="run-defaultinit-unittest" depends="build-unittest"
     description="Runs default init unit tests">
 
     <mkdir dir="${tests.output.dir}"/>
@@ -943,7 +871,7 @@
     <delete file="${log4cxx.lib.dir}/log4*.xml"/>
     <copy tofile="${log4cxx.lib.dir}/log4j.properties"
        file="${defaultInit3.properties}" overwrite="true"/>
-    <exec executable="${log4cxx-defaultinit-test.exe}" dir="${log4cxx.lib.dir}"
+    <exec executable="${log4cxx-test.exe}" dir="${log4cxx.lib.dir}"
               failonerror="true">
             <arg value="TestCase3"/>
             <env key="DYLD_LIBRARY_PATH"
@@ -956,7 +884,7 @@
     <replace file="${log4cxx.lib.dir}/log4j.properties" token="D3" value="D4"/>
     <copy tofile="${log4cxx.lib.dir}/log4cxx.properties"
        file="${defaultInit3.properties}"/>
-    <exec executable="${log4cxx-defaultinit-test.exe}" dir="${log4cxx.lib.dir}"
+    <exec executable="${log4cxx-test.exe}" dir="${log4cxx.lib.dir}"
               failonerror="true">
             <arg value="TestCase3"/>
             <env key="DYLD_LIBRARY_PATH"
@@ -971,7 +899,7 @@
     <copy tofile="${log4cxx.lib.dir}/log4j.xml"
        file="${defaultInit.xml}"/>
     <copy todir="${log4cxx.lib.dir}" file="${tests.resources.dir}/input/xml/log4j.dtd"/>
-    <exec executable="${log4cxx-defaultinit-test.exe}" dir="${log4cxx.lib.dir}"
+    <exec executable="${log4cxx-test.exe}" dir="${log4cxx.lib.dir}"
               failonerror="true">
             <arg value="TestCase4"/>
             <env key="LD_LIBRARY_PATH"
@@ -985,7 +913,7 @@
 	<fileset dir="${tests.resources.dir}/output"/>
     </delete>
 
-    <exec executable="${log4cxx-defaultinit-test.exe}" dir="${tests.resources.dir}"
+    <exec executable="${log4cxx-test.exe}" dir="${tests.resources.dir}"
               failonerror="true">
             <arg value="TestCase3"/>
             <env key="LD_LIBRARY_PATH"
@@ -997,7 +925,7 @@
     </exec>
 
     <!--  test of LOG4CXX_CONFIGURATION -->
-    <exec executable="${log4cxx-defaultinit-test.exe}" dir="${tests.resources.dir}"
+    <exec executable="${log4cxx-test.exe}" dir="${tests.resources.dir}"
               failonerror="true">
             <arg value="TestCase3"/>
             <env key="LD_LIBRARY_PATH"

Modified: logging/log4cxx/trunk/src/main/cpp/locationinfo.cpp
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/cpp/locationinfo.cpp?rev=615425&r1=615424&r2=615425&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/main/cpp/locationinfo.cpp (original)
+++ logging/log4cxx/trunk/src/main/cpp/locationinfo.cpp Fri Jan 25 17:59:34 2008
@@ -146,19 +146,22 @@
 
 void LocationInfo::write(ObjectOutputStream& os, Pool& p) const {
     if (lineNumber == -1 && fileName == NA && methodName == NA_METHOD) {
-         os.writeByte(ObjectOutputStream::TC_NULL, p);
+         os.writeNull(p);
     } else {
         char prolog[] = {
-			0x73, 0x72, 0x00, 0x21, 0x6F, 0x72, 0x67, 0x2E, 
+			0x72, 0x00, 0x21, 0x6F, 0x72, 0x67, 0x2E, 
 			0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2E, 0x6C, 
 			0x6F, 0x67, 0x34, 0x6A, 0x2E, 0x73, 0x70, 0x69, 
 			0x2E, 0x4C, 0x6F, 0x63, 0x61, 0x74, 0x69, 0x6F, 
 			0x6E, 0x49, 0x6E, 0x66, 0x6F, 0xED, 0x99, 0xBB, 
 			0xE1, 0x4A, 0x91, 0xA5, 0x7C, 0x02, 0x00, 0x01, 
 			0x4C, 0x00, 0x08, 0x66, 0x75, 0x6C, 0x6C, 0x49, 
-			0x6E, 0x66, 0x6F, 0x71, 0x00, 0x7E, 0x00, 0x01, 
-			0x78, 0x70, 0x74 };
-		os.writeBytes(prolog, sizeof(prolog), p);
+			0x6E, 0x66, 0x6F, 
+            0x74, 0x00, 0x12, 0x4C, 0x6A, 
+                0x61, 0x76, 0x61, 0x2F, 0x6C, 0x61, 0x6E, 0x67, 
+                0x2F, 0x53, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x3B,
+			0x78, 0x70 };
+		os.writeProlog("org.apache.log4j.spi.LocationInfo", 2, prolog, sizeof(prolog), p);
         char* line = apr_itoa((apr_pool_t*) p.getAPRPool(), lineNumber);
         //
         //   construct Java-like fullInfo (replace "::" with ".")
@@ -185,12 +188,7 @@
         fullInfo.append(1, ':');
         fullInfo.append(line);
         fullInfo.append(1, ')');
-        size_t len = fullInfo.length();
-        char lenBytes[2];
-        lenBytes[1] = len & 0xFF;
-        lenBytes[0] = (len >> 8) & 0xFF;
-        os.writeBytes(lenBytes, sizeof(lenBytes), p);
-        os.writeBytes(fullInfo.data(), len, p);
+        os.writeUTFString(fullInfo, p);
     }
 }
 

Modified: logging/log4cxx/trunk/src/main/cpp/loggingevent.cpp
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/cpp/loggingevent.cpp?rev=615425&r1=615424&r2=615425&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/main/cpp/loggingevent.cpp (original)
+++ logging/log4cxx/trunk/src/main/cpp/loggingevent.cpp Fri Jan 25 17:59:34 2008
@@ -234,7 +234,7 @@
 
 
 
-void LoggingEvent::writeClassDesc(ObjectOutputStream& os, Pool& p) {
+void LoggingEvent::writeProlog(ObjectOutputStream& os, Pool& p)  {
      char classDesc[] = {
         0x72, 0x00, 0x21, 
         0x6F, 0x72, 0x67, 0x2E, 0x61, 0x70, 0x61, 0x63, 
@@ -265,13 +265,22 @@
         0x00, 0x15, 0x4C, 0x6A, 0x61, 0x76, 0x61, 0x2F, 
         0x75, 0x74, 0x69, 0x6C, 0x2F, 0x48, 0x61, 0x73, 
         0x68, 0x74, 0x61, 0x62, 0x6C, 0x65, 0x3B, 0x4C, 
-        0x00, 0x03, 0x6E, 0x64, 0x63, 0x71, 0x00, 0x7E, 
-        0x00, 0x01, 0x4C, 0x00, 0x0F, 0x72, 0x65, 0x6E, 
+        0x00, 0x03, 0x6E, 0x64, 0x63, 
+        0x74, 0x00, 0x12, 0x4C, 0x6A, 
+        0x61, 0x76, 0x61, 0x2F, 0x6C, 0x61, 0x6E, 0x67, 
+        0x2F, 0x53, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x3B,
+        0x4C, 0x00, 0x0F, 0x72, 0x65, 0x6E, 
         0x64, 0x65, 0x72, 0x65, 0x64, 0x4D, 0x65, 0x73, 
-        0x73, 0x61, 0x67, 0x65, 0x71, 0x00, 0x7E, 0x00, 
-        0x01, 0x4C, 0x00, 0x0A, 0x74, 0x68, 0x72, 0x65, 
-        0x61, 0x64, 0x4E, 0x61, 0x6D, 0x65, 0x71, 0x00, 
-        0x7E, 0x00, 0x01, 0x4C, 0x00, 0x0D, 0x74, 0x68, 
+        0x73, 0x61, 0x67, 0x65, 
+        0x74, 0x00, 0x12, 0x4C, 0x6A, 
+        0x61, 0x76, 0x61, 0x2F, 0x6C, 0x61, 0x6E, 0x67, 
+        0x2F, 0x53, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x3B,
+        0x4C, 0x00, 0x0A, 0x74, 0x68, 0x72, 0x65, 
+        0x61, 0x64, 0x4E, 0x61, 0x6D, 0x65, 
+        0x74, 0x00, 0x12, 0x4C, 0x6A, 
+        0x61, 0x76, 0x61, 0x2F, 0x6C, 0x61, 0x6E, 0x67, 
+        0x2F, 0x53, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x3B,
+        0x4C, 0x00, 0x0D, 0x74, 0x68, 
         0x72, 0x6F, 0x77, 0x61, 0x62, 0x6C, 0x65, 0x49, 
         0x6E, 0x66, 0x6F, 0x74, 0x00, 0x2B, 0x4C, 0x6F, 
         0x72, 0x67, 0x2F, 0x61, 0x70, 0x61, 0x63, 0x68, 
@@ -281,13 +290,12 @@
         0x6F, 0x72, 0x6D, 0x61, 0x74, 0x69, 0x6F, 0x6E, 
         0x3B, 0x78, 0x70 }; 
 
-     os.writeBytes(classDesc, sizeof(classDesc), p);
-     
+     os.writeProlog("org.apache.log4j.spi.LoggingEvent", 
+        8, classDesc, sizeof(classDesc), p);
 }
 
 void LoggingEvent::write(helpers::ObjectOutputStream& os, Pool& p) const {
-      os.writeByte(ObjectOutputStream::TC_OBJECT, p);
-      writeClassDesc(os, p);
+      writeProlog(os, p);
       // mdc and ndc lookup required should always be false
       char lookupsRequired[] = { 0, 0 };
       os.writeBytes(lookupsRequired, sizeof(lookupsRequired), p);
@@ -295,23 +303,23 @@
       os.writeObject(logger->getName(), p);
       locationInfo.write(os, p);
       if (mdcCopy == 0 || mdcCopy->size() == 0) {
-          os.writeByte(ObjectOutputStream::TC_NULL, p);
+          os.writeNull(p);
       } else {
           os.writeObject(*mdcCopy, p);
       }
       if (ndc == 0) {
-          os.writeByte(ObjectOutputStream::TC_NULL, p);
+          os.writeNull(p);
       } else {
           os.writeObject(*ndc, p);
       }
       os.writeObject(message, p);
       os.writeObject(threadName, p);
       //  throwable
-      os.writeByte(ObjectOutputStream::TC_NULL, p);
+      os.writeNull(p);
       os.writeByte(ObjectOutputStream::TC_BLOCKDATA, p);
       os.writeByte(0x04, p);
       os.writeInt(level->toInt(), p);
-      os.writeByte(ObjectOutputStream::TC_NULL, p);
+      os.writeNull(p);
       os.writeByte(ObjectOutputStream::TC_ENDBLOCKDATA, p);
 }
 

Modified: logging/log4cxx/trunk/src/main/cpp/objectoutputstream.cpp
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/cpp/objectoutputstream.cpp?rev=615425&r1=615424&r2=615425&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/main/cpp/objectoutputstream.cpp (original)
+++ logging/log4cxx/trunk/src/main/cpp/objectoutputstream.cpp Fri Jan 25 17:59:34 2008
@@ -28,7 +28,10 @@
 IMPLEMENT_LOG4CXX_OBJECT(ObjectOutputStream)
 
 ObjectOutputStream::ObjectOutputStream(OutputStreamPtr outputStream, Pool& p)
-     : os(outputStream) , utf8Encoder(CharsetEncoder::getUTF8Encoder())
+     : os(outputStream) , 
+       utf8Encoder(CharsetEncoder::getUTF8Encoder()), 
+       objectHandle(0x7E0000),
+       classDescriptions(new ClassDescriptionMap())
 {
    char start[] = { 0xAC, 0xED, 0x00, 0x05 };
    ByteBuffer buf(start, sizeof(start));
@@ -36,6 +39,7 @@
 }
 
 ObjectOutputStream::~ObjectOutputStream() {
+    delete classDescriptions;
 }
 
 void ObjectOutputStream::close(Pool& p) {
@@ -47,8 +51,26 @@
 }
 
 void ObjectOutputStream::writeObject(const LogString& val, Pool& p) {
+   objectHandle++;
    writeByte(TC_STRING, p);
-   writeUTF(val, p);
+   char bytes[2];
+#if LOG4CXX_LOGCHAR_IS_UTF8
+    size_t len = val.size();
+    ByteBuffer dataBuf(const_cast<char*>(val.data()), val.size()); 
+#else
+    size_t maxSize = 6 * val.size();
+    char* data = (char*) apr_palloc((apr_pool_t*) p.getAPRPool(), maxSize);
+    ByteBuffer dataBuf(data, maxSize);
+    LogString::const_iterator iter(val.begin());
+    utf8Encoder->encode(val, iter, dataBuf); 
+    dataBuf.flip();
+    size_t len = dataBuf.limit();
+#endif
+   bytes[1] = len & 0xFF;
+   bytes[0] = (len >> 8) & 0xFF;
+   ByteBuffer lenBuf(bytes, sizeof(bytes));
+   os->write(lenBuf, p);
+   os->write(dataBuf, p);
 }
 
 
@@ -57,7 +79,7 @@
     //  TC_OBJECT and the classDesc for java.util.Hashtable
     //
     char prolog[] = {
-        0x73, 0x72, 0x00, 0x13, 0x6A, 0x61, 0x76, 0x61, 
+        0x72, 0x00, 0x13, 0x6A, 0x61, 0x76, 0x61, 
         0x2E, 0x75, 0x74, 0x69, 0x6C, 0x2E, 0x48, 0x61, 
         0x73, 0x68, 0x74, 0x61, 0x62, 0x6C, 0x65, 0x13, 
         0xBB, 0x0F, 0x25, 0x21, 0x4A, 0xE4, 0xB8, 0x03, 
@@ -65,8 +87,7 @@
         0x64, 0x46, 0x61, 0x63, 0x74, 0x6F, 0x72, 0x49, 
         0x00, 0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 
         0x6F, 0x6C, 0x64, 0x78, 0x70  };
-    ByteBuffer prologBuf(prolog, sizeof(prolog));
-    os->write(prologBuf, p);
+    writeProlog("java.util.Hashtable", 1, prolog, sizeof(prolog), p);
     //
     //   loadFactor = 0.75, threshold = 5, blockdata start, buckets.size = 7
     char data[] = { 0x3F, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 
@@ -90,27 +111,21 @@
     writeByte(TC_ENDBLOCKDATA, p);
 }
 
-void ObjectOutputStream::writeUTF(const LogString& val, Pool& p) {
-    char bytes[2];
-#if LOG4CXX_LOGCHAR_IS_UTF8
+void ObjectOutputStream::writeUTFString(const std::string& val, Pool& p) {
+    char bytes[3];
     size_t len = val.size();
     ByteBuffer dataBuf(const_cast<char*>(val.data()), val.size()); 
-#else
-    size_t maxSize = 6 * val.size();
-    char* data = (char*) apr_palloc((apr_pool_t*) p.getAPRPool(), maxSize);
-    ByteBuffer dataBuf(data, maxSize);
-    LogString::const_iterator iter(val.begin());
-    utf8Encoder->encode(val, iter, dataBuf); 
-    dataBuf.flip();
-    size_t len = dataBuf.limit();
-#endif
-   bytes[1] = len & 0xFF;
-   bytes[0] = (len >> 8) & 0xFF;
+   objectHandle++;
+   bytes[0] = 0x74;
+   bytes[1] = (len >> 8) & 0xFF;
+   bytes[2] = len & 0xFF;
    ByteBuffer lenBuf(bytes, sizeof(bytes));
    os->write(lenBuf, p);
    os->write(dataBuf, p);
 }
 
+
+
 void ObjectOutputStream::writeByte(char val, Pool& p) {
    ByteBuffer buf(&val, 1);
    os->write(buf, p);
@@ -144,3 +159,33 @@
    ByteBuffer buf(const_cast<char*>(bytes), len);
    os->write(buf, p);
 }
+
+void ObjectOutputStream::writeNull(Pool& p) {
+   writeByte(TC_NULL, p);
+}
+
+void ObjectOutputStream::writeProlog(const char* className,
+                        int classDescIncrement,
+                        char* classDesc,
+                        size_t len,
+                        Pool& p) {
+    ClassDescriptionMap::const_iterator match = classDescriptions->find(className);
+    if (match != classDescriptions->end()) {
+        char bytes[6];
+        bytes[0] = TC_OBJECT;
+        bytes[1] = TC_REFERENCE;
+        bytes[2] = (match->second >> 24) & 0xFF;
+        bytes[3] = (match->second >> 16) & 0xFF;
+        bytes[4] = (match->second >> 8) & 0xFF;
+        bytes[5] = match->second & 0xFF;
+        ByteBuffer buf(bytes, sizeof(bytes));
+        os->write(buf, p);
+        objectHandle++;
+    } else {
+        classDescriptions->insert(ClassDescriptionMap::value_type(className, objectHandle));
+        writeByte(TC_OBJECT, p);
+        ByteBuffer buf(classDesc, len);
+        os->write(buf, p);
+        objectHandle += (classDescIncrement + 1);
+    }
+} 

Modified: logging/log4cxx/trunk/src/main/include/log4cxx/helpers/objectoutputstream.h
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/include/log4cxx/helpers/objectoutputstream.h?rev=615425&r1=615424&r2=615425&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/main/include/log4cxx/helpers/objectoutputstream.h (original)
+++ logging/log4cxx/trunk/src/main/include/log4cxx/helpers/objectoutputstream.h Fri Jan 25 17:59:34 2008
@@ -44,13 +44,17 @@
 
                   void close(Pool& p);
                   void flush(Pool& p);
-                  void writeUTF(const LogString&, Pool& p);
                   void writeObject(const LogString&, Pool& p);
+                  void writeUTFString(const std::string&, Pool& p);
                   void writeObject(const MDC::Map& mdc, Pool& p);
                   void writeInt(int val, Pool& p);
                   void writeLong(log4cxx_time_t val, Pool& p);
-                  void writeByte(char val, Pool& p);
-                  void writeBytes(const char* bytes, size_t len, Pool& p);
+                  void writeProlog(const char* className,
+                        int classDescIncrement,
+                        char* bytes,
+                        size_t len,
+                        Pool& p);
+                  void writeNull(Pool& p);
 
                   enum { STREAM_MAGIC = 0xACED };
                   enum { STREAM_VERSION = 5 };
@@ -67,12 +71,18 @@
                      SC_WRITE_METHOD = 0x01,
                      SC_SERIALIZABLE = 0x02 };
 
+                  void writeByte(char val, Pool& p);
+                  void writeBytes(const char* bytes, size_t len, Pool& p);
+
           private:
                   ObjectOutputStream(const ObjectOutputStream&);
                   ObjectOutputStream& operator=(const ObjectOutputStream&);
                      
                   OutputStreamPtr os;
                   log4cxx::helpers::CharsetEncoderPtr utf8Encoder;
+                  unsigned int objectHandle;
+                  typedef std::map<std::string, unsigned int> ClassDescriptionMap;
+                  ClassDescriptionMap* classDescriptions;
           };
           
           LOG4CXX_PTR_DEF(ObjectOutputStream)          

Modified: logging/log4cxx/trunk/src/main/include/log4cxx/spi/loggingevent.h
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/include/log4cxx/spi/loggingevent.h?rev=615425&r1=615424&r2=615425&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/main/include/log4cxx/spi/loggingevent.h (original)
+++ logging/log4cxx/trunk/src/main/include/log4cxx/spi/loggingevent.h Fri Jan 25 17:59:34 2008
@@ -262,7 +262,7 @@
                        LoggingEvent& operator=(const LoggingEvent&);
                        static const LogString getCurrentThreadName();
                        
-                       static void writeClassDesc(log4cxx::helpers::ObjectOutputStream& os, log4cxx::helpers::Pool& p);
+                       static void writeProlog(log4cxx::helpers::ObjectOutputStream& os, log4cxx::helpers::Pool& p);
                        
                 };