SourceForge.net Logo
EventGenerator.hpp
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2001-2008
3  * DecisionSoft Limited. All rights reserved.
4  * Copyright (c) 2004-2008
5  * Oracle. All rights reserved.
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  * $Id$
20  */
21 
22 #ifndef _EVENTGENERATOR_HPP
23 #define _EVENTGENERATOR_HPP
24 
25 #include <xqilla/framework/XQillaExport.hpp>
28 
29 class DynamicContext;
30 class EventHandler;
31 class ASTNode;
32 class QueryPathNode;
33 
34 class XQILLA_API EventGenerator : public ReferenceCounted
35 {
36 public:
38 
39  virtual ~EventGenerator() {}
40 
43  virtual EventGenerator::Ptr generateEvents(EventHandler *events, DynamicContext *context) = 0;
44 
45  static void generateAndTailCall(const EventGenerator::Ptr &generator, EventHandler *events,
46  DynamicContext *context)
47  {
48  EventGenerator::Ptr gen = generator;
49  while(gen.notNull()) {
50  gen = gen->generateEvents(events, context);
51  }
52  }
53 
54 };
55 
56 class XQILLA_API ASTNodeEventGenerator : public EventGenerator
57 {
58 public:
59  ASTNodeEventGenerator(const ASTNode *ast, bool preserveNS, bool preserveType);
60 
62 
63 protected:
64  const ASTNode *ast_;
65  bool preserveNS_, preserveType_;
66 };
67 
68 class XQILLA_API GenerateEventsResult : public ResultImpl
69 {
70 public:
71  GenerateEventsResult(const ASTNode *ast, const QueryPathNode *projection);
72 
73  virtual Item::Ptr nextOrTail(Result &tail, DynamicContext *context);
74 
75 private:
76  const ASTNode *ast_;
77  const QueryPathNode *projection_;
78 };
79 
80 #endif
static void generateAndTailCall(const EventGenerator::Ptr &generator, EventHandler *events, DynamicContext *context)
Definition: EventGenerator.hpp:45
Definition: EventHandler.hpp:31
Super class for reference counted classes.
Definition: ReferenceCounted.hpp:32
Definition: EventGenerator.hpp:56
Super class of all the reference counted wrappers for Items.
Definition: ReferenceCounted.hpp:58
RefCountPointer< EventGenerator > Ptr
Definition: EventGenerator.hpp:37
Definition: EventGenerator.hpp:68
virtual EventGenerator::Ptr generateEvents(EventHandler *events, DynamicContext *context)=0
Returns the result of this expression via the EventHandler provided.
A scoped pointer wrapper for the lazily evaluated query result.
Definition: Result.hpp:39
virtual ~EventGenerator()
Definition: EventGenerator.hpp:39
bool preserveType_
Definition: EventGenerator.hpp:65
Definition: EventGenerator.hpp:34
The execution time dynamic context interface.
Definition: DynamicContext.hpp:39
bool notNull() const
Definition: ReferenceCounted.hpp:111
A lazily evaluated query result.
Definition: ResultImpl.hpp:35
virtual Item::Ptr nextOrTail(Result &tail, DynamicContext *context)
Gets the next item, or returns a tail call Result which will give the next item.
const ASTNode * ast_
Definition: EventGenerator.hpp:64