RetrieveHashlistFunc GetHash;
HashDestructorFunc Destructor;
SubTemplFunc DoSubTemplate;
+ FilterByParamFunc Filter;
} HashIterator;
void RegisterITERATOR(const char *Name, long len,
RetrieveHashlistFunc GetHash,
SubTemplFunc DoSubTempl,
HashDestructorFunc Destructor,
+ FilterByParamFunc Filter,
CtxType ContextType,
CtxType XPectContextType,
int Flags)
It->GetHash = GetHash;
It->DoSubTemplate = DoSubTempl;
It->Destructor = Destructor;
+ It->Filter = Filter;
It->ContextType = ContextType;
It->XPectContextType = XPectContextType;
It->Flags = Flags;
}
while (GetNextHashPos(List, it, &Status.KeyLen, &Status.Key, &vContext)) {
if ((Status.n >= StartAt) && (Status.n <= StopAt)) {
+
+ if ((It->Filter != NULL) &&
+ It->Filter(Status.Key, Status.KeyLen, vContext, Target, TP))
+ {
+ continue;
+ }
+
if (DetectGroupChange && Status.n > 0) {
Status.GroupChange = SortBy->GroupChange(vContext, vLastContext);
}
typedef void (*SubTemplFunc)(StrBuf *TemplBuffer, WCTemplputParams *TP);
typedef HashList *(*RetrieveHashlistFunc)(StrBuf *Target, WCTemplputParams *TP);
typedef void (*HashDestructorFunc) (HashList **KillMe);
-
+typedef int (*FilterByParamFunc)(const char* key, long len, void *Context, StrBuf *Target, WCTemplputParams *TP);
extern WCTemplputParams NoCtx;
#define IT_NOFLAG 0
#define IT_FLAG_DETECT_GROUPCHANGE (1<<0)
-#define RegisterIterator(a, b, c, d, e, f, g, h, i) RegisterITERATOR(a, sizeof(a)-1, b, c, d, e, f, g, h, i)
+#define RegisterIterator(a, b, c, d, e, f, g, h, i) RegisterITERATOR(a, sizeof(a)-1, b, c, d, e, f, NULL, g, h, i)
+#define RegisterFilteredIterator(a, b, c, d, e, f, g, h, i, j) RegisterITERATOR(a, sizeof(a)-1, b, c, d, e, f, g, h, i, j)
void RegisterITERATOR(const char *Name, long len, /* Our identifier */
- int AdditionalParams, /* doe we use more parameters? */
+ int AdditionalParams, /* do we use more parameters? */
HashList *StaticList, /* pointer to webcit lifetime hashlists */
RetrieveHashlistFunc GetHash, /* else retrieve the hashlist by calling this function */
SubTemplFunc DoSubTempl, /* call this function on each iteration for svput & friends */
HashDestructorFunc Destructor, /* use this function to shut down the hash; NULL if its a reference */
+ FilterByParamFunc Filter, /* use this function if you want to skip items */
CtxType ContextType, /* which context do we provide to the subtemplate? */
CtxType XPectContextType, /* which context do we expct to be called in? */
int Flags);