LCOV - code coverage report
Current view: top level - intl/icu/source/common/unicode - appendable.h (source / functions) Hit Total Coverage
Test: output.info Lines: 0 2 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 2 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : // © 2016 and later: Unicode, Inc. and others.
       2             : // License & terms of use: http://www.unicode.org/copyright.html
       3             : /*
       4             : *******************************************************************************
       5             : *   Copyright (C) 2011-2012, International Business Machines
       6             : *   Corporation and others.  All Rights Reserved.
       7             : *******************************************************************************
       8             : *   file name:  appendable.h
       9             : *   encoding:   UTF-8
      10             : *   tab size:   8 (not used)
      11             : *   indentation:4
      12             : *
      13             : *   created on: 2010dec07
      14             : *   created by: Markus W. Scherer
      15             : */
      16             : 
      17             : #ifndef __APPENDABLE_H__
      18             : #define __APPENDABLE_H__
      19             : 
      20             : /**
      21             :  * \file
      22             :  * \brief C++ API: Appendable class: Sink for Unicode code points and 16-bit code units (char16_ts).
      23             :  */
      24             : 
      25             : #include "unicode/utypes.h"
      26             : #include "unicode/uobject.h"
      27             : 
      28             : U_NAMESPACE_BEGIN
      29             : 
      30             : class UnicodeString;
      31             : 
      32             : /**
      33             :  * Base class for objects to which Unicode characters and strings can be appended.
      34             :  * Combines elements of Java Appendable and ICU4C ByteSink.
      35             :  *
      36             :  * This class can be used in APIs where it does not matter whether the actual destination is
      37             :  * a UnicodeString, a char16_t[] array, a UnicodeSet, or any other object
      38             :  * that receives and processes characters and/or strings.
      39             :  *
      40             :  * Implementation classes must implement at least appendCodeUnit(char16_t).
      41             :  * The base class provides default implementations for the other methods.
      42             :  *
      43             :  * The methods do not take UErrorCode parameters.
      44             :  * If an error occurs (e.g., out-of-memory),
      45             :  * in addition to returning FALSE from failing operations,
      46             :  * the implementation must prevent unexpected behavior (e.g., crashes)
      47             :  * from further calls and should make the error condition available separately
      48             :  * (e.g., store a UErrorCode, make/keep a UnicodeString bogus).
      49             :  * @stable ICU 4.8
      50             :  */
      51           0 : class U_COMMON_API Appendable : public UObject {
      52             : public:
      53             :     /**
      54             :      * Destructor.
      55             :      * @stable ICU 4.8
      56             :      */
      57             :     ~Appendable();
      58             : 
      59             :     /**
      60             :      * Appends a 16-bit code unit.
      61             :      * @param c code unit
      62             :      * @return TRUE if the operation succeeded
      63             :      * @stable ICU 4.8
      64             :      */
      65             :     virtual UBool appendCodeUnit(char16_t c) = 0;
      66             : 
      67             :     /**
      68             :      * Appends a code point.
      69             :      * The default implementation calls appendCodeUnit(char16_t) once or twice.
      70             :      * @param c code point 0..0x10ffff
      71             :      * @return TRUE if the operation succeeded
      72             :      * @stable ICU 4.8
      73             :      */
      74             :     virtual UBool appendCodePoint(UChar32 c);
      75             : 
      76             :     /**
      77             :      * Appends a string.
      78             :      * The default implementation calls appendCodeUnit(char16_t) for each code unit.
      79             :      * @param s string, must not be NULL if length!=0
      80             :      * @param length string length, or -1 if NUL-terminated
      81             :      * @return TRUE if the operation succeeded
      82             :      * @stable ICU 4.8
      83             :      */
      84             :     virtual UBool appendString(const char16_t *s, int32_t length);
      85             : 
      86             :     /**
      87             :      * Tells the object that the caller is going to append roughly
      88             :      * appendCapacity char16_ts. A subclass might use this to pre-allocate
      89             :      * a larger buffer if necessary.
      90             :      * The default implementation does nothing. (It always returns TRUE.)
      91             :      * @param appendCapacity estimated number of char16_ts that will be appended
      92             :      * @return TRUE if the operation succeeded
      93             :      * @stable ICU 4.8
      94             :      */
      95             :     virtual UBool reserveAppendCapacity(int32_t appendCapacity);
      96             : 
      97             :     /**
      98             :      * Returns a writable buffer for appending and writes the buffer's capacity to
      99             :      * *resultCapacity. Guarantees *resultCapacity>=minCapacity.
     100             :      * May return a pointer to the caller-owned scratch buffer which must have
     101             :      * scratchCapacity>=minCapacity.
     102             :      * The returned buffer is only valid until the next operation
     103             :      * on this Appendable.
     104             :      *
     105             :      * After writing at most *resultCapacity char16_ts, call appendString() with the
     106             :      * pointer returned from this function and the number of char16_ts written.
     107             :      * Many appendString() implementations will avoid copying char16_ts if this function
     108             :      * returned an internal buffer.
     109             :      *
     110             :      * Partial usage example:
     111             :      * \code
     112             :      *  int32_t capacity;
     113             :      *  char16_t* buffer = app.getAppendBuffer(..., &capacity);
     114             :      *  ... Write n char16_ts into buffer, with n <= capacity.
     115             :      *  app.appendString(buffer, n);
     116             :      * \endcode
     117             :      * In many implementations, that call to append will avoid copying char16_ts.
     118             :      *
     119             :      * If the Appendable allocates or reallocates an internal buffer, it should use
     120             :      * the desiredCapacityHint if appropriate.
     121             :      * If a caller cannot provide a reasonable guess at the desired capacity,
     122             :      * it should pass desiredCapacityHint=0.
     123             :      *
     124             :      * If a non-scratch buffer is returned, the caller may only pass
     125             :      * a prefix to it to appendString().
     126             :      * That is, it is not correct to pass an interior pointer to appendString().
     127             :      *
     128             :      * The default implementation always returns the scratch buffer.
     129             :      *
     130             :      * @param minCapacity required minimum capacity of the returned buffer;
     131             :      *                    must be non-negative
     132             :      * @param desiredCapacityHint desired capacity of the returned buffer;
     133             :      *                            must be non-negative
     134             :      * @param scratch default caller-owned buffer
     135             :      * @param scratchCapacity capacity of the scratch buffer
     136             :      * @param resultCapacity pointer to an integer which will be set to the
     137             :      *                       capacity of the returned buffer
     138             :      * @return a buffer with *resultCapacity>=minCapacity
     139             :      * @stable ICU 4.8
     140             :      */
     141             :     virtual char16_t *getAppendBuffer(int32_t minCapacity,
     142             :                                    int32_t desiredCapacityHint,
     143             :                                    char16_t *scratch, int32_t scratchCapacity,
     144             :                                    int32_t *resultCapacity);
     145             : };
     146             : 
     147             : /**
     148             :  * An Appendable implementation which writes to a UnicodeString.
     149             :  *
     150             :  * This class is not intended for public subclassing.
     151             :  * @stable ICU 4.8
     152             :  */
     153             : class U_COMMON_API UnicodeStringAppendable : public Appendable {
     154             : public:
     155             :     /**
     156             :      * Aliases the UnicodeString (keeps its reference) for writing.
     157             :      * @param s The UnicodeString to which this Appendable will write.
     158             :      * @stable ICU 4.8
     159             :      */
     160           0 :     explicit UnicodeStringAppendable(UnicodeString &s) : str(s) {}
     161             : 
     162             :     /**
     163             :      * Destructor.
     164             :      * @stable ICU 4.8
     165             :      */
     166             :     ~UnicodeStringAppendable();
     167             : 
     168             :     /**
     169             :      * Appends a 16-bit code unit to the string.
     170             :      * @param c code unit
     171             :      * @return TRUE if the operation succeeded
     172             :      * @stable ICU 4.8
     173             :      */
     174             :     virtual UBool appendCodeUnit(char16_t c);
     175             : 
     176             :     /**
     177             :      * Appends a code point to the string.
     178             :      * @param c code point 0..0x10ffff
     179             :      * @return TRUE if the operation succeeded
     180             :      * @stable ICU 4.8
     181             :      */
     182             :     virtual UBool appendCodePoint(UChar32 c);
     183             : 
     184             :     /**
     185             :      * Appends a string to the UnicodeString.
     186             :      * @param s string, must not be NULL if length!=0
     187             :      * @param length string length, or -1 if NUL-terminated
     188             :      * @return TRUE if the operation succeeded
     189             :      * @stable ICU 4.8
     190             :      */
     191             :     virtual UBool appendString(const char16_t *s, int32_t length);
     192             : 
     193             :     /**
     194             :      * Tells the UnicodeString that the caller is going to append roughly
     195             :      * appendCapacity char16_ts.
     196             :      * @param appendCapacity estimated number of char16_ts that will be appended
     197             :      * @return TRUE if the operation succeeded
     198             :      * @stable ICU 4.8
     199             :      */
     200             :     virtual UBool reserveAppendCapacity(int32_t appendCapacity);
     201             : 
     202             :     /**
     203             :      * Returns a writable buffer for appending and writes the buffer's capacity to
     204             :      * *resultCapacity. Guarantees *resultCapacity>=minCapacity.
     205             :      * May return a pointer to the caller-owned scratch buffer which must have
     206             :      * scratchCapacity>=minCapacity.
     207             :      * The returned buffer is only valid until the next write operation
     208             :      * on the UnicodeString.
     209             :      *
     210             :      * For details see Appendable::getAppendBuffer().
     211             :      *
     212             :      * @param minCapacity required minimum capacity of the returned buffer;
     213             :      *                    must be non-negative
     214             :      * @param desiredCapacityHint desired capacity of the returned buffer;
     215             :      *                            must be non-negative
     216             :      * @param scratch default caller-owned buffer
     217             :      * @param scratchCapacity capacity of the scratch buffer
     218             :      * @param resultCapacity pointer to an integer which will be set to the
     219             :      *                       capacity of the returned buffer
     220             :      * @return a buffer with *resultCapacity>=minCapacity
     221             :      * @stable ICU 4.8
     222             :      */
     223             :     virtual char16_t *getAppendBuffer(int32_t minCapacity,
     224             :                                    int32_t desiredCapacityHint,
     225             :                                    char16_t *scratch, int32_t scratchCapacity,
     226             :                                    int32_t *resultCapacity);
     227             : 
     228             : private:
     229             :     UnicodeString &str;
     230             : };
     231             : 
     232             : U_NAMESPACE_END
     233             : 
     234             : #endif  // __APPENDABLE_H__

Generated by: LCOV version 1.13