From 467954408f7d4c187469bf62d96bfffe47cf1d0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Sun, 12 Dec 2004 20:50:45 +0000 Subject: [PATCH] Added Query::Rewind() method - not yet tested. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@10404 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/add-ons/kernel/file_systems/bfs/Query.cpp | 39 ++++++++++++++----- src/add-ons/kernel/file_systems/bfs/Query.h | 8 ++-- 2 files changed, 34 insertions(+), 13 deletions(-) diff --git a/src/add-ons/kernel/file_systems/bfs/Query.cpp b/src/add-ons/kernel/file_systems/bfs/Query.cpp index 2c555c6331..94984d9688 100644 --- a/src/add-ons/kernel/file_systems/bfs/Query.cpp +++ b/src/add-ons/kernel/file_systems/bfs/Query.cpp @@ -1464,6 +1464,33 @@ Query::Query(Volume *volume, Expression *expression, uint32 flags) fExpression->Root()->CalculateScore(fIndex); fIndex.Unset(); + Rewind(); + + if (fFlags & B_LIVE_QUERY) + volume->AddQuery(this); +} + + +Query::~Query() +{ + if (fFlags & B_LIVE_QUERY) + fVolume->RemoveQuery(this); +} + + +status_t +Query::Rewind() +{ + // free previous stuff + + fStack.MakeEmpty(); + + delete fIterator; + fIterator = NULL; + fCurrent = NULL; + + // put the whole expression on the stack + Stack stack; stack.Push(fExpression->Root()); @@ -1486,19 +1513,11 @@ Query::Query(Volume *volume, Expression *expression, uint32 flags) FATAL(("Unknown term on stack or stack error")); } - if (fFlags & B_LIVE_QUERY) - volume->AddQuery(this); + return B_OK; } -Query::~Query() -{ - if (fFlags & B_LIVE_QUERY) - fVolume->RemoveQuery(this); -} - - -status_t +status_t Query::GetNextEntry(struct dirent *dirent, size_t size) { // If we don't have an equation to use yet/anymore, get a new one diff --git a/src/add-ons/kernel/file_systems/bfs/Query.h b/src/add-ons/kernel/file_systems/bfs/Query.h index 69b76f6aa6..3c156f9165 100644 --- a/src/add-ons/kernel/file_systems/bfs/Query.h +++ b/src/add-ons/kernel/file_systems/bfs/Query.h @@ -50,10 +50,12 @@ class Query { Query(Volume *volume, Expression *expression, uint32 flags); ~Query(); - status_t GetNextEntry(struct dirent *,size_t size); + status_t Rewind(); + status_t GetNextEntry(struct dirent *, size_t size); - void SetLiveMode(port_id port,int32 token); - void LiveUpdate(Inode *inode,const char *attribute,int32 type,const uint8 *oldKey,size_t oldLength,const uint8 *newKey,size_t newLength); + void SetLiveMode(port_id port, int32 token); + void LiveUpdate(Inode *inode, const char *attribute, int32 type, + const uint8 *oldKey, size_t oldLength, const uint8 *newKey, size_t newLength); Expression *GetExpression() const { return fExpression; }