Home | History | Annotate | Download | only in src

Lines Matching refs:stream

38 // Static support function forward declarations for the stream types.
40 static void reset (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream);
41 static void add (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream, void * el, void (ANTLR3_CDECL *freePtr)(void *));
42 static void * next (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream);
43 static pANTLR3_BASE_TREE nextTree (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream);
44 static void * nextToken (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream);
45 static void * _next (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream);
46 static void * dupTok (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream, void * el);
47 static void * dupTree (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream, void * el);
48 static void * dupTreeNode (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream, void * el);
49 static pANTLR3_BASE_TREE toTree (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream, void * element);
50 static pANTLR3_BASE_TREE toTreeNode (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream, void * element);
51 static ANTLR3_BOOLEAN hasNext (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream);
52 static pANTLR3_BASE_TREE nextNode (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream);
53 static pANTLR3_BASE_TREE nextNodeNode (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream);
54 static pANTLR3_BASE_TREE nextNodeToken (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream);
55 static ANTLR3_UINT32 size (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream);
56 static void * getDescription (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream);
57 static void freeRS (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream);
58 static void expungeRS (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream);
61 // Place a now unused rewrite stream back on the rewrite stream pool
65 freeRS (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream)
67 // Before placing the stream back in the pool, we
72 if (stream->elements != NULL)
77 if (stream->elements->factoryMade == ANTLR3_TRUE)
79 pANTLR3_VECTOR_FACTORY factory = ((pANTLR3_COMMON_TREE_ADAPTOR)(stream->adaptor->super))->arboretum->vFactory;
80 factory->returnVector(factory, stream->elements);
82 stream->elements = NULL;
87 // rewrite stream free stack and are reused.
89 stream->elements->clear(stream->elements);
90 stream->freeElements = ANTLR3_TRUE;
95 stream->freeElements = ANTLR3_FALSE; // Just in case
98 // Add the stream into the recognizer stream stack vector
99 // adding the stream memory free routine so that
102 stream->rec->state->rStreams->add(stream->rec->state->rStreams, stream, (void(*)(void *))expungeRS);
108 freeNodeRS(pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream)
112 // Before placing the stream back in the pool, we
116 // then we know that the entries in the stream are definately
120 if (stream->elements != NULL)
126 for (i = 1; i<= stream->elements->count; i++)
128 tree = (pANTLR3_BASE_TREE)(stream->elements->elements[i-1].element);
139 if (stream->elements->factoryMade == ANTLR3_TRUE)
141 pANTLR3_VECTOR_FACTORY factory = ((pANTLR3_COMMON_TREE_ADAPTOR)(stream->adaptor->super))->arboretum->vFactory;
142 factory->returnVector(factory, stream->elements);
144 stream->elements = NULL;
148 stream->elements->clear(stream->elements);
149 stream->freeElements = ANTLR3_TRUE;
154 if (stream->singleElement != NULL)
156 tree = (pANTLR3_BASE_TREE)(stream->singleElement);
163 stream->singleElement = NULL;
164 stream->freeElements = ANTLR3_FALSE; // Just in case
167 // Add the stream into the recognizer stream stack vector
168 // adding the stream memory free routine so that
171 stream->rec->state->rStreams->add(stream->rec->state->rStreams, stream, (void(*)(void *))expungeRS);
174 expungeRS(pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream)
177 if (stream->freeElements == ANTLR3_TRUE && stream->elements != NULL)
179 stream->elements->free(stream->elements);
181 ANTLR3_FREE(stream);
189 pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream;
191 // First - do we already have a rewrite stream that was returned
200 stream = rec->state->rStreams->remove(rec->state->rStreams, rec->state->rStreams->count - 1);
202 // We found a stream we can reuse.
203 // If the stream had a vector, then it will have been cleared
212 stream = (pANTLR3_REWRITE_RULE_ELEMENT_STREAM) ANTLR3_MALLOC((size_t)(sizeof(ANTLR3_REWRITE_RULE_ELEMENT_STREAM)));
214 if (stream == NULL)
218 stream->elements = NULL;
219 stream->freeElements = ANTLR3_FALSE;
224 stream->rec = rec;
225 stream->reset = reset;
226 stream->add = add;
227 stream->next = next;
228 stream->nextTree = nextTree;
229 stream->nextNode = nextNode;
230 stream->nextToken = nextToken;
231 stream->_next = _next;
232 stream->hasNext = hasNext;
233 stream->size = size;
234 stream->getDescription = getDescription;
235 stream->toTree = toTree;
236 stream->free = freeRS;
237 stream->singleElement = NULL;
239 // Reset the stream to empty.
242 stream->cursor = 0;
243 stream->dirty = ANTLR3_FALSE;
247 stream->elementDescription = description;
251 stream->adaptor = adaptor;
253 return stream;
259 pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream;
263 stream = antlr3RewriteRuleElementStreamNewAE(adaptor, rec, description);
265 if (stream == NULL)
270 // Stream seems good so we need to add the supplied element
274 stream->add(stream, oneElement, NULL);
276 return stream;
282 pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream;
286 stream = antlr3RewriteRuleElementStreamNewAE(adaptor, rec, description);
288 if (stream == NULL)
290 return stream;
293 // Stream seems good so we need to install the vector we were
297 if (stream->elements != NULL && stream->elements->factoryMade == ANTLR3_FALSE && stream->freeElements == ANTLR3_TRUE )
299 stream->elements->free(stream->elements);
301 stream->elements = vector;
302 stream->freeElements = ANTLR3_FALSE;
303 return stream;
306 // Token rewrite stream ...
311 pANTLR3_REWRITE_RULE_TOKEN_STREAM stream;
315 stream = antlr3RewriteRuleElementStreamNewAE(adaptor, rec, description);
317 if (stream == NULL)
319 return stream;
324 stream->dup = dupTok;
325 stream->nextNode = nextNodeToken;
327 // No nextNode implementation for a token rewrite stream
329 return stream;
335 pANTLR3_REWRITE_RULE_TOKEN_STREAM stream;
339 stream = antlr3RewriteRuleElementStreamNewAEE(adaptor, rec, description, oneElement);
343 stream->dup = dupTok;
344 stream->nextNode = nextNodeToken;
346 // No nextNode implementation for a token rewrite stream
348 return stream;
354 pANTLR3_REWRITE_RULE_TOKEN_STREAM stream;
358 stream = antlr3RewriteRuleElementStreamNewAEV(adaptor, rec, description, vector);
362 stream->dup = dupTok;
363 stream->nextNode = nextNodeToken;
365 // No nextNode implementation for a token rewrite stream
367 return stream;
370 // Subtree rewrite stream
375 pANTLR3_REWRITE_RULE_SUBTREE_STREAM stream;
379 stream = antlr3RewriteRuleElementStreamNewAE(adaptor, rec, description);
381 if (stream == NULL)
383 return stream;
388 stream->dup = dupTree;
389 stream->nextNode = nextNode;
390 stream->free = freeNodeRS;
391 return stream;
397 pANTLR3_REWRITE_RULE_SUBTREE_STREAM stream;
401 stream = antlr3RewriteRuleElementStreamNewAEE(adaptor, rec, description, oneElement);
403 if (stream == NULL)
405 return stream;
410 stream->dup = dupTree;
411 stream->nextNode = nextNode;
412 stream->free = freeNodeRS;
414 return stream;
420 pANTLR3_REWRITE_RULE_SUBTREE_STREAM stream;
424 stream = antlr3RewriteRuleElementStreamNewAEV(adaptor, rec, description, vector);
426 if (stream == NULL)
433 stream->dup = dupTree;
434 stream->nextNode = nextNode;
435 stream->free = freeNodeRS;
437 return stream;
439 // Node rewrite stream ...
444 pANTLR3_REWRITE_RULE_NODE_STREAM stream;
448 stream = antlr3RewriteRuleElementStreamNewAE(adaptor, rec, description);
450 if (stream == NULL)
452 return stream;
457 stream->dup = dupTreeNode;
458 stream->toTree = toTreeNode;
459 stream->nextNode = nextNodeNode;
460 stream->free = freeNodeRS;
462 return stream;
468 pANTLR3_REWRITE_RULE_NODE_STREAM stream;
472 stream = antlr3RewriteRuleElementStreamNewAEE(adaptor, rec, description, oneElement);
476 stream->dup = dupTreeNode;
477 stream->toTree = toTreeNode;
478 stream->nextNode = nextNodeNode;
479 stream->free = freeNodeRS;
481 return stream;
487 pANTLR3_REWRITE_RULE_NODE_STREAM stream;
491 stream = antlr3RewriteRuleElementStreamNewAEV(adaptor, rec, description, vector);
495 stream->dup = dupTreeNode;
496 stream->toTree = toTreeNode;
497 stream->nextNode = nextNodeNode;
498 stream->free = freeNodeRS;
500 return stream;
506 /// Reset the condition of this stream so that it appears we have
510 reset (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream)
512 stream->dirty = ANTLR3_TRUE;
513 stream->cursor = 0;
516 // Add a new pANTLR3_BASE_TREE to this stream
519 add (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream, void * el, void (ANTLR3_CDECL *freePtr)(void *))
525 // As we may be reusing a stream, we may already have allocated
526 // a rewrite stream vector. If we have then is will be empty if
527 stream
529 if (stream->elements != NULL && stream->elements->count > 0)
531 // We already have >1 entries in the stream. So we can just add this new element to the existing
534 stream->elements->add(stream->elements, el, freePtr);
537 if (stream->singleElement == NULL)
539 stream->singleElement = el;
546 if (stream->elements == NULL)
548 pANTLR3_VECTOR_FACTORY factory = ((pANTLR3_COMMON_TREE_ADAPTOR)(stream->adaptor->super))->arboretum->vFactory;
551 stream->elements = factory->newVector(factory);
552 stream->freeElements = ANTLR3_TRUE; // We 'ummed it, so we play it son.
555 stream->elements->add (stream->elements, stream->singleElement, freePtr);
556 stream->elements->add (stream->elements, el, freePtr);
557 stream->singleElement = NULL;
562 /// Return the next element in the stream. If out of elements, throw
564 /// Return a duplicate node/subtree if stream is out of elements and
568 nextTree(pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream)
573 n = stream->size(stream);
575 if ( stream->dirty || (stream->cursor >=n && n==1) )
579 el = stream->_next(stream);
580 return stream->dup(stream, el);
585 el = stream->_next(stream);
592 nextToken (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream)
594 return stream->_next(stream);
597 /// Return the next element in the stream. If out of elements, throw
601 next (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream)
605 s = stream->size(stream);
606 if (stream->cursor >= s && s == 1)
610 el = stream->_next(stream);
612 return stream->dup(stream, el);
615 return stream->_next(stream);
621 /// if the stream is empty or we're out of elements and size>1.
625 _next (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream)
630 n = stream->size(stream);
634 // This means that the stream is empty
641 if (stream->cursor >= n)
647 return stream->toTree(stream, stream->singleElement);
659 if (stream->singleElement != NULL)
661 stream->cursor++; // Cursor advances even for single element as this tells us to dup()
662 return stream->toTree(stream, stream->singleElement);
668 t = stream->toTree(stream, stream->elements->get(stream->elements, stream->cursor));
669 stream->cursor++;
682 dupTok (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream, void * el)
684 ANTLR3_FPRINTF(stderr, "dup() cannot be called on a token rewrite stream!!");
696 dupTree (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream, void * element)
698 return stream->adaptor->dupNode(stream->adaptor, (pANTLR3_BASE_TREE)element);
710 dupTreeNode (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream, void * element)
712 ANTLR3_FPRINTF(stderr, "dup() cannot be called on a node rewrite stream!!!");
721 toTree (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream, void * element)
729 /// Ensure stream emits trees; tokens must be converted to AST nodes.
738 toTreeNode (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream, void * element)
740 return stream->adaptor->dupNode(stream->adaptor, (pANTLR3_BASE_TREE)element);
750 hasNext (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream)
752 if ( (stream->singleElement != NULL && stream->cursor < 1)
753 || (stream->elements != NULL && stream->cursor < stream->elements->size(stream->elements)))
767 nextNodeToken(pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream)
769 return stream->adaptor->create(stream->adaptor, stream->_next(stream));
773 nextNodeNode(pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream)
775 return stream->_next(stream);
788 nextNode (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream)
792 pANTLR3_BASE_TREE el = stream->_next(stream);
794 n = stream->size(stream);
795 if (stream->dirty == ANTLR3_TRUE || (stream->cursor > n && n == 1))
800 return stream->adaptor->dupNode(stream->adaptor, el);
808 /// Number of elements available in the stream
811 size (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream)
819 if (stream->singleElement != NULL)
825 if (stream->elements != NULL)
827 return (ANTLR3_UINT32)(stream->elements->count);
836 getDescription (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream)
838 if (stream->elementDescription == NULL)
840 stream->elementDescription = "<unknown source>";
843 return stream->elementDescription;