Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members  

locbund.c

00001 /*
00002 *******************************************************************************
00003 *
00004 *   Copyright (C) 1998-1999, International Business Machines
00005 *   Corporation and others.  All Rights Reserved.
00006 *
00007 *******************************************************************************
00008 *
00009 * File locbund.c
00010 *
00011 * Modification History:
00012 *
00013 *   Date        Name        Description
00014 *   11/18/98    stephen        Creation.
00015 *   12/10/1999  bobbyr@optiosoftware.com       Fix for memory leak + string allocation bugs
00016 *******************************************************************************
00017 */
00018 
00019 #include <stdlib.h>
00020 #include "locbund.h"
00021 
00022 #include "string.h"
00023 #include "unicode/ustring.h"
00024 #include "unicode/uloc.h"
00025 
00026 ULocaleBundle*        
00027 u_locbund_new(const char *loc)
00028 {
00029   ULocaleBundle *result = (ULocaleBundle*) malloc(sizeof(ULocaleBundle));
00030   int32_t len;
00031 
00032   if(result == 0)
00033     return 0;
00034 
00035   len = (loc == 0 ? strlen(uloc_getDefault()) : strlen(loc));
00036   result->fLocale = (char*) malloc(len + 1);
00037   if(result->fLocale == 0) {
00038     free(result);
00039     return 0;
00040   }
00041   
00042   strcpy(result->fLocale, (loc == 0 ? uloc_getDefault() : loc) );
00043   
00044   result->fNumberFormat     = 0;
00045   result->fPercentFormat     = 0;
00046   result->fCurrencyFormat     = 0;
00047   result->fScientificFormat     = 0;
00048   result->fSpelloutFormat     = 0;
00049   result->fDateFormat         = 0;
00050   result->fTimeFormat         = 0;
00051 
00052   return result;
00053 }
00054 
00055 ULocaleBundle*
00056 u_locbund_clone(const ULocaleBundle *bundle)
00057 {
00058   ULocaleBundle *result = (ULocaleBundle*)malloc(sizeof(ULocaleBundle));
00059   UErrorCode status = U_ZERO_ERROR;
00060 
00061   if(result == 0)
00062     return 0;
00063   
00064   result->fLocale = (char*) malloc(strlen(bundle->fLocale) + 1);
00065   if(result->fLocale == 0) {
00066     free(result);
00067     return 0;
00068   }
00069   
00070   strcpy(result->fLocale, bundle->fLocale );
00071   
00072   result->fNumberFormat     = (bundle->fNumberFormat == 0 ? 0 :
00073                    unum_clone(bundle->fNumberFormat, &status));
00074   result->fPercentFormat     = (bundle->fPercentFormat == 0 ? 0 :
00075                    unum_clone(bundle->fPercentFormat, 
00076                           &status));
00077   result->fCurrencyFormat     = (bundle->fCurrencyFormat == 0 ? 0 :
00078                    unum_clone(bundle->fCurrencyFormat, 
00079                           &status));
00080   result->fScientificFormat     = (bundle->fScientificFormat == 0 ? 0 :
00081                    unum_clone(bundle->fScientificFormat, 
00082                           &status));
00083   result->fSpelloutFormat     = (bundle->fSpelloutFormat == 0 ? 0 :
00084                    unum_clone(bundle->fSpelloutFormat, 
00085                           &status));
00086   result->fDateFormat         = (bundle->fDateFormat == 0 ? 0 :
00087                    udat_clone(bundle->fDateFormat, &status));
00088   result->fTimeFormat         = (bundle->fTimeFormat == 0 ? 0 :
00089                    udat_clone(bundle->fTimeFormat, &status));
00090 
00091   return result;
00092 }
00093 
00094 void
00095 u_locbund_delete(ULocaleBundle *bundle)
00096 {
00097   free(bundle->fLocale);
00098 
00099   if(bundle->fNumberFormat != 0)
00100     unum_close(bundle->fNumberFormat);
00101   if(bundle->fPercentFormat != 0)
00102     unum_close(bundle->fPercentFormat);
00103   if(bundle->fCurrencyFormat != 0)
00104     unum_close(bundle->fCurrencyFormat);
00105   if(bundle->fScientificFormat != 0)
00106     unum_close(bundle->fScientificFormat);
00107   if(bundle->fSpelloutFormat != 0)
00108     unum_close(bundle->fSpelloutFormat);
00109   if(bundle->fDateFormat != 0)
00110     udat_close(bundle->fDateFormat);
00111   if(bundle->fTimeFormat != 0)
00112     udat_close(bundle->fTimeFormat);
00113 
00114   free(bundle);
00115 }
00116 
00117 UNumberFormat*        
00118 u_locbund_getNumberFormat(ULocaleBundle *bundle)
00119 {
00120   UErrorCode status = U_ZERO_ERROR;
00121   
00122   if(bundle->fNumberFormat == 0) {
00123     bundle->fNumberFormat = unum_open(UNUM_DEFAULT, bundle->fLocale, &status);
00124     if(U_FAILURE(status))
00125       return 0;
00126   }
00127   
00128   return bundle->fNumberFormat;
00129 }
00130 
00131 UNumberFormat*    
00132 u_locbund_getPercentFormat(ULocaleBundle *bundle)
00133 {
00134   UErrorCode status = U_ZERO_ERROR;
00135   
00136   if(bundle->fPercentFormat == 0) {
00137     bundle->fPercentFormat = unum_open(UNUM_PERCENT, bundle->fLocale, &status);
00138     if(U_FAILURE(status))
00139       return 0;
00140   }
00141   
00142   return bundle->fPercentFormat;
00143 }
00144 
00145 UNumberFormat*    
00146 u_locbund_getCurrencyFormat(ULocaleBundle *bundle)
00147 {
00148   UErrorCode status = U_ZERO_ERROR;
00149   
00150   if(bundle->fCurrencyFormat == 0) {
00151     bundle->fCurrencyFormat = unum_open(UNUM_CURRENCY, bundle->fLocale, 
00152                     &status);
00153     if(U_FAILURE(status))
00154       return 0;
00155   }
00156   
00157   return bundle->fCurrencyFormat;
00158 }
00159 
00160 #define PAT_SIZE 512
00161 
00162 UNumberFormat*    
00163 u_locbund_getScientificFormat(ULocaleBundle *bundle)
00164 {
00165   UErrorCode status = U_ZERO_ERROR;
00166   UChar pattern [PAT_SIZE];
00167 
00168   if(bundle->fScientificFormat == 0) {
00169     /* create the pattern */
00170     u_uastrcpy(pattern, "0.000000E00");
00171     
00172     bundle->fScientificFormat = unum_openPattern(pattern, -1,
00173                          bundle->fLocale, &status);
00174     
00175     if(U_FAILURE(status))
00176       return 0;
00177   }
00178   
00179   return bundle->fScientificFormat;
00180 }
00181 
00182 UNumberFormat*
00183 u_locbund_getSpelloutFormat(ULocaleBundle *bundle)
00184 {
00185   UErrorCode status = U_ZERO_ERROR;
00186   
00187   if(bundle->fSpelloutFormat == 0) {
00188     bundle->fSpelloutFormat = unum_open(UNUM_SPELLOUT, bundle->fLocale, 
00189                     &status);
00190   }
00191   
00192   return bundle->fSpelloutFormat;
00193 }
00194 
00195 UDateFormat*
00196 u_locbund_getDateFormat(ULocaleBundle *bundle)
00197 {
00198   UErrorCode status = U_ZERO_ERROR;
00199   
00200   if(bundle->fDateFormat == 0) {
00201     bundle->fDateFormat = udat_open(UDAT_NONE, UDAT_DEFAULT, 
00202                     bundle->fLocale, 0, 0, &status);
00203   }
00204   
00205   return bundle->fDateFormat;
00206 }
00207 
00208 UDateFormat*
00209 u_locbund_getTimeFormat(ULocaleBundle *bundle)
00210 {
00211   UErrorCode status = U_ZERO_ERROR;
00212   
00213   if(bundle->fTimeFormat == 0) {
00214     bundle->fTimeFormat = udat_open(UDAT_DEFAULT, UDAT_NONE, 
00215                     bundle->fLocale, 0, 0, &status);
00216   }
00217 
00218   return bundle->fTimeFormat;
00219 }

Generated at Tue Dec 5 10:47:47 2000 for ICU by doxygen1.2.3 written by Dimitri van Heesch, © 1997-2000