dbertoni    2004/08/03 09:49:53

  Modified:    c/src/xalanc/XSLT ElemCopyOf.hpp Stylesheet.cpp
                        Stylesheet.hpp StylesheetConstructionContext.hpp
                        StylesheetConstructionContextDefault.cpp
                        StylesheetConstructionContextDefault.hpp
  Added:       c/src/xalanc/XSLT XalanMatchPatternData.cpp
                        XalanMatchPatternData.hpp
                        XalanMatchPatternDataAllocator.cpp
                        XalanMatchPatternDataAllocator.hpp
  Log:
  Removed use of std::deque in Stylesheet class.
  
  Revision  Changes    Path
  1.8       +2 -6      xml-xalan/c/src/xalanc/XSLT/ElemCopyOf.hpp
  
  Index: ElemCopyOf.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/xalanc/XSLT/ElemCopyOf.hpp,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- ElemCopyOf.hpp    31 Jul 2004 05:08:49 -0000      1.7
  +++ ElemCopyOf.hpp    3 Aug 2004 16:49:52 -0000       1.8
  @@ -17,12 +17,8 @@
   #define XALAN_ELEMCOPYOF_HEADER_GUARD 
   
   /**
  - * $Id$
  - * 
  - * 
  - * $State$
  - * 
  - * @author Myriam Midy (Myriam_Midy @lotus.com 
  + * @author David Bertoni ([EMAIL PROTECTED])
  + * @author Matthew Hoyt ([EMAIL PROTECTED])
    */
   
   // Base include file.  Must be first.
  
  
  
  1.12      +33 -55    xml-xalan/c/src/xalanc/XSLT/Stylesheet.cpp
  
  Index: Stylesheet.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/xalanc/XSLT/Stylesheet.cpp,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- Stylesheet.cpp    6 Apr 2004 18:38:29 -0000       1.11
  +++ Stylesheet.cpp    3 Aug 2004 16:49:52 -0000       1.12
  @@ -63,6 +63,7 @@
   #include "KeyTable.hpp"
   #include "StylesheetConstructionContext.hpp"
   #include "StylesheetExecutionContext.hpp"
  +#include "XalanMatchPatternData.hpp"
   
   
   
  @@ -108,7 +109,6 @@
        m_rootPatternList(),
        m_piPatternList(),
        m_nodePatternList(),
  -     m_matchPattern2Container(),
        m_patternCount(0),
        m_elemDecimalFormats(),
        m_namespacesHandler()
  @@ -375,13 +375,13 @@
   static void
   addToList(
                        Stylesheet::PatternTableVectorType&             theList,
  -                     const Stylesheet::MatchPattern2*                
thePattern)
  +                     const XalanMatchPatternData*                thePattern)
   {
        typedef Stylesheet::size_type   size_type;
        assert(thePattern != 0);
   
        const double            thePatternPriority = 
thePattern->getPriorityOrDefault();
  -     const size_type         thePatternPosition = 
thePattern->getPositionInStylesheet();
  +     const size_type         thePatternPosition = thePattern->getPosition();
   
        typedef Stylesheet::PatternTableVectorType      PatternTableListType;
        typedef PatternTableListType::iterator          iterator;
  @@ -399,7 +399,7 @@
                        break;
                }
                else if (thePatternPriority == theCurrentPriority &&
  -                              thePatternPosition > 
(*theCurrent)->getPositionInStylesheet())
  +                              thePatternPosition > 
(*theCurrent)->getPosition())
                {
                        break;
                }
  @@ -550,8 +550,6 @@
   
        addToTable(m_elementPatternTable, m_elementAnyPatternList);
        addToTable(m_attributePatternTable, m_attributeAnyPatternList);
  -
  -     m_patternCount = m_matchPattern2Container.size();
   }
   
   
  @@ -666,24 +664,6 @@
   
   
   
  -double
  -Stylesheet::MatchPattern2::getPriorityOrDefault() const
  -{
  -     const double    templatePriority =
  -             m_template->getPriority();
  -
  -     if (DoubleSupport::isNegativeInfinity(templatePriority) == true)
  -     {
  -             return XPath::getMatchScoreValue(m_priority);
  -     }
  -     else
  -     {
  -             return templatePriority;
  -     }
  -}
  -
  -
  -
   void
   Stylesheet::addTemplate(
                        ElemTemplate*                                   
theTemplate,
  @@ -781,17 +761,16 @@
                                
                                tempString = data[i].getString();
   
  -                             m_matchPattern2Container.push_back(
  -                                     MatchPattern2(
  +                             const XalanMatchPatternData* const      
newMatchPat =
  +                                 
constructionContext.createXalanMatchPatternData(
                                                *theTemplate,
  -                                             m_matchPattern2Container.size(),
  +                                             m_patternCount,
                                                tempString,
                                                *xp,
                                                
xp->getExpression().getCurrentPattern(),
  -                                             data[i].getDefaultPriority()));
  +                                             data[i].getDefaultPriority());
   
  -                             const MatchPattern2* const      newMatchPat =
  -                                     &m_matchPattern2Container.back();
  +                ++m_patternCount;
   
                                // Always put things on the front of the list, 
so
                                // templates later in the stylesheet are always
  @@ -890,8 +869,8 @@
   
   void
   Stylesheet::addObjectIfNotFound(
  -                     const MatchPattern2*            thePattern,
  -                     PatternTableVectorType&         theVector)
  +                     const XalanMatchPatternData*    thePattern,
  +                     PatternTableVectorType&             theVector)
   {
        XALAN_USING_STD(find)
   
  @@ -912,9 +891,9 @@
   
   inline void
   Stylesheet::addObjectIfNotFound(
  -                     const MatchPattern2*    thePattern,
  -                     const MatchPattern2*    thePatternArray[],
  -                     unsigned int&                   thePatternArraySize)
  +                     const XalanMatchPatternData*    thePattern,
  +                     const XalanMatchPatternData*    thePatternArray[],
  +                     unsigned int&                           
thePatternArraySize)
   {
        assert(thePattern != 0 && thePatternArray != 0);
   
  @@ -950,7 +929,7 @@
   
   
   inline const Stylesheet::PatternTableVectorType* 
  -Stylesheet::locateElementMatchPatternList2(const XalanDOMString&     
theName) const
  +Stylesheet::locateElementMatchPatternDataList(const XalanDOMString&      
theName) const
   {
        assert(m_elementPatternTableEnd == m_elementPatternTable.end());
   
  @@ -970,7 +949,7 @@
   
   
   inline const Stylesheet::PatternTableVectorType* 
  -Stylesheet::locateAttributeMatchPatternList2(const XalanDOMString&   
theName) const
  +Stylesheet::locateAttributeMatchPatternDataList(const XalanDOMString&        
theName) const
   {
        assert(m_attributePatternTableEnd == m_attributePatternTable.end());
   
  @@ -990,7 +969,7 @@
   
   
   inline const Stylesheet::PatternTableVectorType*
  -Stylesheet::locateMatchPatternList2(
  +Stylesheet::locateMatchPatternDataList(
                        const XalanNode&                theNode,
                        XalanNode::NodeType             targetNodeType) const
   {
  @@ -999,7 +978,7 @@
        switch(targetNodeType)
        {
        case XalanNode::ELEMENT_NODE:
  -             return 
locateElementMatchPatternList2(DOMServices::getLocalNameOfNode(theNode));
  +             return 
locateElementMatchPatternDataList(DOMServices::getLocalNameOfNode(theNode));
                break;
   
        case XalanNode::PROCESSING_INSTRUCTION_NODE:
  @@ -1012,7 +991,7 @@
   #else
                assert(DOMServices::isNamespaceDeclaration(static_cast<const 
XalanAttr&>(theNode)) == false);
   #endif
  -             return 
locateAttributeMatchPatternList2(DOMServices::getLocalNameOfNode(theNode));
  +             return 
locateAttributeMatchPatternDataList(DOMServices::getLocalNameOfNode(theNode));
                break;
   
        case XalanNode::CDATA_SECTION_NODE:
  @@ -1081,7 +1060,6 @@
   {
        assert(targetNode != 0);
        assert(targetNode->getNodeType() == targetNodeType);
  -     assert(m_patternCount == m_matchPattern2Container.size());
   
        if(m_isWrapperless == true)
        {
  @@ -1100,7 +1078,7 @@
                        // Points to the current list of match patterns.  Note
                        // that this may point to more than one table.
                        const PatternTableVectorType*   matchPatternList =
  -                                     locateMatchPatternList2(*targetNode, 
targetNodeType);
  +                                     locateMatchPatternDataList(*targetNode, 
targetNodeType);
                        assert(matchPatternList != 0);
   
                        PatternTableVectorType::const_iterator          
theCurrentEntry =
  @@ -1111,7 +1089,7 @@
   
                        while(theCurrentEntry != theTableEnd)
                        {
  -                             const MatchPattern2*    matchPat = 
*theCurrentEntry;
  +                             const XalanMatchPatternData*    matchPat = 
*theCurrentEntry;
                                assert(matchPat != 0);
   
                                const ElemTemplate*     const   rule = 
matchPat->getTemplate();
  @@ -1155,7 +1133,7 @@
                else
                {
                        const PatternTableVectorType*   matchPatternList =
  -                                     locateMatchPatternList2(*targetNode, 
targetNodeType);
  +                                     locateMatchPatternDataList(*targetNode, 
targetNodeType);
                        assert(matchPatternList != 0);
   
                        PatternTableVectorType::const_iterator          
theCurrentEntry =
  @@ -1166,7 +1144,7 @@
   
                        if (theCurrentEntry != theTableEnd)
                        {
  -                             const MatchPattern2*    bestMatchedPattern = 0; 
// Syncs with bestMatchedRule
  +                             const XalanMatchPatternData*    
bestMatchedPattern = 0; // Syncs with bestMatchedRule
                                const double                    
matchScoreNoneValue = 
                                        
XPath::getMatchScoreValue(XPath::eMatchScoreNone);
   
  @@ -1175,18 +1153,18 @@
                                unsigned int                    nConflicts = 0;
   
                                // Use a stack-based array when possible...
  -                             const MatchPattern2*    conflictsArray[100];
  +                             const XalanMatchPatternData*    
conflictsArray[100];
   
  -                             XalanArrayAutoPtr<const MatchPattern2*>         
conflictsVector;
  +                             XalanArrayAutoPtr<const XalanMatchPatternData*> 
        conflictsVector;
   
  -                             const MatchPattern2**   conflicts = 0;
  +                             const XalanMatchPatternData**   conflicts = 0;
   
  -                             const XalanDOMString*   prevPat = 0;
  -                             const MatchPattern2*    prevMatchPat = 0;
  +                             const XalanDOMString*           prevPat = 0;
  +                             const XalanMatchPatternData*    prevMatchPat = 
0;
   
                                do
                                {
  -                                     const MatchPattern2*    matchPat = 
*theCurrentEntry;
  +                                     const XalanMatchPatternData*    
matchPat = *theCurrentEntry;
                                        double                                  
matchPatPriority = matchScoreNoneValue;
                                        assert(matchPat != 0);
   
  @@ -1251,7 +1229,7 @@
                                                                        {
                                                                                
if (m_patternCount > sizeof(conflictsArray) / sizeof(conflictsArray[0]))
                                                                                
{
  -                                                                             
        conflictsVector.reset(new const MatchPattern2*[m_patternCount]);
  +                                                                             
        conflictsVector.reset(new const XalanMatchPatternData*[m_patternCount]);
   
                                                                                
        conflicts = conflictsVector.get();
                                                                                
}
  @@ -1289,15 +1267,15 @@
                                        
                                        for(unsigned int i = 0; i < nConflicts; 
i++)
                                        {
  -                                             const MatchPattern2* const      
conflictPat = conflicts[i];
  +                                             const XalanMatchPatternData* 
const      conflictPat = conflicts[i];
   
                                                if(0 != i)
                                                {
                                                        conflictsString += 
XALAN_STATIC_UCODE_STRING(", ");
   
                                                        // Find the furthest 
one towards the bottom of the document.
  -                                                     
if(conflictPat->getPositionInStylesheet() >
  -                                                             
bestMatchedPattern->getPositionInStylesheet())
  +                                                     
if(conflictPat->getPosition() >
  +                                                             
bestMatchedPattern->getPosition())
                                                        {
                                                                
bestMatchedPattern = conflictPat;
                                                        }
  
  
  
  1.11      +22 -159   xml-xalan/c/src/xalanc/XSLT/Stylesheet.hpp
  
  Index: Stylesheet.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/xalanc/XSLT/Stylesheet.hpp,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- Stylesheet.hpp    31 Jul 2004 06:05:08 -0000      1.10
  +++ Stylesheet.hpp    3 Aug 2004 16:49:52 -0000       1.11
  @@ -24,7 +24,6 @@
   
   
   
  -#include <deque>
   #include <map>
   
   
  @@ -36,6 +35,7 @@
   #include <xalanc/XalanDOM/XalanNode.hpp>
   
   
  +
   #include <xalanc/PlatformSupport/PrefixResolver.hpp>
   
   
  @@ -48,6 +48,7 @@
   
   #include <xalanc/XSLT/NamespacesHandler.hpp>
   #include <xalanc/XSLT/KeyDeclaration.hpp>
  +#include <xalanc/XSLT/StylesheetConstructionContext.hpp>
   #include <xalanc/XSLT/StylesheetExecutionContext.hpp>
   #include <xalanc/XSLT/XalanSpaceNodeTester.hpp>
   
  @@ -68,6 +69,7 @@
   class PrefixResolver;
   class StylesheetConstructionContext;
   class StylesheetRoot;
  +class XalanMatchPatternData;
   class XalanQName;
   class XObject;
   class StylesheetExecutionContext;
  @@ -83,12 +85,7 @@
   
   public:
   
  -#if defined(XALAN_STRICT_ANSI_HEADERS)
  -     typedef std::size_t             size_type;
  -#else
  -     typedef size_t                  size_type;
  -#endif
  -
  +    typedef StylesheetConstructionContext::size_type        size_type;
        typedef StylesheetExecutionContext::ParamVectorType             
ParamVectorType;
        typedef XalanQName::NamespaceVectorType                                 
NamespaceVectorType;
        typedef XalanQName::NamespacesStackType                                 
NamespacesStackType;
  @@ -99,17 +96,24 @@
        typedef XalanVector<XalanDOMString>                                     
URLStackType;
        typedef XalanVector<ElemDecimalFormat*>                         
ElemDecimalFormatVectorType;
        typedef XalanVector<XalanSpaceNodeTester>                       
WhitespaceElementsVectorType;
  +    typedef XalanVector<const XalanMatchPatternData*>        
PatternTableVectorType;
        
        typedef XALAN_STD_QUALIFIER map<XalanDOMString,
                                ExtensionNSHandler*,
                                XALAN_STD_QUALIFIER less<XalanDOMString> >      
        ExtensionNamespacesMapType;
  -     typedef XALAN_STD_QUALIFIER map<XalanQNameByReference,
  +
  +    typedef XALAN_STD_QUALIFIER map<XalanQNameByReference,
                                const ElemTemplate*,
                                XALAN_STD_QUALIFIER less<XalanQName> >          
        ElemTemplateMapType;
  -     typedef XALAN_STD_QUALIFIER map<const XalanNode*,
  +
  +    typedef XALAN_STD_QUALIFIER map<const XalanNode*,
                                KeyTable*,
                                XALAN_STD_QUALIFIER less<const XalanNode*> >    
KeyTablesTableType;
   
  +     typedef XALAN_STD_QUALIFIER map<XalanDOMString,
  +                                      PatternTableVectorType,
  +                     XALAN_STD_QUALIFIER less<XalanDOMString> > 
PatternTableMapType;
  +
        /**
         * Constructor for a Stylesheet needs a Document.
         * @exception XSLProcessorException thrown if the active 
ProblemListener and XMLParserLiaison decide 
  @@ -559,138 +563,6 @@
                        bool                                                    
onlyUseImports) const;
   
        /**
  -      * A class to contain a match pattern and it's corresponding template.
  -      * This class also defines a node in a match pattern linked list.
  -      */
  -     class MatchPattern2
  -     {
  -     public:
  -
  -             typedef XPath::eMatchScore      eMatchScore;
  -
  -             /**
  -              * Construct a match pattern from a pattern and template.
  -              *
  -              * @param theTemplate node that contains the template for this 
pattern
  -              * @param posInStylesheet position in stylesheet
  -              * @param targetString target string
  -              * @param matchPattern the match pattern
  -              * @param pattern the pattern string
  -              * @param priority the default priority
  -              */
  -             MatchPattern2(
  -                             const ElemTemplate&             theTemplate,
  -                             size_type                               
posInStylesheet,
  -                             const XalanDOMString&   targetString,
  -                             const XPath&                    matchPattern,
  -                             const XalanDOMString&   pattern,
  -                             eMatchScore                             
priority) :
  -                     m_template(&theTemplate),
  -                     m_posInStylesheet(posInStylesheet),
  -                     m_targetString(targetString),
  -                     m_matchPattern(&matchPattern),
  -                     m_pattern(&pattern),
  -                     m_priority(priority)
  -             {
  -             }
  -
  -             MatchPattern2() :
  -                     m_template(0),
  -                     m_posInStylesheet(0),
  -                     m_targetString(),
  -                     m_matchPattern(0),
  -                     m_pattern(0),
  -                     m_priority(XPath::eMatchScoreNone)
  -             {
  -             }
  -
  -             ~MatchPattern2()
  -             {
  -             }
  -
  -             /**
  -              * Retrieve string for target.
  -              * 
  -              * @return target string
  -              */
  -             const XalanDOMString&
  -             getTargetString() const
  -             {
  -                     return m_targetString;
  -             }
  -
  -             /**
  -              * Retrieve the match pattern associated with pattern.
  -              * 
  -              * @return XPath for pattern
  -              */
  -             const XPath*
  -             getExpression() const
  -             {
  -                     return m_matchPattern;
  -             }
  -
  -             /**
  -              * Retrieve position of pattern in stylesheet.
  -              * 
  -              * @return position in stylesheet
  -              */
  -             size_type
  -             getPositionInStylesheet() const
  -             {
  -                     return m_posInStylesheet;
  -             }
  -
  -             /**
  -              * Retrieve pattern string.
  -              * 
  -              * @return string that contains element pattern
  -              */
  -             const XalanDOMString*
  -             getPattern() const
  -             {
  -                     return m_pattern;
  -             }
  -
  -             /**
  -              * Retrieve node that contains the template for this pattern.
  -              * 
  -              * @return template node
  -              */
  -             const ElemTemplate*
  -             getTemplate() const
  -             {
  -                     return m_template;
  -             }
  -
  -             eMatchScore
  -             getDefaultPriority() const
  -             {
  -                     return m_priority;
  -             }
  -
  -             double
  -             getPriorityOrDefault() const;
  -
  -     private:
  -
  -             const ElemTemplate*             m_template;
  -             size_type                               m_posInStylesheet;
  -             XalanDOMString                  m_targetString;
  -             const XPath*                    m_matchPattern;
  -             const XalanDOMString*   m_pattern;
  -             eMatchScore                             m_priority;
  -     };
  -
  -     typedef XalanVector<const MatchPattern2*>               
PatternTableVectorType;
  -
  -     typedef XALAN_STD_QUALIFIER map<XalanDOMString,
  -                         PatternTableVectorType,
  -                             XALAN_STD_QUALIFIER less<XalanDOMString> >      
        PatternTableMapType;
  -
  -     typedef XALAN_STD_QUALIFIER deque<MatchPattern2>        
MatchPattern2Container;
  -
  -     /**
         * Add object to vector of match patterns if not already there.
         *
         * @param thePattern pattern to add
  @@ -698,8 +570,8 @@
         */
        static void
        addObjectIfNotFound(
  -                     const MatchPattern2*            thePattern,
  -                     PatternTableVectorType&         theVector);
  +                     const XalanMatchPatternData*    thePattern,
  +                     PatternTableVectorType&             theVector);
   
        /**
         * Add object to array of match patterns if not already there.
  @@ -712,9 +584,9 @@
         */
        static void
        addObjectIfNotFound(
  -                     const MatchPattern2*    thePattern,
  -                     const MatchPattern2*    theArray[],
  -                     unsigned int&                   theArraySize);
  +                     const XalanMatchPatternData*    thePattern,
  +                     const XalanMatchPatternData*    theArray[],
  +                     unsigned int&                           theArraySize);
   
        /**
         * Given a name, locate the start of a list of 
  @@ -724,7 +596,7 @@
         * @param theName The name to match
         */
        const PatternTableVectorType*
  -     locateElementMatchPatternList2(const XalanDOMString&    theName) const;
  +     locateElementMatchPatternDataList(const XalanDOMString&     theName) 
const;
   
        /**
         * Given a name, locate the start of a list of 
  @@ -734,7 +606,7 @@
         * @param theName The name to match
         */
        const PatternTableVectorType*
  -     locateAttributeMatchPatternList2(const XalanDOMString&  theName) const;
  +     locateAttributeMatchPatternDataList(const XalanDOMString&       
theName) const;
   
        /**
         * Given a XalanNode, locate the start of a list of 
  @@ -743,7 +615,7 @@
         * @param XalanNode The node to match
         */
        const PatternTableVectorType*
  -     locateMatchPatternList2(
  +     locateMatchPatternDataList(
                        const XalanNode&                theNode,
                        XalanNode::NodeType             targetNodeType) const;
   
  @@ -978,16 +850,7 @@
         */
        PatternTableVectorType                                  
m_nodePatternList;
   
  -     /**
  -      * This will hold all of the MatchPattern2 instances for the
  -      * stylesheet.
  -      */
  -     MatchPattern2Container                                  
m_matchPattern2Container;
  -
  -     /**
  -      * This caches the number of possible patterns we can match.
  -      */
  -     MatchPattern2Container::size_type               m_patternCount;
  +     size_type                                   m_patternCount;
   
        ElemDecimalFormatVectorType                             
m_elemDecimalFormats;
   
  
  
  
  1.6       +29 -1     
xml-xalan/c/src/xalanc/XSLT/StylesheetConstructionContext.hpp
  
  Index: StylesheetConstructionContext.hpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/c/src/xalanc/XSLT/StylesheetConstructionContext.hpp,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- StylesheetConstructionContext.hpp 26 Feb 2004 22:58:58 -0000      1.5
  +++ StylesheetConstructionContext.hpp 3 Aug 2004 16:49:53 -0000       1.6
  @@ -32,6 +32,7 @@
   
   
   #include <xalanc/XPath/XalanQName.hpp>
  +#include <xalanc/XPath/XPath.hpp>
   #include <xalanc/XPath/XPathConstructionContext.hpp>
   
   
  @@ -52,14 +53,15 @@
   
   class AVT;
   class AVTPart;
  +class ElemTemplate;
   class ElemTemplateElement;
   class ExtensionNSHandler;
   class PrefixResolver;
   class Stylesheet;
   class StylesheetRoot;
   class XalanDocument;
  +class XalanMatchPatternData;
   class XalanNode;
  -class XPath;
   class XSLTInputSource;
   
   
  @@ -691,6 +693,32 @@
                        const AttributeListType&        atts,
                        ExtensionNSHandler&                     handler,
                        const LocatorType*                      locator = 0) = 
0;
  +
  +     /**
  +      * Create an instance of XalanMatchPatternData, which describes
  +      * data related to a match pattern and template in stylesheet.
  +      * The instance owns the memory and will delete the element when
  +      * it goes out of scope and the containing stylesheet is
  +      * destroyed.
  +     *
  +     * @param theTemplate The ElemTemplate node that contains the template 
for this pattern
  +     * @param thePosition The position in the stylesheet
  +     * @param theTargetString The target string for match pattern
  +     * @param TheMatchPattern The match pattern
  +     * @param thePatternString the pattern string
  +     * @param thePriority The priority for the match pattern.
  +     *
  +     * @return A pointer to the new instance.
  +      */
  +    virtual const XalanMatchPatternData*
  +    createXalanMatchPatternData(
  +            const ElemTemplate&     theTemplate,
  +            size_type               thePosition,
  +            const XalanDOMString&   theTargetString,
  +            const XPath&            theMatchPattern,
  +            const XalanDOMString&   thePatternString,
  +            XPath::eMatchScore      thePriority) = 0;
  +
   
        // These are inherited from XPathConstructionContext...
   
  
  
  
  1.9       +23 -0     
xml-xalan/c/src/xalanc/XSLT/StylesheetConstructionContextDefault.cpp
  
  Index: StylesheetConstructionContextDefault.cpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/c/src/xalanc/XSLT/StylesheetConstructionContextDefault.cpp,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- StylesheetConstructionContextDefault.cpp  26 Feb 2004 22:58:58 -0000      
1.8
  +++ StylesheetConstructionContextDefault.cpp  3 Aug 2004 16:49:53 -0000       
1.9
  @@ -109,6 +109,7 @@
        m_elemTextLiteralAllocator(eDefaultElemTextLiteralBlockSize),
        m_elemValueOfAllocator(eDefaultElemValueOfBlockSize),
        m_elemVariableAllocator(eDefaultElemVariableBlockSize),
  +    m_matchPatternDataAllocator(eDefaultMatchPatternDataBlockSize),
        m_spaceAttrQName(DOMServices::s_XMLNamespaceURI, 
Constants::ATTRNAME_SPACE)
   {
   }
  @@ -329,6 +330,8 @@
        m_elemValueOfAllocator.reset();
   
        m_elemVariableAllocator.reset();
  +
  +    m_matchPatternDataAllocator.reset();
   }
   
   
  @@ -1025,6 +1028,26 @@
                        length,
                        preserveSpace, 
                        disableOutputEscaping);
  +}
  +
  +
  +
  +const XalanMatchPatternData*
  +StylesheetConstructionContextDefault::createXalanMatchPatternData(
  +            const ElemTemplate&     theTemplate,
  +            size_type               thePosition,
  +            const XalanDOMString&   theTargetString,
  +            const XPath&            theMatchPattern,
  +            const XalanDOMString&   thePatternString,
  +            XPath::eMatchScore      thePriority)
  +{
  +    return m_matchPatternDataAllocator.create(
  +            theTemplate,
  +            thePosition,
  +            theTargetString,
  +            theMatchPattern,
  +            thePatternString,
  +            thePriority);
   }
   
   
  
  
  
  1.7       +14 -1     
xml-xalan/c/src/xalanc/XSLT/StylesheetConstructionContextDefault.hpp
  
  Index: StylesheetConstructionContextDefault.hpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/c/src/xalanc/XSLT/StylesheetConstructionContextDefault.hpp,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- StylesheetConstructionContextDefault.hpp  31 Jul 2004 06:05:08 -0000      
1.6
  +++ StylesheetConstructionContextDefault.hpp  3 Aug 2004 16:49:53 -0000       
1.7
  @@ -74,6 +74,7 @@
   #include <xalanc/XSLT/XalanElemTextLiteralAllocator.hpp>
   #include <xalanc/XSLT/XalanElemValueOfAllocator.hpp>
   #include <xalanc/XSLT/XalanElemVariableAllocator.hpp>
  +#include "xalanc/XSLT/XalanMatchPatternDataAllocator.hpp"
   
   
   
  @@ -119,7 +120,8 @@
                        eDefaultElemTemplateBlockSize = 10,
                        eDefaultElemTextLiteralBlockSize = 20,
                        eDefaultElemValueOfBlockSize = 10,
  -                     eDefaultElemVariableBlockSize = 10 };
  +                     eDefaultElemVariableBlockSize = 10,
  +            eDefaultMatchPatternDataBlockSize = 10 };
   
        /*
         * Construct an instance.  If the stylesheet(s) constructed is/are 
meant to be reused (a.k.a. "compiled"),
  @@ -436,6 +438,15 @@
                        ExtensionNSHandler&                     handler,
                        const LocatorType*                      locator = 0);
   
  +    virtual const XalanMatchPatternData*
  +    createXalanMatchPatternData(
  +            const ElemTemplate&     theTemplate,
  +            size_type               thePosition,
  +            const XalanDOMString&   theTargetString,
  +            const XPath&            theMatchPattern,
  +            const XalanDOMString&   thePatternString,
  +            XPath::eMatchScore      thePriority);
  +
        static eElementToken
        getElementNameToken(const XalanDOMString&       name);
   
  @@ -534,6 +545,8 @@
        XalanElemValueOfAllocator                               
m_elemValueOfAllocator;
   
        XalanElemVariableAllocator                              
m_elemVariableAllocator;
  +
  +    XalanMatchPatternDataAllocator          m_matchPatternDataAllocator;
   
        const XalanQNameByReference                             
m_spaceAttrQName;
   
  
  
  
  1.1                  xml-xalan/c/src/xalanc/XSLT/XalanMatchPatternData.cpp
  
  Index: XalanMatchPatternData.cpp
  ===================================================================
  /*
   * Copyright 1999-2004 The Apache Software Foundation.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *     http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  #include "XalanMatchPatternData.hpp"
  
  
  
  #include "xalanc/PlatformSupport/DoubleSupport.hpp"
  
  
  
  #include "ElemTemplate.hpp"
  
  
  
  XALAN_CPP_NAMESPACE_BEGIN
  
  
  
  double
  XalanMatchPatternData::getPriorityOrDefault() const
  {
        const double    templatePriority =
                m_template->getPriority();
  
        if (DoubleSupport::isNegativeInfinity(templatePriority) == true)
        {
                return XPath::getMatchScoreValue(m_priority);
        }
        else
        {
                return templatePriority;
        }
  }
  
  
  
  XALAN_CPP_NAMESPACE_END
  
  
  
  1.1                  xml-xalan/c/src/xalanc/XSLT/XalanMatchPatternData.hpp
  
  Index: XalanMatchPatternData.hpp
  ===================================================================
  /*
   * Copyright 1999-2004 The Apache Software Foundation.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *     http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  #if !defined(XALAN_MATCHPATTERNDATA_HEADER_GUARD)
  #define XALAN_MATCHPATTERNDATA_HEADER_GUARD
  
  
  
  // Base include file.  Must be first.
  #include "xalanc/XSLT/XSLTDefinitions.hpp"
  
  
  
  #include <cstddef>
  
  
  
  #include "xalanc/XalanDOM/XalanDOMString.hpp"
  
  
  
  #include "xalanc/XPath/XPath.hpp"
  
  
  
  XALAN_CPP_NAMESPACE_BEGIN
  
  
  class ElemTemplate;
  
  
  
  /**
   * This class contains information concerning a match pattern in
   * a stylesheet.
   */
  class XALAN_XSLT_EXPORT XalanMatchPatternData
  {   
  
  public:
  
      typedef XPath::eMatchScore  eMatchScore;
  
  #if defined(XALAN_STRICT_ANSI_HEADERS)
        typedef std::size_t             size_type;
  #else
        typedef size_t                  size_type;
  #endif
  
  
      /**
       * Construct a XalanMatchPatternData from a pattern and template.
       *
       * @param theTemplate The ElemTemplate node that contains the template 
for this pattern
       * @param thePosition The position in the stylesheet
       * @param theTargetString The target string for match pattern
       * @param TheMatchPattern The match pattern
       * @param thePatternString the pattern string
       * @param thePriority The priority for the match pattern.
       */
      XalanMatchPatternData(
              const ElemTemplate&     theTemplate,
              size_type               thePosition,
              const XalanDOMString&   theTargetString,
              const XPath&            theMatchPattern,
              const XalanDOMString&   thePatternString,
              eMatchScore             thePriority) :
          m_template(&theTemplate),
          m_position(thePosition),
          m_targetString(theTargetString),
          m_matchPattern(&theMatchPattern),
          m_pattern(&thePatternString),
          m_priority(thePriority)
      {
      }
  
      ~XalanMatchPatternData()
      {
      }
  
      /**
       * Retrieve string for target.
       * 
       * @return target string
       */
      const XalanDOMString&
      getTargetString() const
      {
          return m_targetString;
      }
  
      /**
       * Retrieve the match pattern associated with pattern.
       * 
       * @return XPath for pattern
       */
      const XPath*
      getExpression() const
      {
          return m_matchPattern;
      }
  
      /**
       * Retrieve position of pattern in stylesheet.
       * 
       * @return The position in the stylesheet
       */
      size_type
      getPosition() const
      {
          return m_position;
      }
  
      /**
       * Retrieve pattern string.
       * 
       * @return string that contains element pattern
       */
      const XalanDOMString*
      getPattern() const
      {
          return m_pattern;
      }
  
      /**
       * Retrieve node that contains the template for this pattern.
       * 
       * @return template node
       */
      const ElemTemplate*
      getTemplate() const
      {
          return m_template;
      }
  
      eMatchScore
      getDefaultPriority() const
      {
          return m_priority;
      }
  
      double
      getPriorityOrDefault() const;
  
  private:
  
      const ElemTemplate*     m_template;
  
      size_type               m_position;
  
      XalanDOMString          m_targetString;
  
      const XPath*            m_matchPattern;
  
      const XalanDOMString*   m_pattern;
  
      eMatchScore             m_priority;
  };
  
  
  
  XALAN_CPP_NAMESPACE_END
  
  
  
  #endif  // XALAN_MATCHPATTERNDATA_HEADER_GUARD
  
  
  
  1.1                  
xml-xalan/c/src/xalanc/XSLT/XalanMatchPatternDataAllocator.cpp
  
  Index: XalanMatchPatternDataAllocator.cpp
  ===================================================================
  /*
   * Copyright 1999-2004 The Apache Software Foundation.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *     http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  // Class header file.
  #include "XalanMatchPatternDataAllocator.hpp"
  
  
  
  XALAN_CPP_NAMESPACE_BEGIN
  
  
  
  XalanMatchPatternDataAllocator::XalanMatchPatternDataAllocator(size_type    
theBlockCount) :
        m_allocator(theBlockCount)
  {
  }
  
  
  
  XalanMatchPatternDataAllocator::~XalanMatchPatternDataAllocator()
  {
  }
  
  
  
  XalanMatchPatternDataAllocator::data_type*
  XalanMatchPatternDataAllocator::create(
              const ElemTemplate&     theTemplate,
              data_type::size_type    thePosition,
              const XalanDOMString&   theTargetString,
              const XPath&            theMatchPattern,
              const XalanDOMString&   thePatternString,
              data_type::eMatchScore  thePriority)
  {
        data_type* const        theBlock = m_allocator.allocateBlock();
        assert(theBlock != 0);
  
        data_type* const        theResult =
                new(theBlock) data_type(
                                theTemplate,
                                thePosition,
                                theTargetString,
                                theMatchPattern,
                  thePatternString,
                                thePriority);
  
        m_allocator.commitAllocation(theBlock);
  
        return theResult;
  }
  
  
  
  XALAN_CPP_NAMESPACE_END
  
  
  
  1.1                  
xml-xalan/c/src/xalanc/XSLT/XalanMatchPatternDataAllocator.hpp
  
  Index: XalanMatchPatternDataAllocator.hpp
  ===================================================================
  /*
   * Copyright 1999-2004 The Apache Software Foundation.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *     http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  #if !defined(XALANMATCHPATTERNDATAALLOCATOR_INCLUDE_GUARD_12455133)
  #define XALANMATCHPATTERNDATAALLOCATOR_INCLUDE_GUARD_12455133
  
  
  
  // Base include file.  Must be first.
  #include "xalanc/XSLT/XSLTDefinitions.hpp"
  
  
  
  #include "xalanc/XSLT/XalanMatchPatternData.hpp"
  
  
  
  #include "xalanc/PlatformSupport/ArenaAllocator.hpp"
  
  
  
  XALAN_CPP_NAMESPACE_BEGIN
  
  
  
  class XALAN_XSLT_EXPORT XalanMatchPatternDataAllocator
  {
  public:
  
      typedef XalanMatchPatternData           data_type;
  
  #if defined(XALAN_NO_DEFAULT_TEMPLATE_ARGUMENTS)
      typedef ArenaBlock<data_type>           ArenaBlockType;
      typedef ArenaAllocator<data_type,
                             ArenaBlockType>  ArenaAllocatorType;
  #else
      typedef ArenaAllocator<data_type>       ArenaAllocatorType;
  #endif
  
      typedef ArenaAllocatorType::size_type   size_type;
  
      /**
       * Construct an instance that will allocate blocks of the specified size.
       *
       * @param theBlockSize The block size.
       */
      XalanMatchPatternDataAllocator(size_type    theBlockCount);
  
      ~XalanMatchPatternDataAllocator();
  
      /**
       * Construct an instance
       * 
       * @param constructionContext context for construction of object
       * @param stylesheetTree      stylesheet containing element
       * @param atts                list of attributes for element
       * @param lineNumber                line number in document
       * @param columnNumber          column number in document
       *
       * @param theTemplate The ElemTemplate node that contains the template 
for this pattern
       * @param thePosition The position in the stylesheet
       * @param theTargetString The target string for match pattern
       * @param TheMatchPattern The match pattern
       * @param thePatternString the pattern string
       * @param thePriority The priority for the match pattern.
       *
       * @return A pointer to the new instance.
       */
      data_type*
      create(
              const ElemTemplate&     theTemplate,
              data_type::size_type    thePosition,
              const XalanDOMString&   theTargetString,
              const XPath&            theMatchPattern,
              const XalanDOMString&   thePatternString,
              data_type::eMatchScore  thePriority);
  
      /**
       * Determine if an object is owned by the allocator...
       */
      bool
      ownsObject(const data_type*     theObject)
      {
          return m_allocator.ownsObject(theObject);
      }
  
      /**
       * Delete all objects from the allocator.    
       */ 
      void
      reset()
      {
          m_allocator.reset();
      }
  
      /**
       * Get the number of ArenaBlocks currently allocated.
       *
       * @return The number of blocks.
       */
      size_type
      getBlockCount() const
      {
          return m_allocator.getBlockCount();
      }
  
      /**
       * Get size of an ArenaBlock, that is, the number
       * of objects in each block.
       *
       * @return The size of the block
       */
      size_type
      getBlockSize() const
      {
          return m_allocator.getBlockSize();
      }
  
  private:
  
      // Not implemented...
      XalanMatchPatternDataAllocator(const XalanMatchPatternDataAllocator&);
  
      XalanMatchPatternDataAllocator&
      operator=(const XalanMatchPatternDataAllocator&);
  
      // Data members...
      ArenaAllocatorType  m_allocator;
  };
  
  
  
  XALAN_CPP_NAMESPACE_END
  
  
  
  #endif  // XALANMATCHPATTERNDATAALLOCATOR_INCLUDE_GUARD_12455133
  
  
  

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

Reply via email to