home *** CD-ROM | disk | FTP | other *** search
/ Power GUI Programming with VisualAge C++ / powergui.iso / trialva / ibmcppw / include / iiseqlst.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-02-22  |  9.1 KB  |  405 lines

  1. /**********************************************************************
  2. *                                                                     *
  3. *  IBM(R) VisualAge(TM) for C++ for Windows(R), Version 3.5           *
  4. *                                                                     *
  5. *  PID: 5622-880                                                      *
  6. *  - Licensed Material - Program-Property of IBM                      *
  7. *  (C) Copyright IBM Corp. 1991, 1995 - All Right Reserved.           *
  8. *                                                                     *
  9. *  US Government Users Restricted Rights - Use, duplication or        *
  10. *  disclosure restricted by GSA ADP Schedule Contract with IBM Corp.  *
  11. *                                                                     *
  12. *  VisualAge, and IBM are trademarks or registered trademarks of      *
  13. *  International Business Machines Corporation.                       *
  14. *  Windows is a registered trademark of Microsoft Corporation.        *
  15. *                                                                     *
  16. **********************************************************************/
  17.  
  18. #ifndef _IISEQLST_H
  19. #define _IISEQLST_H
  20.  
  21. #include <iiaseq.h>
  22.  
  23.  
  24. #pragma info (nocls, nocnd, nocns, nocnv, noext, nognr, novft)
  25. #pragma pack (4)
  26.  
  27. #pragma SOMAsDefault (off)
  28.  
  29. template <class Element>
  30. struct ISequenceAsListNodeImpl;
  31.  
  32. template <class Element>
  33. struct ISequenceAsListNodeImpl {
  34.  
  35.   ISequenceAsListNodeImpl <Element>
  36.           *ivNext,
  37.           *ivPrevious;
  38.  
  39.   Element  ivElement;
  40.  
  41.            ISequenceAsListNodeImpl
  42.                             (Element const&);
  43.  
  44.           ~ISequenceAsListNodeImpl
  45.                             ();
  46.  
  47.  
  48. };
  49.  
  50. #pragma SOMAsDefault (pop)
  51. #pragma SOMAsDefault (off)
  52.  
  53. class ISequenceAsListCursorImpl : public ICursorImpl {
  54.  
  55.   typedef  ICursorImpl Inherited;
  56.  
  57.   typedef  ISequenceAsListCursorImpl Self;
  58.  
  59. public:
  60.  
  61.            ISequenceAsListCursorImpl
  62.                             (IACollectionImpl const&);
  63.  
  64.            ISequenceAsListCursorImpl
  65.                             (ISequenceAsListCursorImpl const&);
  66.  
  67.           ~ISequenceAsListCursorImpl
  68.                             ();
  69.  
  70.   ICursorImpl*
  71.            Clone            () const;
  72.  
  73.   void     Copy             (ICursorImpl const&);
  74.  
  75.   void     Invalidate       ();
  76.  
  77.   IBoolean IsInBetween      () const;
  78.  
  79.   IBoolean IsValid          () const;
  80.  
  81.   void     operator=        (ISequenceAsListCursorImpl const&);
  82.  
  83.   IBoolean operator==       (ICursorImpl const&) const;
  84.  
  85. protected:
  86.  
  87. private:
  88.  
  89.   ISequenceAsListNodeImpl <long>*
  90.            ivNode;
  91.  
  92.   friend
  93.   class    ISequenceAsListImpl;
  94.  
  95.  
  96. };
  97.  
  98.  
  99. class IASequenceAsListOps;
  100.  
  101. class ISequenceAsListImpl : public IASequenceImpl {
  102.  
  103.   typedef  IASequenceImpl Inherited;
  104.  
  105.   typedef  ISequenceAsListImpl Self;
  106.  
  107.   typedef  ISequenceAsListNodeImpl <long> Node;
  108.  
  109. public:
  110.  
  111.   typedef  IASequenceAsListOps Ops;
  112.  
  113.   typedef  ISequenceAsListCursorImpl Cursor;
  114.  
  115.   typedef  ISequenceAsListCursorImpl MngCursor;
  116.  
  117.            ISequenceAsListImpl
  118.                             (Ops&, INumber);
  119.  
  120.            ISequenceAsListImpl
  121.                             (Ops&,
  122.                              ISequenceAsListImpl const&);
  123.  
  124.           ~ISequenceAsListImpl
  125.                             ();
  126.  
  127.   IBoolean Add              (void const*, ICursorImpl&);
  128.  
  129.   void     AddAllFrom       (IACollectionImpl const&);
  130.  
  131.   void     AddAsFirst       (void const*, ICursorImpl&);
  132.  
  133.   void     AddAsLast        (void const*, ICursorImpl&);
  134.  
  135.   void     AddAsNext        (void const*, ICursorImpl&);
  136.  
  137.   void     AddAsPrevious    (void const*, ICursorImpl&);
  138.  
  139.   void     AddAtPosition    (IPosition, void const*, ICursorImpl&);
  140.  
  141.   IBoolean AllElementsDo    (IApplFunc, void*);
  142.  
  143.   void*    Any              () const;
  144.  
  145.   IBoolean CheckCursor      (ICursorImpl const&) const;
  146.  
  147.   char const*
  148.            ClassName        () const;
  149.  
  150.   IACollectionImpl*
  151.            Clone            () const;
  152.  
  153.   void     Copy             (IACollectionImpl const&);
  154.  
  155.   Cursor*  CreateCursor     () const;
  156.  
  157.   MngCursor*
  158.            CreateMngCursor  () const;
  159.  
  160.   void*    ElementAt        (ICursorImpl const&) const;
  161.  
  162.   void*    ElementAtPosition
  163.                             (IPosition) const;
  164.  
  165.   void*    First            () const;
  166.  
  167.   IBoolean IsBounded        () const;
  168.  
  169.   IBoolean IsConsistent     () const;
  170.  
  171.   IBoolean IsEmpty          () const;
  172.  
  173.   IBoolean IsFirstAt        (ICursorImpl const&) const;
  174.  
  175.   IBoolean IsFull           () const;
  176.  
  177.   IBoolean IsLastAt         (ICursorImpl const&) const;
  178.  
  179.   void*    Last             () const;
  180.  
  181.   INumber  NumberOfElements () const;
  182.  
  183.   IPosition
  184.            PositionAt       (ICursorImpl const&) const;
  185.  
  186.   INumber  RemoveAll        ();
  187.  
  188.   INumber  RemoveAll        (IPredFunc, void*);
  189.  
  190.   void     RemoveAt         (ICursorImpl&);
  191.  
  192.   void     RemoveAtPosition (IPosition);
  193.  
  194.   void     RemoveFirst      ();
  195.  
  196.   void     RemoveLast       ();
  197.  
  198.   void     ReplaceAt        (ICursorImpl const&, void const*);
  199.  
  200.   void     ReplaceAtPosition
  201.                             (IPosition, void const*);
  202.  
  203.   void     Reverse          ();
  204.  
  205.   IBoolean SetToFirst       (ICursorImpl&) const;
  206.  
  207.   IBoolean SetToLast        (ICursorImpl&) const;
  208.  
  209.   IBoolean SetToNext        (ICursorImpl&) const;
  210.  
  211.   void     SetToPosition    (IPosition, ICursorImpl&) const;
  212.  
  213.   IBoolean SetToPrevious    (ICursorImpl&) const;
  214.  
  215.   void     Sort             (ICompFunc, void*);
  216.  
  217.   void     operator=        (ISequenceAsListImpl const&);
  218.  
  219.   TStream& operator<<=      (TStream&);
  220.  
  221.   TStream& operator>>=      (TStream&) const;
  222.  
  223. protected:
  224.  
  225.   void     Assign           (void*, void const*) const;
  226.  
  227.   void*    CreateNode       (void const*) const;
  228.  
  229.   void     DeleteNode       (void*) const;
  230.  
  231.   void*    StreamIn         (TStream&) const;
  232.  
  233.   void     StreamOut        (void const*, TStream&) const;
  234.  
  235. private:
  236.  
  237.   enum { kOriginalVersion };
  238.  
  239.   static
  240.   char const*
  241.            cvClassName;
  242.  
  243.   MngCursor*
  244.            ivMngCursors;
  245.  
  246.   Node*    ivFirst;
  247.  
  248.   Node*    ivLast;
  249.  
  250.   INumber  ivNumberOfElements;
  251.  
  252.   void     AddAsNextNode    (Node*, Node*);
  253.  
  254.   void*    ElementOf        (Node const*) const;
  255.  
  256.   static
  257.   IBoolean IsInBetween      (ICursorImpl const&);
  258.  
  259.   static
  260.   Node*&   NextNodeOf       (ICursorImpl const&);
  261.  
  262.   static
  263.   Node*&   NodeOf           (ICursorImpl const&);
  264.  
  265.   static
  266.   Ops&     OpsOf            (ISequenceAsListImpl const&);
  267.  
  268.   static
  269.   Node*&   PreviousNodeOf   (ICursorImpl const&);
  270.  
  271.   void     RemoveNode       (Node*);
  272.  
  273.   void     SetInBetween     (MngCursor&) const;
  274.  
  275.   void     SetNodeToPosition
  276.                             (IPosition, Node*&) const;
  277.  
  278.   friend
  279.   class    ISequenceAsListMngCursorImpl;
  280.  
  281.  
  282. };
  283.  
  284. class IASequenceAsListOps {
  285. public:
  286.  
  287.   virtual ~IASequenceAsListOps
  288.                             ();
  289.  
  290.   virtual
  291.   void     Assign           (void*, void const*) const = 0;
  292.  
  293.   virtual
  294.   IACollectionImpl*
  295.            Clone            () const = 0;
  296.  
  297.   virtual
  298.   void*    CreateNode       (void const*) const = 0;
  299.  
  300.   virtual
  301.   void     DeleteNode       (void*) const = 0;
  302.  
  303.   virtual
  304.   void*    StreamIn         (TStream&) const = 0;
  305.  
  306.   virtual
  307.   void     StreamOut        (void const*, TStream&) const = 0;
  308.  
  309.   virtual
  310.   TStream& operator<<=      (TStream&) = 0;
  311.  
  312.   virtual
  313.   TStream& operator>>=      (TStream&) const = 0;
  314.  
  315. protected:
  316.  
  317.            IASequenceAsListOps
  318.                             (IBoolean);
  319.  
  320. private:
  321.  
  322.   IBoolean ivContainsDTSObjects;
  323.  
  324.   friend
  325.   class    ISequenceAsListImpl;
  326.  
  327.  
  328. };
  329.  
  330. template <class Element, class ElementOps, class Implementation>
  331. class ISequenceAsListOps : public IASequenceAsListOps {
  332.  
  333.   typedef  IASequenceAsListOps Inherited;
  334.  
  335.   typedef  ISequenceAsListOps
  336.             <Element, ElementOps, Implementation> Self;
  337.  
  338.   typedef  ISequenceAsListNodeImpl <Element> Node;
  339.  
  340. public:
  341.  
  342.   typedef  Implementation ImplType;
  343.  
  344.   typedef  Element ElementType;
  345.  
  346.   typedef  void KeyType;
  347.  
  348.            ISequenceAsListOps
  349.                             (INumber);
  350.  
  351.            ISequenceAsListOps
  352.                             (INumber, void*);
  353.  
  354.            ISequenceAsListOps
  355.                             (ISequenceAsListOps
  356.                               <Element, ElementOps,
  357.                                Implementation> const&);
  358.  
  359.   void     Assign           (void*, void const*) const;
  360.  
  361.   IACollectionImpl*
  362.            Clone            () const;
  363.  
  364.   void*    CreateNode       (void const*) const;
  365.  
  366.   void     DeleteNode       (void*) const;
  367.  
  368.   void*    StreamIn         (TStream&) const;
  369.  
  370.   void     StreamOut        (void const*, TStream&) const;
  371.  
  372.   TStream& operator<<=      (TStream&);
  373.  
  374.   TStream& operator>>=      (TStream&) const;
  375.  
  376.            operator Implementation*
  377.                             ();
  378.  
  379.  
  380. protected:
  381.  
  382. private:
  383.  
  384.   ElementOps
  385.            ivElementOps;
  386.  
  387.   Implementation
  388.            ivImpl;
  389.  
  390.  
  391. };
  392.  
  393. #pragma SOMAsDefault (pop)
  394.  
  395. #include <iiseqlst.inl>
  396.  
  397. #if ! defined (__TEMPINC__)
  398. #include <iiseqlst.c>
  399. #endif
  400.  
  401. #pragma info (restore)
  402. #pragma pack ()
  403.  
  404. #endif
  405.