1/* 2******************************************************************************* 3* 4* Copyright (C) 2001 - 2005, International Business Machines 5* Corporation and others. All Rights Reserved. 6* 7******************************************************************************* 8* file name: newcol.cpp 9* encoding: US-ASCII 10* tab size: 8 (not used) 11* indentation:4 12* 13* created on: 2001jul24 14* created by: Vladimir Weinstein 15*/ 16 17/****************************************************************************** 18 * This is the module that uses new collation 19 ******************************************************************************/ 20 21#include <stdio.h> 22#include <stdlib.h> 23#include "unicode/ucol.h" 24 25// Very simple example code - sticks a sortkey in the buffer 26// Not much error checking 27int32_t getSortKey_current(const char *locale, const UChar *string, int32_t sLen, uint8_t *buffer, int32_t bLen) { 28 UErrorCode status = U_ZERO_ERROR; 29 UCollator *coll = ucol_open(locale, &status); 30 if(U_FAILURE(status)) { 31 return -1; 32 } 33 int32_t result = ucol_getSortKey(coll, string, sLen, buffer, bLen); 34 ucol_close(coll); 35 return result; 36} 37 38// This one can be used for passing to qsort function 39// Not thread safe or anything 40static UCollator *compareCollator = NULL; 41 42int compare_current(const void *string1, const void *string2) { 43 if(compareCollator != NULL) { 44 UCollationResult res = ucol_strcoll(compareCollator, (UChar *) string1, -1, (UChar *) string2, -1); 45 if(res == UCOL_LESS) { 46 return -1; 47 } else if(res == UCOL_GREATER) { 48 return 1; 49 } else { 50 return 0; 51 } 52 } else { 53 return 0; 54 } 55} 56 57void initCollator_current(const char *locale) { 58 UErrorCode status = U_ZERO_ERROR; 59 compareCollator = ucol_open(locale, &status); 60} 61 62void closeCollator_current(void) { 63 ucol_close(compareCollator); 64 compareCollator = NULL; 65} 66 67 68extern "C" void test_current(UChar data[][5], uint32_t size, uint32_t maxlen, uint8_t keys[][32]) { 69 uint32_t i = 0; 70 int32_t keySize = 0; 71 UVersionInfo uvi; 72 73 u_getVersion(uvi); 74 fprintf(stderr, "Entered current, version: [%d.%d.%d.%d]\nMoving to sortkeys\n", uvi[0], uvi[1], uvi[2], uvi[3]); 75 76 for(i = 0; i<size; i++) { 77 keySize = getSortKey_current("ja", data[i], -1, keys[i], 32); 78 fprintf(stderr, "For i=%d, size of sortkey is %d\n", i, keySize); 79 } 80 81 fprintf(stderr, "Done sortkeys, doing qsort test\n"); 82 83 initCollator_current("ja"); 84 qsort(data, size, maxlen*sizeof(UChar), compare_current); 85 closeCollator_current(); 86 87 fprintf(stderr, "Done current!\n"); 88} 89 90 91