00001
00007 #include <yaz/z-date.h>
00008
00009 int z_DateTime (ODR o, Z_DateTime **p, int opt, const char *name)
00010 {
00011 if (!odr_sequence_begin (o, p, sizeof(**p), name))
00012 return odr_missing(o, opt, name) && odr_ok (o);
00013 return
00014 odr_explicit_tag (o, z_Date,
00015 &(*p)->date, ODR_CONTEXT, 1, 1, "date") &&
00016 odr_explicit_tag (o, z_Time,
00017 &(*p)->time, ODR_CONTEXT, 2, 1, "time") &&
00018 odr_sequence_end (o);
00019 }
00020
00021 int z_DateMonthAndDay (ODR o, Z_DateMonthAndDay **p, int opt, const char *name)
00022 {
00023 if (!odr_sequence_begin (o, p, sizeof(**p), name))
00024 return odr_missing(o, opt, name) && odr_ok (o);
00025 return
00026 odr_implicit_tag (o, odr_integer,
00027 &(*p)->month, ODR_CONTEXT, 2, 0, "month") &&
00028 odr_implicit_tag (o, odr_integer,
00029 &(*p)->day, ODR_CONTEXT, 3, 1, "day") &&
00030 odr_sequence_end (o);
00031 }
00032
00033 int z_DateQuarter (ODR o, Z_DateQuarter **p, int opt, const char *name)
00034 {
00035 static Odr_arm arm[] = {
00036 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_DateQuarter_first,
00037 (Odr_fun) odr_null, "first"},
00038 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_DateQuarter_second,
00039 (Odr_fun) odr_null, "second"},
00040 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_DateQuarter_third,
00041 (Odr_fun) odr_null, "third"},
00042 {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_DateQuarter_fourth,
00043 (Odr_fun) odr_null, "fourth"},
00044 {-1, -1, -1, -1, (Odr_fun) 0, 0}
00045 };
00046 if (!odr_initmember(o, p, sizeof(**p)))
00047 return odr_missing(o, opt, name);
00048 if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name))
00049 return 1;
00050 if(o->direction == ODR_DECODE)
00051 *p = 0;
00052 return odr_missing(o, opt, name);
00053 }
00054
00055 int z_DateSeason (ODR o, Z_DateSeason **p, int opt, const char *name)
00056 {
00057 static Odr_arm arm[] = {
00058 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_DateSeason_winter,
00059 (Odr_fun) odr_null, "winter"},
00060 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_DateSeason_spring,
00061 (Odr_fun) odr_null, "spring"},
00062 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_DateSeason_summer,
00063 (Odr_fun) odr_null, "summer"},
00064 {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_DateSeason_autumn,
00065 (Odr_fun) odr_null, "autumn"},
00066 {-1, -1, -1, -1, (Odr_fun) 0, 0}
00067 };
00068 if (!odr_initmember(o, p, sizeof(**p)))
00069 return odr_missing(o, opt, name);
00070 if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name))
00071 return 1;
00072 if(o->direction == ODR_DECODE)
00073 *p = 0;
00074 return odr_missing(o, opt, name);
00075 }
00076
00077 int z_Era (ODR o, Z_Era **p, int opt, const char *name)
00078 {
00079 static Odr_arm arm[] = {
00080 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Era_decade,
00081 (Odr_fun) odr_null, "decade"},
00082 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Era_century,
00083 (Odr_fun) odr_null, "century"},
00084 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Era_millennium,
00085 (Odr_fun) odr_null, "millennium"},
00086 {-1, -1, -1, -1, (Odr_fun) 0, 0}
00087 };
00088 if (!odr_initmember(o, p, sizeof(**p)))
00089 return odr_missing(o, opt, name);
00090 if (odr_choice(o, arm, &(*p)->u, &(*p)->which, name))
00091 return 1;
00092 if(o->direction == ODR_DECODE)
00093 *p = 0;
00094 return odr_missing(o, opt, name);
00095 }
00096
00097 int z_DateFlags (ODR o, Z_DateFlags **p, int opt, const char *name)
00098 {
00099 if (!odr_sequence_begin (o, p, sizeof(**p), name))
00100 return odr_missing(o, opt, name) && odr_ok (o);
00101 return
00102 odr_implicit_tag (o, odr_null,
00103 &(*p)->circa, ODR_CONTEXT, 1, 1, "circa") &&
00104 odr_explicit_tag (o, z_Era,
00105 &(*p)->era, ODR_CONTEXT, 2, 1, "era") &&
00106 odr_sequence_end (o);
00107 }
00108
00109 int z_Date (ODR o, Z_Date **p, int opt, const char *name)
00110 {
00111 static Odr_arm arm[] = {
00112 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Date_monthAndDay,
00113 (Odr_fun) z_DateMonthAndDay, "monthAndDay"},
00114 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Date_julianDay,
00115 (Odr_fun) odr_integer, "julianDay"},
00116 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Date_weekNumber,
00117 (Odr_fun) odr_integer, "weekNumber"},
00118 {ODR_EXPLICIT, ODR_CONTEXT, 4, Z_Date_quarter,
00119 (Odr_fun) z_DateQuarter, "quarter"},
00120 {ODR_EXPLICIT, ODR_CONTEXT, 5, Z_Date_season,
00121 (Odr_fun) z_DateSeason, "season"},
00122 {-1, -1, -1, -1, (Odr_fun) 0, 0}
00123 };
00124 if (!odr_sequence_begin (o, p, sizeof(**p), name))
00125 return odr_missing(o, opt, name) && odr_ok (o);
00126 return
00127 odr_implicit_tag (o, odr_integer,
00128 &(*p)->year, ODR_CONTEXT, 1, 0, "year") &&
00129 ((odr_constructed_begin (o, &(*p)->u, ODR_CONTEXT, 2, "partOfYear") &&
00130 odr_choice (o, arm, &(*p)->u, &(*p)->which, 0) &&
00131 odr_constructed_end (o)) || odr_ok(o)) &&
00132 odr_implicit_tag (o, z_DateFlags,
00133 &(*p)->flags, ODR_CONTEXT, 3, 1, "flags") &&
00134 odr_sequence_end (o);
00135 }
00136
00137 int z_Time (ODR o, Z_Time **p, int opt, const char *name)
00138 {
00139 static Odr_arm arm[] = {
00140 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Time_local,
00141 (Odr_fun) odr_null, "local"},
00142 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Time_utc,
00143 (Odr_fun) odr_null, "utc"},
00144 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Time_utcOffset,
00145 (Odr_fun) odr_integer, "utcOffset"},
00146 {-1, -1, -1, -1, (Odr_fun) 0, 0}
00147 };
00148 if (!odr_sequence_begin (o, p, sizeof(**p), name))
00149 return odr_missing(o, opt, name) && odr_ok (o);
00150 return
00151 odr_implicit_tag (o, odr_integer,
00152 &(*p)->hour, ODR_CONTEXT, 1, 0, "hour") &&
00153 odr_implicit_tag (o, odr_integer,
00154 &(*p)->minute, ODR_CONTEXT, 2, 1, "minute") &&
00155 odr_implicit_tag (o, odr_integer,
00156 &(*p)->second, ODR_CONTEXT, 3, 1, "second") &&
00157 odr_implicit_tag (o, z_IntUnit,
00158 &(*p)->partOfSecond, ODR_CONTEXT, 4, 1, "partOfSecond") &&
00159 odr_constructed_begin (o, &(*p)->u, ODR_CONTEXT, 5, "zone") &&
00160 odr_choice (o, arm, &(*p)->u, &(*p)->which, 0) &&
00161 odr_constructed_end (o) &&
00162 odr_sequence_end (o);
00163 }