2 *******************************************************************************
\r
3 * Copyright (C) 1996-2008, International Business Machines Corporation and *
\r
4 * others. All Rights Reserved. *
\r
5 *******************************************************************************
\r
9 package com.ibm.icu.dev.tool.timescale;
\r
11 import com.ibm.icu.text.MessageFormat;
\r
12 import com.ibm.icu.util.UniversalTimeScale;
\r
15 * This class prints out the initializers needed to initialize
\r
16 * the time scale data in the C version of <code>UniversalTimeScale</code>.
\r
18 * It just calls <code>getTimeScaleValue()</code> for all fields and prints
\r
19 * the initializers. Because some C compilers can't compile a literal constant for
\r
20 * the minimum and / or maximum values of an <code>int64_t</code>, this code will
\r
21 * print <code>U_INT64_MIN</code> or <code>U_INT64_MAX</code> for these values.
\r
23 * @see com.ibm.icu.util.UniversalTimeScale
\r
25 public class GenerateCTimeScaleData
\r
29 * The default constructor.
\r
31 public GenerateCTimeScaleData()
\r
35 private static final long ticks = 1;
\r
36 private static final long microseconds = ticks * 10;
\r
37 private static final long milliseconds = microseconds * 1000;
\r
38 private static final long seconds = milliseconds * 1000;
\r
39 private static final long minutes = seconds * 60;
\r
40 private static final long hours = minutes * 60;
\r
41 private static final long days = hours * 24;
\r
44 * Returns <code>String</code> that is a literal representation of the given value.
\r
45 * This will either be a call to the <code>INT64_C()</code> macro, or the constant
\r
46 * <code>U_INT64_MIN</code> or <U_INT64_MAX>.
\r
48 private static String minMaxFilter(long value)
\r
50 if (value == Long.MIN_VALUE) {
\r
51 return "U_INT64_MIN";
\r
52 } else if (value == Long.MAX_VALUE) {
\r
53 return "U_INT64_MAX";
\r
56 return "INT64_C(" + Long.toString(value) + ")";
\r
60 * This method prints the C initializers for the time scale data.
\r
62 * @param args - the command line arguments
\r
64 * @see com.ibm.icu.util.UniversalTimeScale
\r
66 public static void main(String[] args)
\r
68 MessageFormat fmt = new MessageFormat("'{'{0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9}, {10}},");
\r
69 Object cargs[] = {null, null, null, null, null, null, null, null, null, null, null};
\r
71 System.out.println("\nC data:");
\r
73 for (int scale = 0; scale < UniversalTimeScale.MAX_SCALE; scale += 1) {
\r
74 long units = UniversalTimeScale.getTimeScaleValue(scale, UniversalTimeScale.UNITS_VALUE);
\r
76 if (units == ticks) {
\r
78 } else if (units == microseconds) {
\r
79 cargs[0] = "microseconds";
\r
80 } else if (units == milliseconds) {
\r
81 cargs[0] = "milliseconds";
\r
82 } else if (units == seconds) {
\r
83 cargs[0] = "seconds";
\r
84 } else if (units == minutes) {
\r
85 cargs[0] = "minutes";
\r
86 } else if (units == hours) {
\r
88 } else if (units == days) {
\r
91 cargs[0] = "INT64_C(" + Long.toString(units) + ")";
\r
94 cargs[1] = minMaxFilter(UniversalTimeScale.getTimeScaleValue(scale, UniversalTimeScale.EPOCH_OFFSET_VALUE));
\r
95 cargs[2] = minMaxFilter(UniversalTimeScale.getTimeScaleValue(scale, UniversalTimeScale.FROM_MIN_VALUE));
\r
96 cargs[3] = minMaxFilter(UniversalTimeScale.getTimeScaleValue(scale, UniversalTimeScale.FROM_MAX_VALUE));
\r
97 cargs[4] = minMaxFilter(UniversalTimeScale.getTimeScaleValue(scale, UniversalTimeScale.TO_MIN_VALUE));
\r
98 cargs[5] = minMaxFilter(UniversalTimeScale.getTimeScaleValue(scale, UniversalTimeScale.TO_MAX_VALUE));
\r
99 cargs[6] = minMaxFilter(UniversalTimeScale.getTimeScaleValue(scale, UniversalTimeScale.EPOCH_OFFSET_PLUS_1_VALUE));
\r
100 cargs[7] = minMaxFilter(UniversalTimeScale.getTimeScaleValue(scale, UniversalTimeScale.EPOCH_OFFSET_MINUS_1_VALUE));
\r
101 cargs[8] = minMaxFilter(UniversalTimeScale.getTimeScaleValue(scale, UniversalTimeScale.UNITS_ROUND_VALUE));
\r
102 cargs[9] = minMaxFilter(UniversalTimeScale.getTimeScaleValue(scale, UniversalTimeScale.MIN_ROUND_VALUE));
\r
103 cargs[10] = minMaxFilter(UniversalTimeScale.getTimeScaleValue(scale, UniversalTimeScale.MAX_ROUND_VALUE));
\r
105 System.out.println(fmt.format(cargs));
\r