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