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

  1.  
  2. #ifndef _IBUFFER_
  3. #define _IBUFFER_
  4. /*******************************************************************************
  5. * FILE NAME: ibuffer.hpp                                                       *
  6. *                                                                              *
  7. * DESCRIPTION:                                                                 *
  8. *   Declaration of the classes:                                                *
  9. *     IBuffer                                                                  *
  10. *                                                                              *
  11. * COPYRIGHT:                                                                   *
  12. *   IBM Open Class Library                                                     *
  13. *   (C) Copyright International Business Machines Corporation 1992, 1996       *
  14. *   Licensed Material - Program-Property of IBM - All Rights Reserved.         *
  15. *   US Government Users Restricted Rights - Use, duplication, or disclosure    *
  16. *   restricted by GSA ADP Schedule Contract with IBM Corp.                     *
  17. *                                                                              *
  18. *******************************************************************************/
  19. extern "C" {
  20.   #include <stddef.h>
  21.   #include <stdio.h>
  22.   #include <string.h>
  23.   }
  24.  
  25. #include <ivbase.hpp>
  26. #include <istrenum.hpp>
  27.  
  28. #pragma pack(4)
  29.  
  30.  
  31.  
  32. class IStringTest;
  33.  
  34. class IBuffer : public IVBase {
  35. public:
  36. /*------------------------------- Reallocation -------------------------------*/
  37. IBuffer
  38.  *newBuffer           ( const void* p1,
  39.                         unsigned    len1,
  40.                         const void* p2      = 0,
  41.                         unsigned    len2    = 0,
  42.                         const void* p3      = 0,
  43.                         unsigned    len3    = 0,
  44.                         char        padChar = 0 ) const;
  45.  
  46. static unsigned
  47.   checkAddition       ( unsigned addend1,
  48.                         unsigned addend2 ),
  49.   checkMultiplication ( unsigned factor1,
  50.                         unsigned factor2 ),
  51.   overflow            ( );
  52.  
  53. static void
  54.   setDefaultBuffer    ( IBuffer* newDefaultBuffer );
  55.  
  56. /*--------------------------------- Queries ----------------------------------*/
  57. static IBuffer
  58.  *defaultBuffer ( ),
  59.  *fromContents  ( const char *pBuffer );
  60.  
  61. IBuffer
  62.  *null          ( ) const;
  63.  
  64. unsigned
  65.   useCount      ( ) const,
  66.   length        ( ) const;
  67.  
  68. const char
  69.  *contents      ( ) const;
  70.  
  71. char
  72.  *contents      ( );
  73.  
  74. virtual IStringEnum::CharType
  75.   charType      ( unsigned index ) const;
  76.  
  77. virtual char
  78.  *next          ( const char *prev );
  79.  
  80. virtual const char
  81.  *next          ( const char *prev ) const;
  82.  
  83. /*---------------------------- Reference Counting ----------------------------*/
  84. void
  85.   addRef    ( ),
  86.   removeRef ( );
  87.  
  88. /*------------------------------- Comparisons --------------------------------*/
  89. typedef enum {
  90.   equal,
  91.   greaterThan,
  92.   lessThan
  93.   } Comparison;
  94.  
  95. virtual Comparison
  96.   compare ( const void* p,
  97.             unsigned    len ) const;
  98. /*---------------------------------- Subset ----------------------------------*/
  99. virtual IBuffer
  100.  *subString ( unsigned startPos,
  101.               unsigned len,
  102.               char     padCharacter ) const;
  103.  
  104. /*-----------------Internationalization functions----------------------*/
  105. #ifdef IC_NLS
  106. virtual IBuffer
  107.  *subString ( unsigned startPos ) const;
  108. #endif
  109.  
  110. /*------------------------------- Diagnostics --------------------------------*/
  111. virtual IString
  112.   asDebugInfo ( ) const;
  113.  
  114. /*--------------------------------- Testing ----------------------------------*/
  115. virtual Boolean
  116.   isAlphanumeric ( ) const,
  117.   isAlphabetic   ( ) const,
  118.   isASCII        ( ) const,
  119.   isControl      ( ) const,
  120.   isDigits       ( ) const,
  121.   isGraphics     ( ) const,
  122.   isHexDigits    ( ) const,
  123.   isLowerCase    ( ) const,
  124.   isPrintable    ( ) const,
  125.   isPunctuation  ( ) const,
  126.   isUpperCase    ( ) const,
  127.   isWhiteSpace   ( ) const;
  128.  
  129. /*------------------------------- NLS Testing --------------------------------*/
  130. virtual Boolean
  131.   isMBCS       ( ) const,
  132.   isDBCS       ( ) const,
  133.   isSBCS       ( ) const,
  134.   isValidMBCS  ( ) const,
  135.   isValidDBCS  ( ) const,
  136.   includesMBCS ( ) const,
  137.   includesDBCS ( ) const,
  138.   includesSBCS ( ) const;
  139.  
  140. /*--------------------------------- Searches ---------------------------------*/
  141. virtual unsigned
  142.   indexOf           ( const char*        pString,
  143.                       unsigned           len,
  144.                       unsigned           startPos = 1 ) const,
  145.   indexOf           ( const IStringTest& aTest,
  146.                       unsigned           startPos = 1 ) const,
  147.   indexOfAnyBut     ( const char*        pString,
  148.                       unsigned           len,
  149.                       unsigned           startPos = 1 ) const,
  150.   indexOfAnyBut     ( const IStringTest& aTest,
  151.                       unsigned           startPos = 1 ) const,
  152.   indexOfAnyOf      ( const char*        pString,
  153.                       unsigned           len,
  154.                       unsigned           startPos = 1 ) const,
  155.   indexOfAnyOf      ( const IStringTest& aTest,
  156.                       unsigned           startPos = 1 ) const,
  157.   lastIndexOf       ( const char*        pString,
  158.                       unsigned           len,
  159.                       unsigned           startPos = 0 ) const,
  160.   lastIndexOf       ( const IStringTest& aTest,
  161.                       unsigned           startPos = 0 ) const,
  162.   lastIndexOfAnyBut ( const char*        pString,
  163.                       unsigned           len,
  164.                       unsigned           startPos = 0 ) const,
  165.   lastIndexOfAnyBut ( const IStringTest& aTest,
  166.                       unsigned           startPos = 0 ) const,
  167.   lastIndexOfAnyOf  ( const char*        pString,
  168.                       unsigned           len,
  169.                       unsigned           startPos = 0 ) const,
  170.   lastIndexOfAnyOf  ( const IStringTest& aTest,
  171.                       unsigned           startPos = 0 ) const;
  172.  
  173. /*--------------------------------- Editing ----------------------------------*/
  174. virtual IBuffer
  175.  *center       ( unsigned newLen,
  176.                  char     padCharacter ),
  177.  *change       ( const char* pSource,
  178.                  unsigned    sourceLen,
  179.                  const char* pTarget,
  180.                  unsigned    targetLen,
  181.                  unsigned    startPos,
  182.                  unsigned    numChanges ),
  183.  *copy         ( unsigned numCopies ),
  184.  *insert       ( const char* pInsert,
  185.                  unsigned    insertLen,
  186.                  unsigned    pos,
  187.                  char        padCharacter ),
  188.  *leftJustify  ( unsigned newLen,
  189.                  char     padCharacter ),
  190.  *lowerCase    ( ),
  191.  *overlayWith  ( const char* overlay,
  192.                  unsigned    len,
  193.                  unsigned    pos,
  194.                  char        padCharacter ),
  195.  *remove       ( unsigned startPos,
  196.                  unsigned numChars ),
  197.  *reverse      ( ),
  198.  *rightJustify ( unsigned newLen,
  199.                  char     padCharacter ),
  200.  *strip        ( const char*            pChars,
  201.                  unsigned               len,
  202.                  IStringEnum::StripMode mode ),
  203.  *strip        ( const IStringTest&     aTest,
  204.                  IStringEnum::StripMode mode ),
  205.  *translate    ( const char* pInputChars,
  206.                  unsigned    inputLen,
  207.                  const char* pOutputChars,
  208.                  unsigned    outputLen,
  209.                  char        padCharacter ),
  210.  *upperCase    ( );
  211.  
  212. protected:
  213.  
  214. static Boolean isDBCSLead(char inByte);
  215.  
  216.  
  217. /*-------------------------- Search Initialization ---------------------------*/
  218. virtual unsigned
  219.   startSearch          ( unsigned startPos,
  220.                          unsigned searchLen ) const,
  221.   startBackwardsSearch ( unsigned startPos,
  222.                          unsigned searchLen ) const;
  223.  
  224. /*-------------------------------- Allocation --------------------------------*/
  225. virtual IBuffer
  226.  *allocate        ( unsigned bufLength ) const;
  227.  
  228. #ifdef __DEBUG_ALLOC__
  229. void
  230.  *operator new    ( size_t      t,
  231.                     const char* filename,
  232.                     size_t      linenum,
  233.                     unsigned    bufLen );
  234. void
  235.   operator delete ( void*       p,
  236.                     const char* filename,
  237.                     size_t      linenum );
  238. #else
  239. void
  240.  *operator new    ( size_t   t,
  241.                     unsigned bufLen );
  242. void
  243.   operator delete ( void*    p );
  244. #endif
  245.  
  246. /*-------------------------------- Initialize --------------------------------*/
  247. static IBuffer
  248.  *initialize ( );
  249.  
  250. /*---------------------------- Protected Queries -----------------------------*/
  251. virtual const char
  252.  *className ( ) const;
  253.  
  254. /*-------------------------- Protected Constructors --------------------------*/
  255.   IBuffer ( unsigned newLen );
  256.  ~IBuffer ( );
  257.  
  258. private:
  259. /*--------------------------------- Private ----------------------------------*/
  260. unsigned
  261.   refs,
  262.   len;
  263. char
  264.   data[1];
  265. static IBuffer
  266.  *nullBuffer;
  267.  
  268. static IBuffer
  269.  *nullIBuffer;
  270.  
  271.  
  272. /*-------------------------------- DBCS Table --------------------------------*/
  273. static char
  274.   dbcsTable[ 256 ];
  275.  
  276.  
  277.  
  278. };
  279.  
  280.  
  281.  
  282. #pragma pack()
  283.  
  284.   #include <ibuffer.inl>
  285.   #include <ibuffern.inl>
  286.  
  287. #endif
  288.  
  289.  
  290.  
  291.