00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef __MEASUREUNIT_H__
00012 #define __MEASUREUNIT_H__
00013
00014 #include "unicode/utypes.h"
00015
00016 #if !UCONFIG_NO_FORMATTING
00017
00018 #include "unicode/unistr.h"
00019
00025 U_NAMESPACE_BEGIN
00026
00027 class StringEnumeration;
00028
00036 class U_I18N_API MeasureUnit: public UObject {
00037 public:
00038
00043 MeasureUnit() : fTypeId(0), fSubTypeId(0) {
00044 fCurrency[0] = 0;
00045 }
00046
00051 MeasureUnit(const MeasureUnit &other);
00052
00057 MeasureUnit &operator=(const MeasureUnit &other);
00058
00064 virtual UObject* clone() const;
00065
00070 virtual ~MeasureUnit();
00071
00077 virtual UBool operator==(const UObject& other) const;
00078
00084 UBool operator!=(const UObject& other) const {
00085 return !(*this == other);
00086 }
00087
00092 const char *getType() const;
00093
00098 const char *getSubtype() const;
00099
00111 static int32_t getAvailable(
00112 MeasureUnit *destArray,
00113 int32_t destCapacity,
00114 UErrorCode &errorCode);
00115
00128 static int32_t getAvailable(
00129 const char *type,
00130 MeasureUnit *destArray,
00131 int32_t destCapacity,
00132 UErrorCode &errorCode);
00133
00142 static StringEnumeration* getAvailableTypes(UErrorCode &errorCode);
00143
00155 static UClassID U_EXPORT2 getStaticClassID(void);
00156
00168 virtual UClassID getDynamicClassID(void) const;
00169
00170 #ifndef U_HIDE_INTERNAL_API
00171
00177 int32_t getIndex() const;
00178
00184 static int32_t getIndexCount();
00185
00192 static int32_t internalGetIndexForTypeAndSubtype(const char *type, const char *subtype);
00193
00198 static MeasureUnit *resolveUnitPerUnit(
00199 const MeasureUnit &unit, const MeasureUnit &perUnit);
00200 #endif
00201
00202
00203
00204
00205
00206
00207
00208
00209
00216 static MeasureUnit *createGForce(UErrorCode &status);
00217
00224 static MeasureUnit *createMeterPerSecondSquared(UErrorCode &status);
00225
00232 static MeasureUnit *createArcMinute(UErrorCode &status);
00233
00240 static MeasureUnit *createArcSecond(UErrorCode &status);
00241
00248 static MeasureUnit *createDegree(UErrorCode &status);
00249
00256 static MeasureUnit *createRadian(UErrorCode &status);
00257
00258 #ifndef U_HIDE_DRAFT_API
00259
00265 static MeasureUnit *createRevolutionAngle(UErrorCode &status);
00266 #endif
00267
00274 static MeasureUnit *createAcre(UErrorCode &status);
00275
00282 static MeasureUnit *createHectare(UErrorCode &status);
00283
00290 static MeasureUnit *createSquareCentimeter(UErrorCode &status);
00291
00298 static MeasureUnit *createSquareFoot(UErrorCode &status);
00299
00306 static MeasureUnit *createSquareInch(UErrorCode &status);
00307
00314 static MeasureUnit *createSquareKilometer(UErrorCode &status);
00315
00322 static MeasureUnit *createSquareMeter(UErrorCode &status);
00323
00330 static MeasureUnit *createSquareMile(UErrorCode &status);
00331
00338 static MeasureUnit *createSquareYard(UErrorCode &status);
00339
00346 static MeasureUnit *createKarat(UErrorCode &status);
00347
00348 #ifndef U_HIDE_DRAFT_API
00349
00355 static MeasureUnit *createMilligramPerDeciliter(UErrorCode &status);
00356 #endif
00357
00358 #ifndef U_HIDE_DRAFT_API
00359
00365 static MeasureUnit *createMillimolePerLiter(UErrorCode &status);
00366 #endif
00367
00368 #ifndef U_HIDE_DRAFT_API
00369
00375 static MeasureUnit *createPartPerMillion(UErrorCode &status);
00376 #endif
00377
00378 #ifndef U_HIDE_DRAFT_API
00379
00385 static MeasureUnit *createLiterPer100Kilometers(UErrorCode &status);
00386 #endif
00387
00394 static MeasureUnit *createLiterPerKilometer(UErrorCode &status);
00395
00402 static MeasureUnit *createMilePerGallon(UErrorCode &status);
00403
00404 #ifndef U_HIDE_DRAFT_API
00405
00411 static MeasureUnit *createMilePerGallonImperial(UErrorCode &status);
00412 #endif
00413
00420 static MeasureUnit *createBit(UErrorCode &status);
00421
00428 static MeasureUnit *createByte(UErrorCode &status);
00429
00436 static MeasureUnit *createGigabit(UErrorCode &status);
00437
00444 static MeasureUnit *createGigabyte(UErrorCode &status);
00445
00452 static MeasureUnit *createKilobit(UErrorCode &status);
00453
00460 static MeasureUnit *createKilobyte(UErrorCode &status);
00461
00468 static MeasureUnit *createMegabit(UErrorCode &status);
00469
00476 static MeasureUnit *createMegabyte(UErrorCode &status);
00477
00484 static MeasureUnit *createTerabit(UErrorCode &status);
00485
00492 static MeasureUnit *createTerabyte(UErrorCode &status);
00493
00494 #ifndef U_HIDE_DRAFT_API
00495
00501 static MeasureUnit *createCentury(UErrorCode &status);
00502 #endif
00503
00510 static MeasureUnit *createDay(UErrorCode &status);
00511
00518 static MeasureUnit *createHour(UErrorCode &status);
00519
00526 static MeasureUnit *createMicrosecond(UErrorCode &status);
00527
00534 static MeasureUnit *createMillisecond(UErrorCode &status);
00535
00542 static MeasureUnit *createMinute(UErrorCode &status);
00543
00550 static MeasureUnit *createMonth(UErrorCode &status);
00551
00558 static MeasureUnit *createNanosecond(UErrorCode &status);
00559
00566 static MeasureUnit *createSecond(UErrorCode &status);
00567
00574 static MeasureUnit *createWeek(UErrorCode &status);
00575
00582 static MeasureUnit *createYear(UErrorCode &status);
00583
00590 static MeasureUnit *createAmpere(UErrorCode &status);
00591
00598 static MeasureUnit *createMilliampere(UErrorCode &status);
00599
00606 static MeasureUnit *createOhm(UErrorCode &status);
00607
00614 static MeasureUnit *createVolt(UErrorCode &status);
00615
00622 static MeasureUnit *createCalorie(UErrorCode &status);
00623
00630 static MeasureUnit *createFoodcalorie(UErrorCode &status);
00631
00638 static MeasureUnit *createJoule(UErrorCode &status);
00639
00646 static MeasureUnit *createKilocalorie(UErrorCode &status);
00647
00654 static MeasureUnit *createKilojoule(UErrorCode &status);
00655
00662 static MeasureUnit *createKilowattHour(UErrorCode &status);
00663
00670 static MeasureUnit *createGigahertz(UErrorCode &status);
00671
00678 static MeasureUnit *createHertz(UErrorCode &status);
00679
00686 static MeasureUnit *createKilohertz(UErrorCode &status);
00687
00694 static MeasureUnit *createMegahertz(UErrorCode &status);
00695
00702 static MeasureUnit *createAstronomicalUnit(UErrorCode &status);
00703
00710 static MeasureUnit *createCentimeter(UErrorCode &status);
00711
00718 static MeasureUnit *createDecimeter(UErrorCode &status);
00719
00726 static MeasureUnit *createFathom(UErrorCode &status);
00727
00734 static MeasureUnit *createFoot(UErrorCode &status);
00735
00742 static MeasureUnit *createFurlong(UErrorCode &status);
00743
00750 static MeasureUnit *createInch(UErrorCode &status);
00751
00758 static MeasureUnit *createKilometer(UErrorCode &status);
00759
00766 static MeasureUnit *createLightYear(UErrorCode &status);
00767
00774 static MeasureUnit *createMeter(UErrorCode &status);
00775
00782 static MeasureUnit *createMicrometer(UErrorCode &status);
00783
00790 static MeasureUnit *createMile(UErrorCode &status);
00791
00792 #ifndef U_HIDE_DRAFT_API
00793
00799 static MeasureUnit *createMileScandinavian(UErrorCode &status);
00800 #endif
00801
00808 static MeasureUnit *createMillimeter(UErrorCode &status);
00809
00816 static MeasureUnit *createNanometer(UErrorCode &status);
00817
00824 static MeasureUnit *createNauticalMile(UErrorCode &status);
00825
00832 static MeasureUnit *createParsec(UErrorCode &status);
00833
00840 static MeasureUnit *createPicometer(UErrorCode &status);
00841
00848 static MeasureUnit *createYard(UErrorCode &status);
00849
00856 static MeasureUnit *createLux(UErrorCode &status);
00857
00864 static MeasureUnit *createCarat(UErrorCode &status);
00865
00872 static MeasureUnit *createGram(UErrorCode &status);
00873
00880 static MeasureUnit *createKilogram(UErrorCode &status);
00881
00888 static MeasureUnit *createMetricTon(UErrorCode &status);
00889
00896 static MeasureUnit *createMicrogram(UErrorCode &status);
00897
00904 static MeasureUnit *createMilligram(UErrorCode &status);
00905
00912 static MeasureUnit *createOunce(UErrorCode &status);
00913
00920 static MeasureUnit *createOunceTroy(UErrorCode &status);
00921
00928 static MeasureUnit *createPound(UErrorCode &status);
00929
00936 static MeasureUnit *createStone(UErrorCode &status);
00937
00944 static MeasureUnit *createTon(UErrorCode &status);
00945
00952 static MeasureUnit *createGigawatt(UErrorCode &status);
00953
00960 static MeasureUnit *createHorsepower(UErrorCode &status);
00961
00968 static MeasureUnit *createKilowatt(UErrorCode &status);
00969
00976 static MeasureUnit *createMegawatt(UErrorCode &status);
00977
00984 static MeasureUnit *createMilliwatt(UErrorCode &status);
00985
00992 static MeasureUnit *createWatt(UErrorCode &status);
00993
01000 static MeasureUnit *createHectopascal(UErrorCode &status);
01001
01008 static MeasureUnit *createInchHg(UErrorCode &status);
01009
01016 static MeasureUnit *createMillibar(UErrorCode &status);
01017
01024 static MeasureUnit *createMillimeterOfMercury(UErrorCode &status);
01025
01032 static MeasureUnit *createPoundPerSquareInch(UErrorCode &status);
01033
01040 static MeasureUnit *createKilometerPerHour(UErrorCode &status);
01041
01042 #ifndef U_HIDE_DRAFT_API
01043
01049 static MeasureUnit *createKnot(UErrorCode &status);
01050 #endif
01051
01058 static MeasureUnit *createMeterPerSecond(UErrorCode &status);
01059
01066 static MeasureUnit *createMilePerHour(UErrorCode &status);
01067
01074 static MeasureUnit *createCelsius(UErrorCode &status);
01075
01082 static MeasureUnit *createFahrenheit(UErrorCode &status);
01083
01084 #ifndef U_HIDE_DRAFT_API
01085
01091 static MeasureUnit *createGenericTemperature(UErrorCode &status);
01092 #endif
01093
01100 static MeasureUnit *createKelvin(UErrorCode &status);
01101
01108 static MeasureUnit *createAcreFoot(UErrorCode &status);
01109
01116 static MeasureUnit *createBushel(UErrorCode &status);
01117
01124 static MeasureUnit *createCentiliter(UErrorCode &status);
01125
01132 static MeasureUnit *createCubicCentimeter(UErrorCode &status);
01133
01140 static MeasureUnit *createCubicFoot(UErrorCode &status);
01141
01148 static MeasureUnit *createCubicInch(UErrorCode &status);
01149
01156 static MeasureUnit *createCubicKilometer(UErrorCode &status);
01157
01164 static MeasureUnit *createCubicMeter(UErrorCode &status);
01165
01172 static MeasureUnit *createCubicMile(UErrorCode &status);
01173
01180 static MeasureUnit *createCubicYard(UErrorCode &status);
01181
01188 static MeasureUnit *createCup(UErrorCode &status);
01189
01190 #ifndef U_HIDE_DRAFT_API
01191
01197 static MeasureUnit *createCupMetric(UErrorCode &status);
01198 #endif
01199
01206 static MeasureUnit *createDeciliter(UErrorCode &status);
01207
01214 static MeasureUnit *createFluidOunce(UErrorCode &status);
01215
01222 static MeasureUnit *createGallon(UErrorCode &status);
01223
01224 #ifndef U_HIDE_DRAFT_API
01225
01231 static MeasureUnit *createGallonImperial(UErrorCode &status);
01232 #endif
01233
01240 static MeasureUnit *createHectoliter(UErrorCode &status);
01241
01248 static MeasureUnit *createLiter(UErrorCode &status);
01249
01256 static MeasureUnit *createMegaliter(UErrorCode &status);
01257
01264 static MeasureUnit *createMilliliter(UErrorCode &status);
01265
01272 static MeasureUnit *createPint(UErrorCode &status);
01273
01274 #ifndef U_HIDE_DRAFT_API
01275
01281 static MeasureUnit *createPintMetric(UErrorCode &status);
01282 #endif
01283
01290 static MeasureUnit *createQuart(UErrorCode &status);
01291
01298 static MeasureUnit *createTablespoon(UErrorCode &status);
01299
01306 static MeasureUnit *createTeaspoon(UErrorCode &status);
01307
01308
01309
01310
01311 protected:
01312
01313 #ifndef U_HIDE_INTERNAL_API
01314
01318 void initTime(const char *timeId);
01319
01324 void initCurrency(const char *isoCurrency);
01325
01326 #endif
01327
01328 private:
01329 int32_t fTypeId;
01330 int32_t fSubTypeId;
01331 char fCurrency[4];
01332
01333 MeasureUnit(int32_t typeId, int32_t subTypeId) : fTypeId(typeId), fSubTypeId(subTypeId) {
01334 fCurrency[0] = 0;
01335 }
01336 void setTo(int32_t typeId, int32_t subTypeId);
01337 int32_t getOffset() const;
01338 static MeasureUnit *create(int typeId, int subTypeId, UErrorCode &status);
01339 };
01340
01341 U_NAMESPACE_END
01342
01343 #endif // !UNCONFIG_NO_FORMATTING
01344 #endif // __MEASUREUNIT_H__