[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