]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-4_4_2-src/tools/misc/src/com/ibm/icu/dev/tool/timescale/GenerateCTimeScaleData.java
go
[Dictionary.git] / jars / icu4j-4_4_2-src / tools / misc / src / com / ibm / icu / dev / tool / timescale / GenerateCTimeScaleData.java
1 /*\r
2  *******************************************************************************\r
3  * Copyright (C) 1996-2008, International Business Machines Corporation and    *\r
4  * others. All Rights Reserved.                                                *\r
5  *******************************************************************************\r
6  *\r
7  */\r
8 \r
9 package com.ibm.icu.dev.tool.timescale;\r
10 \r
11 import com.ibm.icu.text.MessageFormat;\r
12 import com.ibm.icu.util.UniversalTimeScale;\r
13 \r
14 /**\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
17  * \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
22  * \r
23  * @see com.ibm.icu.util.UniversalTimeScale\r
24  */\r
25 public class GenerateCTimeScaleData\r
26 {\r
27 \r
28     /**\r
29      * The default constructor.\r
30      */\r
31     public GenerateCTimeScaleData()\r
32     {\r
33     }\r
34 \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
42 \r
43     /*\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
47      */\r
48     private static String minMaxFilter(long value)\r
49     {\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
54         }\r
55         \r
56         return "INT64_C(" + Long.toString(value) + ")";\r
57     }\r
58     \r
59     /**\r
60      * This method prints the C initializers for the time scale data.\r
61      * \r
62      * @param args - the command line arguments\r
63      * \r
64      * @see com.ibm.icu.util.UniversalTimeScale\r
65      */\r
66     public static void main(String[] args)\r
67     {\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
70         \r
71         System.out.println("\nC data:");\r
72         \r
73         for (int scale = 0; scale < UniversalTimeScale.MAX_SCALE; scale += 1) {\r
74             long units = UniversalTimeScale.getTimeScaleValue(scale, UniversalTimeScale.UNITS_VALUE);\r
75             \r
76             if (units == ticks) {\r
77                 cargs[0] = "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
87                 cargs[0] = "hours";\r
88             } else if (units == days) {\r
89                 cargs[0] = "days";\r
90             } else {\r
91                 cargs[0] = "INT64_C(" + Long.toString(units) + ")";\r
92             }\r
93             \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
104             \r
105             System.out.println(fmt.format(cargs));\r
106         }\r
107     }\r
108 }\r