Main Page | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | File Members

SExpressionGenericIterator Class Reference

#include <conteval.hpp>

Inheritance diagram for SExpressionGenericIterator:

Inheritance graph
[legend]
Collaboration diagram for SExpressionGenericIterator:

Collaboration graph
[legend]
List of all members.

Detailed Description

Interface class used for iterations (such as LOOP or MAPCAR).

The instructions generic_iteration and iteration_callback of the IntelibContinuation class use an object derived from this class to perform iterative evaluations.

The operation is as follows: when the IntelibContinuation encounters the generic_iteration instruction (whose parameter must always be a subclass of SExpressionGenericIterator), it calls the NeedAnotherIteration() method; if it returns true, it pushes to the todo stack another generic_iteration with the same object, then pushes the iteration_callback (which will call the CollectResultOfIteration method), then calls the ScheduleIteration() to give the object a chance to schedule its own stuff. Therefore, during the iteration this stuff will be evaluated first, then CollectResultOfIteration will be called, and then the decision-making generic_iteration instruction is performed again.

Warning:
Make sure you don't reenter the IntelibContinuation::Step() (the evaluator) from within any of the methods of this class, or else you definitely break the CALL/CC!

Definition at line 358 of file conteval.hpp.

Public Member Functions

 SExpressionGenericIterator (IntelibTypeId &tid)
 ~SExpressionGenericIterator ()
virtual bool NeedAnotherIteration (IntelibContinuation &lf) const =0
 Should we continue?
virtual void ScheduleIteration (IntelibContinuation &lf)=0
 Push the appropriate stuff to the todo list.
virtual void CollectResultOfIteration (IntelibContinuation &lf)=0
 Retrieve the result(s) of the last iteration.
virtual void ReturnFinalValue (IntelibContinuation &lf)=0
 What do we return after the iteration is complete.
const IntelibTypeIdTermType () const
 Actual S-expression type.
bool IsChangeable () const
 Can it be changed during the lifetime of the object?
virtual SExpressionClone () const
 Clone a changeable object.
virtual class SString TextRepresentation () const =0
 Text representation of the S-expression.
virtual bool SpecificEql (const SExpression *) const
 Are the two objects EQL (while not EQ).

Static Public Attributes

static IntelibTypeId TypeId
 Identifier for the set of all possible S-expressions.

Protected Member Functions

bool CanDie ()
 Is it OK to delete the object now?


Constructor & Destructor Documentation

SExpressionGenericIterator::SExpressionGenericIterator IntelibTypeId tid  ) 
 

Definition at line 360 of file conteval.hpp.

SExpressionGenericIterator::~SExpressionGenericIterator  ) 
 

Definition at line 362 of file conteval.hpp.


Member Function Documentation

virtual bool SExpressionGenericIterator::NeedAnotherIteration IntelibContinuation lf  )  const [pure virtual]
 

Should we continue?

virtual void SExpressionGenericIterator::ScheduleIteration IntelibContinuation lf  )  [pure virtual]
 

Push the appropriate stuff to the todo list.

virtual void SExpressionGenericIterator::CollectResultOfIteration IntelibContinuation lf  )  [pure virtual]
 

Retrieve the result(s) of the last iteration.

virtual void SExpressionGenericIterator::ReturnFinalValue IntelibContinuation lf  )  [pure virtual]
 

What do we return after the iteration is complete.

const IntelibTypeId& SExpression::TermType  )  const [inherited]
 

Actual S-expression type.

Definition at line 195 of file sexpress.hpp.

Referenced by SReference::DynamicCastGetPtr(), SchReference::IsEql(), LReference::IsEql(), SReference::SimpleCastGetPtr(), SchReference::TextRepresentation(), and LReference::TextRepresentation().

bool SExpression::IsChangeable  )  const [inherited]
 

Can it be changed during the lifetime of the object?

Definition at line 198 of file sexpress.hpp.

References IntelibTypeId::IsChangeable().

virtual SExpression* SExpression::Clone  )  const [virtual, inherited]
 

Clone a changeable object.

The method should return the pointer created with new

Note:
It can (and should) return null pointer for non-changeables
Warning:
This method will hang your program being called for a looped data structure, including looped lists, a hash table which references a list in which it is a member, etc.

If you create a changeable S-expression, you MUST make sure this method duplicates your object in such a way that nothing is shared between the old and new objects, that is, changing the new object can not in any way change the old object.

Reimplemented in SExpressionBacklink, SExpressionCons, SExpressionHashTable, SExpressionRawBuffer, and SExpressionVector.

Definition at line 214 of file sexpress.hpp.

virtual class SString SExpression::TextRepresentation  )  const [pure virtual, inherited]
 

Text representation of the S-expression.

Returns the text string which represents the given S-expression as for real Lisp (for example, (25 36 49))

Implemented in SExpressionDoubleList, SExpressionInt, SExpressionFloat, SExpressionChar, SExpressionString, SExpressionClassicAtom, SExpressionLabel, SExpressionCons, SExpressionHashTable, SExpressionLocation, SExpressionRawBuffer, SExpressionVector, SExpressionWrapper< Data >, SExpressionIndirect, SExpressionIndirectAccessor, LExpressionContext, LExpressionLambda, LExpressionMacro, LExpressionUserCFunction, SchExpressionContext, and SchExpressionLambda.

Referenced by SExpressionVector::TextRepresentation(), SchReference::TextRepresentation(), and LReference::TextRepresentation().

virtual bool SExpression::SpecificEql const SExpression  )  const [virtual, inherited]
 

Are the two objects EQL (while not EQ).

This function is overriden by those SExpressions able to be EQL while being not EQ.

Warning:
It is not demanded that this function return true if it's arguments are the same SExpression (that is, they're EQ). It is only called by the EQL predicate implementation when it has been checked that the operands are not the same object.

Reimplemented in SExpressionInt, SExpressionFloat, SExpressionChar, and SExpressionString.

Definition at line 235 of file sexpress.hpp.

Referenced by SchReference::IsEql(), and LReference::IsEql().

bool GarbageSafe::CanDie  )  [protected, inherited]
 

Is it OK to delete the object now?

Our children have no access to the private attribute RefCount and should never need it except when checking if the destruction is not an error. This solves the problem.

Definition at line 53 of file refcount.hpp.


Member Data Documentation

IntelibTypeId SExpression::TypeId [static, inherited]
 

Identifier for the set of all possible S-expressions.

Note:
It never can be the value of term_type_id because SExpression is an abstract class. SExpression::TypeId is used for unification, to identify the whole world of S-expressions.

IntelibTypeId::IsSubtypeOf(SExpression::TypeId) is true for all objects of IntelibTypeId class. Guess why.

Reimplemented in SExpressionBacklink, SExpressionDoubleList, SExpressionInt, SExpressionFloat, SExpressionChar, SExpressionString, SExpressionClassicAtom, SExpressionLabel, SExpressionCons, SExpressionHashTable, SExpressionLocation, SExpressionRawBuffer, SExpressionVector, SExpressionWrapper< Data >, SExpressionHashPackage, SExpressionStream, SExpressionStreamFile, SExpressionStreamTextInput, SExpressionSetfAgent, SExpressionFunction, SExpressionForm, LExpressionContext, LExpressionLambda, LExpressionMacro, LExpressionUserCFunction, LExpressionPackage, SExpressionExtvarname, LExpressionSymbol, SchExpressionContext, SchExpressionLambda, SchExpressionPackage, and SchExpressionSymbol.

Definition at line 68 of file sexpress.cpp.


The documentation for this class was generated from the following file:
Generated on Tue Dec 18 00:41:15 2007 for InteLib by  doxygen 1.4.1