/*
*******************************************************************************
*                                                                             *
* COPYRIGHT:                                                                  *
*   (C) Copyright International Business Machines Corporation, 1999           *
*   Licensed Material - Program-Property of IBM - All Rights Reserved.        *
*   US Government Users Restricted Rights - Use, duplication, or disclosure   *
*   restricted by GSA ADP Schedule Contract with IBM Corp.                    *
*                                                                             *
*******************************************************************************
*
* File uscanset.h
*
* Modification History:
*
*   Date        Name        Description
*   12/03/98    stephen        Creation.
*   03/12/99    stephen     Modified for new C API.
*******************************************************************************
*/

#ifndef USCANSET_H
#define USCANSET_H

#include "utypes.h"


/**
 * Simple struct for a scanset pair, ie a-z or A-Z
 */
struct u_scanf_scanset_pair {
  UChar start;
  UChar end;
};
typedef struct u_scanf_scanset_pair u_scanf_scanset_pair;

#define U_SCANF_MAX_SCANSET_SIZE 512

/**
 * Struct representing a scanset
 */
struct u_scanf_scanset {
  bool_t        is_inclusive;    /* false if '^' is given */

  UChar            singles        [U_SCANF_MAX_SCANSET_SIZE];
  u_scanf_scanset_pair     pairs         [U_SCANF_MAX_SCANSET_SIZE];

  int32_t        single_count;    /* count of single chars in set */
  int32_t        pair_count;     /* count of pairs in set */
};
typedef struct u_scanf_scanset u_scanf_scanset;

/**
 * Init a u_scanf_scanset.
 * @param scanset A pointer to the u_scanf_scanset to init.
 * @param s A pointer to the first character in the scanset
 * @param len On input, a pointer to the length of <TT>s</TT>.  On output,
 * a pointer to the number of characters parsed, excluding the final ']'
 * @return TRUE if successful, FALSE otherwise.
 */
bool_t
u_scanf_scanset_init(u_scanf_scanset     *scanset,
             const UChar    *s,
             int32_t        *len);

/**
 * Determine if a UChar is in a u_scanf_scanset
 * @param scanset A pointer to a u_scanf_scanset
 * @param c The UChar to test.
 * @return TRUE if the UChar is in the scanset, FALSE otherwise
 */
bool_t
u_scanf_scanset_in(u_scanf_scanset     *scanset,
           UChar         c);

#endif




