[prev in list] [next in list] [prev in thread] [next in thread] 

List:       helix-datatype-cvs
Subject:    [Datatype-cvs] wm/asx/renderer asxelement.cpp, 1.4.2.1,
From:       sgarg () helixcommunity ! org
Date:       2008-12-23 5:46:25
Message-ID: 200812230548.mBN5mGox018110 () mailer ! progressive-comp ! com
[Download RAW message or body]

Update of /cvsroot/datatype/wm/asx/renderer
In directory cvs01.internal.helixcommunity.org:/tmp/cvs-serv18503

Modified Files:
      Tag: hxclient_3_1_0_atlas
	asxelement.cpp asxelement.h asxrender.cpp asxrender.h 
Log Message:
Fix for REPEAT tag issue

Index: asxrender.h
===================================================================
RCS file: /cvsroot/datatype/wm/asx/renderer/asxrender.h,v
retrieving revision 1.3.2.2
retrieving revision 1.3.2.3
diff -u -d -r1.3.2.2 -r1.3.2.3
--- asxrender.h	9 Dec 2008 12:51:33 -0000	1.3.2.2
+++ asxrender.h	23 Dec 2008 05:46:22 -0000	1.3.2.3
@@ -127,6 +127,7 @@
     IHXXMLParser*  m_pParser;
     CHXSimpleList m_Deprecatedlist;
     HXBOOL m_bDeprecated;
+    HXBOOL m_bRepeat;	
 	
     // These are methods that the derived class must implement
     virtual HX_RESULT ParseDeprecatedMetaFile(IHXBuffer* pBuffer);	
@@ -139,7 +140,7 @@
     virtual UINT32    GetNumEntryRefs(UINT32 ulEntryIndex);
     virtual HX_RESULT GetEntryRefMetaData(UINT32 ulEntryIndex, UINT32 ulRefIndex, \
REF(IHXValues*) rpData);  virtual void      EntryStarted(UINT32 ulEntryIndex);
-
+    UINT32 GetNumEntriesWithRepeat();
     // These are internal methods for CASXRenderer
     HX_RESULT PreProcessASX(IHXBuffer* pSrc, REF(IHXBuffer*) rpDst);
     HX_RESULT SetContentAsBufferProperty(IHXValues* pData, const char* pszName, \
CHXASXElement* pElem);

Index: asxrender.cpp
===================================================================
RCS file: /cvsroot/datatype/wm/asx/renderer/asxrender.cpp,v
retrieving revision 1.4.2.2
retrieving revision 1.4.2.3
diff -u -d -r1.4.2.2 -r1.4.2.3
--- asxrender.cpp	22 Dec 2008 05:00:07 -0000	1.4.2.2
+++ asxrender.cpp	23 Dec 2008 05:46:22 -0000	1.4.2.3
@@ -72,6 +72,7 @@
     , m_pStack(NULL)
     , m_pParser(NULL)
     , m_bDeprecated(FALSE)
+    , m_bRepeat(FALSE)
 {
     HXLOGL4(HXLOG_ASXR, "CON CASXRenderer this=%p", this);
 }
@@ -531,6 +532,11 @@
 {
     UINT32 ulRet = GetNumChildren(m_pRoot, HXASXElementEntry | \
HXASXElementEntryRef);  
+    if(m_bRepeat)
+    {
+        ulRet = GetNumEntriesWithRepeat();
+    }
+
     HXLOGL4(HXLOG_ASXR, "%p::CASXRenderer::GetNumEntries() returns %lu", this, \
ulRet);  if(m_bDeprecated)
     {
@@ -539,6 +545,42 @@
     return ulRet;
 }
 
+UINT32 CASXRenderer:: GetNumEntriesWithRepeat()
+{
+    HX_RESULT retVal = HXR_OK;
+    UINT32 ulAllEntries = GetNumChildren(m_pRoot,
+                                         HXASXElementEntry | HXASXElementEntryRef | \
HXASXElementRepeat); +    UINT32 ulNumRepeats = GetNumChildren(m_pRoot, \
HXASXElementRepeat); +    UINT32 ulRepeatEntries = 0;
+    if (ulNumRepeats)
+    {
+        UINT32 i = 0;
+        for (i = 0; i < ulAllEntries; i++)
+        {
+            CHXASXElement* pEntry = NULL;
+            retVal = GetIthChild(m_pRoot,
+                                 HXASXElementEntry | HXASXElementEntryRef | \
HXASXElementRepeat, +                                 i, &pEntry);
+            if (SUCCEEDED(retVal))
+            {
+                if (pEntry->GetType() == HXASXElementRepeat)
+                {
+                    UINT32 ulRepeatCount = \
((CHXASXElementRepeat*)(pEntry))->GetCount(); +                    if (ulRepeatCount \
> MAX_REPEAT_COUNT) +                    {
+                        ulRepeatCount = MAX_REPEAT_COUNT;
+                    }
+                    ulRepeatEntries += ulRepeatCount*GetNumChildren(pEntry, \
HXASXElementEntry | HXASXElementEntryRef); +                }
+            }
+        }
+    }
+
+    UINT32 ulTotalEntries = ulAllEntries + ulRepeatEntries - ulNumRepeats;
+
+    return ulTotalEntries;
+}
+
 HX_RESULT CASXRenderer::GetEntryMetaData(UINT32 ulEntryIndex, REF(IHXValues*) \
rpData)  {
     HX_RESULT retVal = HXR_FAIL;
@@ -1007,6 +1049,10 @@
             {
                 ulRet++;
             }
+	     else if(pChild->GetType()==HXASXElementRepeat)
+      	     {
+                m_bRepeat = TRUE;
+      	     }
             HX_RELEASE(pChild);
             rv = pParent->GetNextChild(&pChild);
         }
@@ -1051,6 +1097,26 @@
                 // Increment the child index
                 ulChildIndex++;
             }
+	     else if (pChild->GetType() == HXASXElementRepeat)
+            {
+                UINT32 ulNumChildren = GetNumChildren(pChild, HXASXElementEntry | \
HXASXElementEntryRef); +                UINT32 ulRepeatCount = \
((CHXASXElementRepeat*)(pChild))->GetCount(); + 		  if (ulRepeatCount > \
MAX_REPEAT_COUNT) + 		      {
+ 		          ulRepeatCount = MAX_REPEAT_COUNT;
+ 		      }
+ 		  UINT32 j =  i-ulChildIndex;
+ 		  if((ulRepeatCount*ulNumChildren) > j)
+ 		  {
+		      j%=ulNumChildren;			
+		      retVal = GetIthChild(pChild, HXASXElementEntry | HXASXElementEntryRef, j, \
ppChild);                     +		      break;              
+		  }
+		  else
+		  {
+		      ulChildIndex += ulRepeatCount*ulNumChildren;			
+		  }
+            }
             HX_RELEASE(pChild);
             rv = pParent->GetNextChild(&pChild);
         }

Index: asxelement.h
===================================================================
RCS file: /cvsroot/datatype/wm/asx/renderer/asxelement.h,v
retrieving revision 1.2
retrieving revision 1.2.2.1
diff -u -d -r1.2 -r1.2.2.1
--- asxelement.h	6 Jul 2007 22:02:11 -0000	1.2
+++ asxelement.h	23 Dec 2008 05:46:22 -0000	1.2.2.1
@@ -57,6 +57,8 @@
 #include "hxstring.h"
 #include "asxtypes.h"
 
+#define MAX_REPEAT_COUNT 100  //Max Number of counts for a <repeat> tag.
+
 typedef struct _HXASXElementNamePair
 {
     HXASXElement m_eType;

Index: asxelement.cpp
===================================================================
RCS file: /cvsroot/datatype/wm/asx/renderer/asxelement.cpp,v
retrieving revision 1.4.2.1
retrieving revision 1.4.2.2
diff -u -d -r1.4.2.1 -r1.4.2.2
--- asxelement.cpp	22 Dec 2008 06:10:42 -0000	1.4.2.1
+++ asxelement.cpp	23 Dec 2008 05:46:22 -0000	1.4.2.2
@@ -964,7 +964,7 @@
 CHXASXElementRepeat::CHXASXElementRepeat(IUnknown* pContext, HXASXElement eType, \
                IHXValues* pAttr, UINT32 ulLine,
                                          UINT32 ulCol, CHXASXElement* pParent, \
HX_RESULT* pRet)  : CHXASXElement(pContext, eType, pAttr, ulLine, ulCol, pParent, \
                pRet)
-    , m_ulCount(0xFFFFFFFF)
+    , m_ulCount(MAX_REPEAT_COUNT)
 {
     if (m_pAttr && pRet)
     {


_______________________________________________
Datatype-cvs mailing list
Datatype-cvs@helixcommunity.org
http://lists.helixcommunity.org/mailman/listinfo/datatype-cvs


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic