00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef __MEASUREUNIT_H__
00014 #define __MEASUREUNIT_H__
00015
00016 #include "unicode/utypes.h"
00017
00018 #if !UCONFIG_NO_FORMATTING
00019
00020 #include "unicode/unistr.h"
00021
00027 U_NAMESPACE_BEGIN
00028
00029 class StringEnumeration;
00030
00038 class U_I18N_API MeasureUnit: public UObject {
00039 public:
00040
00046 MeasureUnit();
00047
00052 MeasureUnit(const MeasureUnit &other);
00053
00058 MeasureUnit &operator=(const MeasureUnit &other);
00059
00065 virtual UObject* clone() const;
00066
00071 virtual ~MeasureUnit();
00072
00078 virtual UBool operator==(const UObject& other) const;
00079
00085 UBool operator!=(const UObject& other) const {
00086 return !(*this == other);
00087 }
00088
00093 const char *getType() const;
00094
00099 const char *getSubtype() const;
00100
00112 static int32_t getAvailable(
00113 MeasureUnit *destArray,
00114 int32_t destCapacity,
00115 UErrorCode &errorCode);
00116
00129 static int32_t getAvailable(
00130 const char *type,
00131 MeasureUnit *destArray,
00132 int32_t destCapacity,
00133 UErrorCode &errorCode);
00134
00143 static StringEnumeration* getAvailableTypes(UErrorCode &errorCode);
00144
00156 static UClassID U_EXPORT2 getStaticClassID(void);
00157
00169 virtual UClassID getDynamicClassID(void) const;
00170
00171 #ifndef U_HIDE_INTERNAL_API
00172
00178 int32_t getIndex() const;
00179
00185 static int32_t getIndexCount();
00186
00193 static int32_t internalGetIndexForTypeAndSubtype(const char *type, const char *subtype);
00194
00199 static MeasureUnit *resolveUnitPerUnit(
00200 const MeasureUnit &unit, const MeasureUnit &perUnit);
00201 #endif
00202
00203
00204
00205
00206
00207
00208
00209
00210
00217 static MeasureUnit *createGForce(UErrorCode &status);
00218
00225 static MeasureUnit *createMeterPerSecondSquared(UErrorCode &status);
00226
00233 static MeasureUnit *createArcMinute(UErrorCode &status);
00234
00241 static MeasureUnit *createArcSecond(UErrorCode &status);
00242
00249 static MeasureUnit *createDegree(UErrorCode &status);
00250
00257 static MeasureUnit *createRadian(UErrorCode &status);
00258
00265 static MeasureUnit *createRevolutionAngle(UErrorCode &status);
00266
00273 static MeasureUnit *createAcre(UErrorCode &status);
00274
00281 static MeasureUnit *createHectare(UErrorCode &status);
00282
00289 static MeasureUnit *createSquareCentimeter(UErrorCode &status);
00290
00297 static MeasureUnit *createSquareFoot(UErrorCode &status);
00298
00305 static MeasureUnit *createSquareInch(UErrorCode &status);
00306
00313 static MeasureUnit *createSquareKilometer(UErrorCode &status);
00314
00321 static MeasureUnit *createSquareMeter(UErrorCode &status);
00322
00329 static MeasureUnit *createSquareMile(UErrorCode &status);
00330
00337 static MeasureUnit *createSquareYard(UErrorCode &status);
00338
00345 static MeasureUnit *createKarat(UErrorCode &status);
00346
00353 static MeasureUnit *createMilligramPerDeciliter(UErrorCode &status);
00354
00361 static MeasureUnit *createMillimolePerLiter(UErrorCode &status);
00362
00369 static MeasureUnit *createPartPerMillion(UErrorCode &status);
00370
00377 static MeasureUnit *createLiterPer100Kilometers(UErrorCode &status);
00378
00385 static MeasureUnit *createLiterPerKilometer(UErrorCode &status);
00386
00393 static MeasureUnit *createMilePerGallon(UErrorCode &status);
00394
00401 static MeasureUnit *createMilePerGallonImperial(UErrorCode &status);
00402
00403
00404
00405
00406
00407
00408
00409
00410
00417 static MeasureUnit *createBit(UErrorCode &status);
00418
00425 static MeasureUnit *createByte(UErrorCode &status);
00426
00433 static MeasureUnit *createGigabit(UErrorCode &status);
00434
00441 static MeasureUnit *createGigabyte(UErrorCode &status);
00442
00449 static MeasureUnit *createKilobit(UErrorCode &status);
00450
00457 static MeasureUnit *createKilobyte(UErrorCode &status);
00458
00465 static MeasureUnit *createMegabit(UErrorCode &status);
00466
00473 static MeasureUnit *createMegabyte(UErrorCode &status);
00474
00481 static MeasureUnit *createTerabit(UErrorCode &status);
00482
00489 static MeasureUnit *createTerabyte(UErrorCode &status);
00490
00497 static MeasureUnit *createCentury(UErrorCode &status);
00498
00505 static MeasureUnit *createDay(UErrorCode &status);
00506
00513 static MeasureUnit *createHour(UErrorCode &status);
00514
00521 static MeasureUnit *createMicrosecond(UErrorCode &status);
00522
00529 static MeasureUnit *createMillisecond(UErrorCode &status);
00530
00537 static MeasureUnit *createMinute(UErrorCode &status);
00538
00545 static MeasureUnit *createMonth(UErrorCode &status);
00546
00553 static MeasureUnit *createNanosecond(UErrorCode &status);
00554
00561 static MeasureUnit *createSecond(UErrorCode &status);
00562
00569 static MeasureUnit *createWeek(UErrorCode &status);
00570
00577 static MeasureUnit *createYear(UErrorCode &status);
00578
00585 static MeasureUnit *createAmpere(UErrorCode &status);
00586
00593 static MeasureUnit *createMilliampere(UErrorCode &status);
00594
00601 static MeasureUnit *createOhm(UErrorCode &status);
00602
00609 static MeasureUnit *createVolt(UErrorCode &status);
00610
00617 static MeasureUnit *createCalorie(UErrorCode &status);
00618
00625 static MeasureUnit *createFoodcalorie(UErrorCode &status);
00626
00633 static MeasureUnit *createJoule(UErrorCode &status);
00634
00641 static MeasureUnit *createKilocalorie(UErrorCode &status);
00642
00649 static MeasureUnit *createKilojoule(UErrorCode &status);
00650
00657 static MeasureUnit *createKilowattHour(UErrorCode &status);
00658
00665 static MeasureUnit *createGigahertz(UErrorCode &status);
00666
00673 static MeasureUnit *createHertz(UErrorCode &status);
00674
00681 static MeasureUnit *createKilohertz(UErrorCode &status);
00682
00689 static MeasureUnit *createMegahertz(UErrorCode &status);
00690
00697 static MeasureUnit *createAstronomicalUnit(UErrorCode &status);
00698
00705 static MeasureUnit *createCentimeter(UErrorCode &status);
00706
00713 static MeasureUnit *createDecimeter(UErrorCode &status);
00714
00721 static MeasureUnit *createFathom(UErrorCode &status);
00722
00729 static MeasureUnit *createFoot(UErrorCode &status);
00730
00737 static MeasureUnit *createFurlong(UErrorCode &status);
00738
00745 static MeasureUnit *createInch(UErrorCode &status);
00746
00753 static MeasureUnit *createKilometer(UErrorCode &status);
00754
00761 static MeasureUnit *createLightYear(UErrorCode &status);
00762
00769 static MeasureUnit *createMeter(UErrorCode &status);
00770
00777 static MeasureUnit *createMicrometer(UErrorCode &status);
00778
00785 static MeasureUnit *createMile(UErrorCode &status);
00786
00793 static MeasureUnit *createMileScandinavian(UErrorCode &status);
00794
00801 static MeasureUnit *createMillimeter(UErrorCode &status);
00802
00809 static MeasureUnit *createNanometer(UErrorCode &status);
00810
00817 static MeasureUnit *createNauticalMile(UErrorCode &status);
00818
00825 static MeasureUnit *createParsec(UErrorCode &status);
00826
00833 static MeasureUnit *createPicometer(UErrorCode &status);
00834
00835 #ifndef U_HIDE_DRAFT_API
00836
00842 static MeasureUnit *createPoint(UErrorCode &status);
00843 #endif
00844
00851 static MeasureUnit *createYard(UErrorCode &status);
00852
00859 static MeasureUnit *createLux(UErrorCode &status);
00860
00867 static MeasureUnit *createCarat(UErrorCode &status);
00868
00875 static MeasureUnit *createGram(UErrorCode &status);
00876
00883 static MeasureUnit *createKilogram(UErrorCode &status);
00884
00891 static MeasureUnit *createMetricTon(UErrorCode &status);
00892
00899 static MeasureUnit *createMicrogram(UErrorCode &status);
00900
00907 static MeasureUnit *createMilligram(UErrorCode &status);
00908
00915 static MeasureUnit *createOunce(UErrorCode &status);
00916
00923 static MeasureUnit *createOunceTroy(UErrorCode &status);
00924
00931 static MeasureUnit *createPound(UErrorCode &status);
00932
00939 static MeasureUnit *createStone(UErrorCode &status);
00940
00947 static MeasureUnit *createTon(UErrorCode &status);
00948
00955 static MeasureUnit *createGigawatt(UErrorCode &status);
00956
00963 static MeasureUnit *createHorsepower(UErrorCode &status);
00964
00971 static MeasureUnit *createKilowatt(UErrorCode &status);
00972
00979 static MeasureUnit *createMegawatt(UErrorCode &status);
00980
00987 static MeasureUnit *createMilliwatt(UErrorCode &status);
00988
00995 static MeasureUnit *createWatt(UErrorCode &status);
00996
01003 static MeasureUnit *createHectopascal(UErrorCode &status);
01004
01011 static MeasureUnit *createInchHg(UErrorCode &status);
01012
01019 static MeasureUnit *createMillibar(UErrorCode &status);
01020
01027 static MeasureUnit *createMillimeterOfMercury(UErrorCode &status);
01028
01035 static MeasureUnit *createPoundPerSquareInch(UErrorCode &status);
01036
01043 static MeasureUnit *createKilometerPerHour(UErrorCode &status);
01044
01051 static MeasureUnit *createKnot(UErrorCode &status);
01052
01059 static MeasureUnit *createMeterPerSecond(UErrorCode &status);
01060
01067 static MeasureUnit *createMilePerHour(UErrorCode &status);
01068
01075 static MeasureUnit *createCelsius(UErrorCode &status);
01076
01083 static MeasureUnit *createFahrenheit(UErrorCode &status);
01084
01091 static MeasureUnit *createGenericTemperature(UErrorCode &status);
01092
01099 static MeasureUnit *createKelvin(UErrorCode &status);
01100
01107 static MeasureUnit *createAcreFoot(UErrorCode &status);
01108
01115 static MeasureUnit *createBushel(UErrorCode &status);
01116
01123 static MeasureUnit *createCentiliter(UErrorCode &status);
01124
01131 static MeasureUnit *createCubicCentimeter(UErrorCode &status);
01132
01139 static MeasureUnit *createCubicFoot(UErrorCode &status);
01140
01147 static MeasureUnit *createCubicInch(UErrorCode &status);
01148
01155 static MeasureUnit *createCubicKilometer(UErrorCode &status);
01156
01163 static MeasureUnit *createCubicMeter(UErrorCode &status);
01164
01171 static MeasureUnit *createCubicMile(UErrorCode &status);
01172
01179 static MeasureUnit *createCubicYard(UErrorCode &status);
01180
01187 static MeasureUnit *createCup(UErrorCode &status);
01188
01195 static MeasureUnit *createCupMetric(UErrorCode &status);
01196
01203 static MeasureUnit *createDeciliter(UErrorCode &status);
01204
01211 static MeasureUnit *createFluidOunce(UErrorCode &status);
01212
01219 static MeasureUnit *createGallon(UErrorCode &status);
01220
01227 static MeasureUnit *createGallonImperial(UErrorCode &status);
01228
01235 static MeasureUnit *createHectoliter(UErrorCode &status);
01236
01243 static MeasureUnit *createLiter(UErrorCode &status);
01244
01251 static MeasureUnit *createMegaliter(UErrorCode &status);
01252
01259 static MeasureUnit *createMilliliter(UErrorCode &status);
01260
01267 static MeasureUnit *createPint(UErrorCode &status);
01268
01275 static MeasureUnit *createPintMetric(UErrorCode &status);
01276
01283 static MeasureUnit *createQuart(UErrorCode &status);
01284
01291 static MeasureUnit *createTablespoon(UErrorCode &status);
01292
01299 static MeasureUnit *createTeaspoon(UErrorCode &status);
01300
01301
01302
01303
01304 protected:
01305
01306 #ifndef U_HIDE_INTERNAL_API
01307
01311 void initTime(const char *timeId);
01312
01317 void initCurrency(const char *isoCurrency);
01318
01323 void initNoUnit(const char *subtype);
01324
01325 #endif
01326
01327 private:
01328 int32_t fTypeId;
01329 int32_t fSubTypeId;
01330 char fCurrency[4];
01331
01332 MeasureUnit(int32_t typeId, int32_t subTypeId) : fTypeId(typeId), fSubTypeId(subTypeId) {
01333 fCurrency[0] = 0;
01334 }
01335 void setTo(int32_t typeId, int32_t subTypeId);
01336 int32_t getOffset() const;
01337 static MeasureUnit *create(int typeId, int subTypeId, UErrorCode &status);
01338 };
01339
01340 U_NAMESPACE_END
01341
01342 #endif // !UNCONFIG_NO_FORMATTING
01343 #endif // __MEASUREUNIT_H__