peiyongz    2004/03/09 12:59:28

  Modified:    c/src/xercesc/internal XTemplateSerializer.cpp
  Log:
  restore key string from string pool from datatypevalidator
  
  Revision  Changes    Path
  1.9       +42 -5     xml-xerces/c/src/xercesc/internal/XTemplateSerializer.cpp
  
  Index: XTemplateSerializer.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/XTemplateSerializer.cpp,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- XTemplateSerializer.cpp   1 Mar 2004 23:20:46 -0000       1.8
  +++ XTemplateSerializer.cpp   9 Mar 2004 20:59:28 -0000       1.9
  @@ -57,6 +57,9 @@
   /*
    * $Id$
    * $Log$
  + * Revision 1.9  2004/03/09 20:59:28  peiyongz
  + * restore key string from string pool from datatypevalidator
  + *
    * Revision 1.8  2004/03/01 23:20:46  peiyongz
    * For RefHashTableOf/RefHash2KeysTableOf/RefHashTable3KeysIdPool,
    * resovle "key string" either from the data itself or the GrammarPool's StringPool.
  @@ -1295,7 +1298,15 @@
   
           while (e.hasMoreElements())
           {
  -            DatatypeValidator* data = objToStore->get(e.nextElementKey());          
  
  +            /***
  +             * to do: verify valid id
  +             *
  +             *    XMLCh*  key = (XMLCh*) e.nextElementKey();
  +             *    unsigned int id = serEng.getStringPool()->getId(key);
  +             *    if (id == 0)
  +             *        throw exception
  +             ***/
  +            DatatypeValidator* data = objToStore->get(e.nextElementKey());
               DatatypeValidator::storeDV(serEng, data);
           }
       }
  @@ -1329,12 +1340,37 @@
           serEng>>itemNumber;
   
           for (int itemIndex = 0; itemIndex < itemNumber; itemIndex++)
  -        {
  +        {           
               DatatypeValidator*  data;
               data = DatatypeValidator::loadDV(serEng);
   
  -            XMLCh*  key = (XMLCh*) data->getTypeName();
  -            (*objToLoad)->put((void*)key, data);
  +            /***
  +             *   restore the key
  +             ***/
  +            XMLCh*       typeUri   = (XMLCh*) data->getTypeUri();
  +            XMLCh*       typeLocal = (XMLCh*) data->getTypeLocalName();
  +            unsigned int uriLen    = XMLString::stringLen(typeUri);
  +            unsigned int localLen  = XMLString::stringLen(typeLocal);
  +            XMLCh*       typeKey   = (XMLCh*) serEng.getMemoryManager()->allocate
  +                                     (
  +                                       (uriLen + localLen + 2) * sizeof(XMLCh)
  +                                     );
  +            // "typeuri,typeLocal"
  +            XMLString::moveChars(typeKey, typeUri, uriLen+1);
  +            typeKey[uriLen] = chComma;
  +            XMLString::moveChars(&typeKey[uriLen+1], typeLocal, localLen+1);
  +            typeKey[uriLen + localLen + 1] = chNull;
  +            ArrayJanitor<XMLCh> janName(typeKey, serEng.getMemoryManager());
  +            
  +            /*
  +             * get the string from string pool
  +             *
  +             *  to do:
  +             ***/
  +            unsigned int id = serEng.getStringPool()->getId(typeKey);   
  +            XMLCh* refKey = (XMLCh*) serEng.getStringPool()->getValueForId(id);     
 
  +
  +            (*objToLoad)->put((void*)refKey, data);
           }
       }
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to