// This file is generated by WOK (CPPExt).
// Please do not edit this file; modify original file instead.
// The copyright and license terms as defined for the original file apply to 
// this header file considered to be the "object code" form of the original source.

#ifndef _IGESData_ParamCursor_HeaderFile
#define _IGESData_ParamCursor_HeaderFile

#include <Standard.hxx>
#include <Standard_DefineAlloc.hxx>
#include <Standard_Macro.hxx>

#include <Standard_Integer.hxx>
#include <Standard_Boolean.hxx>
class Interface_InterfaceError;


//! Auxiliary class for ParamReader.
//! It stores commands for a ParamReader to manage the current
//! parameter number. Used by methods Read... from ParamReader.
//! It allows to define the following commands :
//! - read a parameter specified by a precise Number (basic case)
//! - read a parameter then set Current Number to follow its number
//! - read the current parameter (with Current Number) then
//! advance Current Number by one
//! - idem with several : read "nb" parameters from one specified,
//! included, with or without setting Current Number to follow
//! last parameter read
//! - read several parameter from the current one, then advance
//! Current Number to follow the last one read
//! - Read several parameters (as above) but in interlaced lists,
//! i.e. from complex items (each one including successively for
//! instance, an Integer, a Real, an Entity ...)
//!
//! If commands to advance Current Number are not set, it must be
//! set by the user (with method SetCurrent from ParamReader)
//! ParamReader offers methods which create most useful cases
class IGESData_ParamCursor 
{
public:

  DEFINE_STANDARD_ALLOC

  
  //! Creates a Cursor to read a precise parameter of ParamReader,
  //! identified by its number, then set Current Number to "num + 1"
  //! (this constructor allows to simply give a Number to a method
  //! Read... from ParamReader, which will be translated into a
  //! ParamCursor by compiler)
  Standard_EXPORT IGESData_ParamCursor(const Standard_Integer num);
  
  //! Creates a Cursor to read a list of parameters (count "nb")
  //! starting from a precise one (number "num") included, then
  //! set Current Number of ParamNumber to the first following one
  //! ("num + nb")
  //! If size is given, it means that each parameter is made of more
  //! than one term. One term is the normal (default) case : for
  //! instance, a Parameter comprises one Integer, or one Entity ...
  //! Size gives the complete size of each Item if it is complex.
  //! To be used ONLY IF it is constant
  Standard_EXPORT IGESData_ParamCursor(const Standard_Integer num, const Standard_Integer nb, const Standard_Integer size = 1);
  
  //! Defines the size of a term to read in the item : this commands
  //! ParamReader to read "size" parameters for each item, then
  //! skip the remainder of the item to the same term of next Item
  //! (that is, skip "item size" - "term size")
  //!
  //! In addition, Offset from beginning of Item is managed :
  //! After being created, and for the frist call to SetTerm, the
  //! part of Item to be read begins exactly as the Item begins
  //! But after a SetTerm, the next read will add an offset which is
  //! the size of former term.
  //!
  //! autoadv commands Advance management. If it is True (default),
  //! the last SetTerm (Item size has been covered) calls SetAdvance
  //! If it is False, SetAdvance must be called directly if necessary
  //!
  //! Error if a SetTerm overpasses the size of the Item
  Standard_EXPORT   void SetTerm (const Standard_Integer size, const Standard_Boolean autoadv = Standard_True) ;
  
  //! Defines a term of one Parameter (very current case)
  Standard_EXPORT   void SetOne (const Standard_Boolean autoadv = Standard_True) ;
  
  //! Defines a term of two Parameters for a XY (current case)
  Standard_EXPORT   void SetXY (const Standard_Boolean autoadv = Standard_True) ;
  
  //! Defines a term of three Parameters for XYZ (current case)
  Standard_EXPORT   void SetXYZ (const Standard_Boolean autoadv = Standard_True) ;
  
  //! Changes command to advance current cursor after reading
  //! parameters. If "advance" True, sets advance, if "False",
  //! resets it. ParamCursor is created by default with True.
  Standard_EXPORT   void SetAdvance (const Standard_Boolean advance) ;
  
  //! Returns (included) starting number for reading parameters
      Standard_Integer Start()  const;
  
  //! Returns (excluded) upper limit number for reading parameters
      Standard_Integer Limit()  const;
  
  //! Returns required count of items to be read
      Standard_Integer Count()  const;
  
  //! Returns length of item (count of parameters per item)
      Standard_Integer ItemSize()  const;
  
  //! Returns length of current term (count of parameters) in item
      Standard_Integer TermSize()  const;
  
  //! Returns offset from which current term must be read in item
      Standard_Integer Offset()  const;
  
  //! Returns True if Advance command has been set
      Standard_Boolean Advance()  const;




protected:





private:



  Standard_Integer thestart;
  Standard_Integer thelimit;
  Standard_Integer thecount;
  Standard_Integer theisize;
  Standard_Integer theoffst;
  Standard_Integer thetsize;
  Standard_Boolean theadv;


};


#include <IGESData_ParamCursor.lxx>





#endif // _IGESData_ParamCursor_HeaderFile
