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, bool* isResolved);
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
00371 #ifndef U_HIDE_DRAFT_API
00372
00378 static MeasureUnit *createPercent(UErrorCode &status);
00379 #endif
00380
00381 #ifndef U_HIDE_DRAFT_API
00382
00388 static MeasureUnit *createPermille(UErrorCode &status);
00389 #endif
00390
00397 static MeasureUnit *createLiterPer100Kilometers(UErrorCode &status);
00398
00405 static MeasureUnit *createLiterPerKilometer(UErrorCode &status);
00406
00413 static MeasureUnit *createMilePerGallon(UErrorCode &status);
00414
00421 static MeasureUnit *createMilePerGallonImperial(UErrorCode &status);
00422
00429 static MeasureUnit *createBit(UErrorCode &status);
00430
00437 static MeasureUnit *createByte(UErrorCode &status);
00438
00445 static MeasureUnit *createGigabit(UErrorCode &status);
00446
00453 static MeasureUnit *createGigabyte(UErrorCode &status);
00454
00461 static MeasureUnit *createKilobit(UErrorCode &status);
00462
00469 static MeasureUnit *createKilobyte(UErrorCode &status);
00470
00477 static MeasureUnit *createMegabit(UErrorCode &status);
00478
00485 static MeasureUnit *createMegabyte(UErrorCode &status);
00486
00487 #ifndef U_HIDE_DRAFT_API
00488
00494 static MeasureUnit *createPetabyte(UErrorCode &status);
00495 #endif
00496
00503 static MeasureUnit *createTerabit(UErrorCode &status);
00504
00511 static MeasureUnit *createTerabyte(UErrorCode &status);
00512
00519 static MeasureUnit *createCentury(UErrorCode &status);
00520
00527 static MeasureUnit *createDay(UErrorCode &status);
00528
00535 static MeasureUnit *createHour(UErrorCode &status);
00536
00543 static MeasureUnit *createMicrosecond(UErrorCode &status);
00544
00551 static MeasureUnit *createMillisecond(UErrorCode &status);
00552
00559 static MeasureUnit *createMinute(UErrorCode &status);
00560
00567 static MeasureUnit *createMonth(UErrorCode &status);
00568
00575 static MeasureUnit *createNanosecond(UErrorCode &status);
00576
00583 static MeasureUnit *createSecond(UErrorCode &status);
00584
00591 static MeasureUnit *createWeek(UErrorCode &status);
00592
00599 static MeasureUnit *createYear(UErrorCode &status);
00600
00607 static MeasureUnit *createAmpere(UErrorCode &status);
00608
00615 static MeasureUnit *createMilliampere(UErrorCode &status);
00616
00623 static MeasureUnit *createOhm(UErrorCode &status);
00624
00631 static MeasureUnit *createVolt(UErrorCode &status);
00632
00639 static MeasureUnit *createCalorie(UErrorCode &status);
00640
00647 static MeasureUnit *createFoodcalorie(UErrorCode &status);
00648
00655 static MeasureUnit *createJoule(UErrorCode &status);
00656
00663 static MeasureUnit *createKilocalorie(UErrorCode &status);
00664
00671 static MeasureUnit *createKilojoule(UErrorCode &status);
00672
00679 static MeasureUnit *createKilowattHour(UErrorCode &status);
00680
00687 static MeasureUnit *createGigahertz(UErrorCode &status);
00688
00695 static MeasureUnit *createHertz(UErrorCode &status);
00696
00703 static MeasureUnit *createKilohertz(UErrorCode &status);
00704
00711 static MeasureUnit *createMegahertz(UErrorCode &status);
00712
00719 static MeasureUnit *createAstronomicalUnit(UErrorCode &status);
00720
00727 static MeasureUnit *createCentimeter(UErrorCode &status);
00728
00735 static MeasureUnit *createDecimeter(UErrorCode &status);
00736
00743 static MeasureUnit *createFathom(UErrorCode &status);
00744
00751 static MeasureUnit *createFoot(UErrorCode &status);
00752
00759 static MeasureUnit *createFurlong(UErrorCode &status);
00760
00767 static MeasureUnit *createInch(UErrorCode &status);
00768
00775 static MeasureUnit *createKilometer(UErrorCode &status);
00776
00783 static MeasureUnit *createLightYear(UErrorCode &status);
00784
00791 static MeasureUnit *createMeter(UErrorCode &status);
00792
00799 static MeasureUnit *createMicrometer(UErrorCode &status);
00800
00807 static MeasureUnit *createMile(UErrorCode &status);
00808
00815 static MeasureUnit *createMileScandinavian(UErrorCode &status);
00816
00823 static MeasureUnit *createMillimeter(UErrorCode &status);
00824
00831 static MeasureUnit *createNanometer(UErrorCode &status);
00832
00839 static MeasureUnit *createNauticalMile(UErrorCode &status);
00840
00847 static MeasureUnit *createParsec(UErrorCode &status);
00848
00855 static MeasureUnit *createPicometer(UErrorCode &status);
00856
00863 static MeasureUnit *createPoint(UErrorCode &status);
00864
00871 static MeasureUnit *createYard(UErrorCode &status);
00872
00879 static MeasureUnit *createLux(UErrorCode &status);
00880
00887 static MeasureUnit *createCarat(UErrorCode &status);
00888
00895 static MeasureUnit *createGram(UErrorCode &status);
00896
00903 static MeasureUnit *createKilogram(UErrorCode &status);
00904
00911 static MeasureUnit *createMetricTon(UErrorCode &status);
00912
00919 static MeasureUnit *createMicrogram(UErrorCode &status);
00920
00927 static MeasureUnit *createMilligram(UErrorCode &status);
00928
00935 static MeasureUnit *createOunce(UErrorCode &status);
00936
00943 static MeasureUnit *createOunceTroy(UErrorCode &status);
00944
00951 static MeasureUnit *createPound(UErrorCode &status);
00952
00959 static MeasureUnit *createStone(UErrorCode &status);
00960
00967 static MeasureUnit *createTon(UErrorCode &status);
00968
00975 static MeasureUnit *createGigawatt(UErrorCode &status);
00976
00983 static MeasureUnit *createHorsepower(UErrorCode &status);
00984
00991 static MeasureUnit *createKilowatt(UErrorCode &status);
00992
00999 static MeasureUnit *createMegawatt(UErrorCode &status);
01000
01007 static MeasureUnit *createMilliwatt(UErrorCode &status);
01008
01015 static MeasureUnit *createWatt(UErrorCode &status);
01016
01017 #ifndef U_HIDE_DRAFT_API
01018
01024 static MeasureUnit *createAtmosphere(UErrorCode &status);
01025 #endif
01026
01033 static MeasureUnit *createHectopascal(UErrorCode &status);
01034
01041 static MeasureUnit *createInchHg(UErrorCode &status);
01042
01049 static MeasureUnit *createMillibar(UErrorCode &status);
01050
01057 static MeasureUnit *createMillimeterOfMercury(UErrorCode &status);
01058
01065 static MeasureUnit *createPoundPerSquareInch(UErrorCode &status);
01066
01073 static MeasureUnit *createKilometerPerHour(UErrorCode &status);
01074
01081 static MeasureUnit *createKnot(UErrorCode &status);
01082
01089 static MeasureUnit *createMeterPerSecond(UErrorCode &status);
01090
01097 static MeasureUnit *createMilePerHour(UErrorCode &status);
01098
01105 static MeasureUnit *createCelsius(UErrorCode &status);
01106
01113 static MeasureUnit *createFahrenheit(UErrorCode &status);
01114
01121 static MeasureUnit *createGenericTemperature(UErrorCode &status);
01122
01129 static MeasureUnit *createKelvin(UErrorCode &status);
01130
01137 static MeasureUnit *createAcreFoot(UErrorCode &status);
01138
01145 static MeasureUnit *createBushel(UErrorCode &status);
01146
01153 static MeasureUnit *createCentiliter(UErrorCode &status);
01154
01161 static MeasureUnit *createCubicCentimeter(UErrorCode &status);
01162
01169 static MeasureUnit *createCubicFoot(UErrorCode &status);
01170
01177 static MeasureUnit *createCubicInch(UErrorCode &status);
01178
01185 static MeasureUnit *createCubicKilometer(UErrorCode &status);
01186
01193 static MeasureUnit *createCubicMeter(UErrorCode &status);
01194
01201 static MeasureUnit *createCubicMile(UErrorCode &status);
01202
01209 static MeasureUnit *createCubicYard(UErrorCode &status);
01210
01217 static MeasureUnit *createCup(UErrorCode &status);
01218
01225 static MeasureUnit *createCupMetric(UErrorCode &status);
01226
01233 static MeasureUnit *createDeciliter(UErrorCode &status);
01234
01241 static MeasureUnit *createFluidOunce(UErrorCode &status);
01242
01249 static MeasureUnit *createGallon(UErrorCode &status);
01250
01257 static MeasureUnit *createGallonImperial(UErrorCode &status);
01258
01265 static MeasureUnit *createHectoliter(UErrorCode &status);
01266
01273 static MeasureUnit *createLiter(UErrorCode &status);
01274
01281 static MeasureUnit *createMegaliter(UErrorCode &status);
01282
01289 static MeasureUnit *createMilliliter(UErrorCode &status);
01290
01297 static MeasureUnit *createPint(UErrorCode &status);
01298
01305 static MeasureUnit *createPintMetric(UErrorCode &status);
01306
01313 static MeasureUnit *createQuart(UErrorCode &status);
01314
01321 static MeasureUnit *createTablespoon(UErrorCode &status);
01322
01329 static MeasureUnit *createTeaspoon(UErrorCode &status);
01330
01331
01332
01333
01334 protected:
01335
01336 #ifndef U_HIDE_INTERNAL_API
01337
01341 void initTime(const char *timeId);
01342
01347 void initCurrency(const char *isoCurrency);
01348
01353 void initNoUnit(const char *subtype);
01354
01355 #endif
01356
01357 private:
01358 int32_t fTypeId;
01359 int32_t fSubTypeId;
01360 char fCurrency[4];
01361
01362 MeasureUnit(int32_t typeId, int32_t subTypeId) : fTypeId(typeId), fSubTypeId(subTypeId) {
01363 fCurrency[0] = 0;
01364 }
01365 void setTo(int32_t typeId, int32_t subTypeId);
01366 int32_t getOffset() const;
01367 static MeasureUnit *create(int typeId, int subTypeId, UErrorCode &status);
01368 };
01369
01370 U_NAMESPACE_END
01371
01372 #endif // !UNCONFIG_NO_FORMATTING
01373 #endif // __MEASUREUNIT_H__