/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright (c) 1999 by Sun Microsystems, Inc. * All rights reserved. */ #ifndef _ICONV_TM_HASH_H #define _ICONV_TM_HASH_H #ifdef __cplusplus extern "C" { #endif static itm_size_t hash(const char *, itm_size_t, itm_size_t); static itm_num_t hash_dense_encoding(const unsigned char *, itm_size_t, const unsigned char *, const unsigned char *); static itm_size_t hash(const char *ptr, itm_size_t size, itm_size_t hash_size) { itm_size_t value; value = *(ptr++); --size; for (; 0 < size; --size) { value *= 27239; value += *(ptr++); } return (value % hash_size); } static itm_num_t hash_dense_encoding( const unsigned char *byte_seq, itm_size_t length, const unsigned char *byte_seq_min, const unsigned char *byte_seq_max) { long i; itm_num_t num; num = (*byte_seq - *byte_seq_min); byte_seq_min++; byte_seq_max++; for (i = 1, byte_seq++; i < length; i++, byte_seq++, byte_seq_min++, byte_seq_max++) { if ((*byte_seq < *byte_seq_min) || (*byte_seq_max < *byte_seq)) { return (-1); } num *= (*byte_seq_max - *byte_seq_min + 1); num += (*byte_seq - *byte_seq_min); } return (num); } #ifdef __cplusplus } #endif #endif /* !_ICONV_TM_HASH_H */