/* Generated automatically by jlpp - do not edit. */ #include static jakelib::lang::String* jakelib2_strings[] = {null, null, null, null, null, null, null}; // "jakelib.util.Calendar" static jchar chars_jakelib2_str_0[] = {106,97,107,101,108,105,98,46,117,116,105,108,46,67,97,108,101,110,100,97,114}; // "time=" static jchar chars_jakelib2_str_1[] = {116,105,109,101,61}; // ",areFieldsSet=" static jchar chars_jakelib2_str_2[] = {44,97,114,101,70,105,101,108,100,115,83,101,116,61}; // "FIELD_" static jchar chars_jakelib2_str_3[] = {70,73,69,76,68,95}; // ",lenient=" static jchar chars_jakelib2_str_4[] = {44,108,101,110,105,101,110,116,61}; // ",firstDayOfWeek=" static jchar chars_jakelib2_str_5[] = {44,102,105,114,115,116,68,97,121,79,102,87,101,101,107,61}; // ",minimalDaysInFirstWeek=" static jchar chars_jakelib2_str_6[] = {44,109,105,110,105,109,97,108,68,97,121,115,73,110,70,105,114,115,116,87,101,101,107,61}; #line 1 "util/Calendar.jlc" // -*- c++ -*- /* * Jakelib2 - General purpose C++ library * Copyright (C) 2001 Florian Wolff (florian@donuz.de) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * $Id: Calendar.jlc,v 1.12 2003/09/27 08:10:29 florian Exp $ */ #include "jakelib2.h" #include "jakelib2/lang/System.h" #include "jakelib2/util/Calendar.h" #include "jakelib2/util/Date.h" #include "jakelib2/util/TimeZone.h" #include "jakelib2/util/Locale.h" using namespace jakelib::lang; using namespace jakelib::util; JAKELIB_IMPLEMENT_CLASS("jakelib.util.Calendar", Calendar, Object); const jint Calendar::FIELD_COUNT = 17; /*****************************************************************************\ * Calendar | *****************************************************************************/ Calendar::Calendar() { init(); } Calendar::~Calendar() { GC_FREE(fields); GC_FREE(fieldSet); } /*****************************************************************************\ * init | *****************************************************************************/ void Calendar::init() { fields = (jint*) GC_MALLOC_ATOMIC(sizeof(jint) * FIELD_COUNT); fieldSet = (jboolean*) GC_MALLOC_ATOMIC(sizeof(jboolean) * FIELD_COUNT); clear(); lenient = true; } /*****************************************************************************\ * getTime | *****************************************************************************/ Date* Calendar::getTime() { if (!isTimeSet) computeTime(); return new Date(time); } /*****************************************************************************\ * setTime | *****************************************************************************/ void Calendar::setTime(Date* date) { setTimeInMillis(date->getTime()); } /*****************************************************************************\ * getTimeInMillis | *****************************************************************************/ jlong Calendar::getTimeInMillis() { if (!isTimeSet) computeTime(); return time; } /*****************************************************************************\ * setTimeInMillis | *****************************************************************************/ void Calendar::setTimeInMillis(jlong time) { this->time = time; isTimeSet = true; areFieldsSet = false; } /*****************************************************************************\ * get | *****************************************************************************/ jint Calendar::get(Field field) { if (!fieldSet[field]) areFieldsSet = false; complete(); return fields[field]; } /*****************************************************************************\ * internalGet | *****************************************************************************/ jint Calendar::internalGet(Field field) { return fields[field]; } /*****************************************************************************\ * set | *****************************************************************************/ void Calendar::set(Field field, jint value) { isTimeSet = false; fields[field] = value; fieldSet[field] = true; if (field == HOUR_OF_DAY) { fields[HOUR] = value % 12; fieldSet[HOUR] = true; if (value >= 12) { fields[AM_PM] = PM; } else { fields[AM_PM] = AM; } fieldSet[AM_PM] = true; } } /*****************************************************************************\ * set | *****************************************************************************/ void Calendar::set(jint year, jint month, jint date) { set(YEAR, year); set(MONTH, month); set(DATE, date); } /*****************************************************************************\ * set | *****************************************************************************/ void Calendar::set(jint year, jint month, jint date, jint hour, jint minute) { set(year, month, date); set(HOUR_OF_DAY, hour); set(MINUTE, minute); } /*****************************************************************************\ * set | *****************************************************************************/ void Calendar::set(jint year, jint month, jint date, jint hour, jint minute, jint second) { set(year, month, date, hour, minute); set(SECOND, second); } /*****************************************************************************\ * clear | *****************************************************************************/ void Calendar::clear() { isTimeSet = false; areFieldsSet = false; for (int idx = 0; idx < FIELD_COUNT; idx++) { fieldSet[idx] = false; fields[idx] = 0; } } /*****************************************************************************\ * clear | *****************************************************************************/ void Calendar::clear(Field field) { isTimeSet = false; areFieldsSet = false; fieldSet[field] = false; fields[field] = 0; } /*****************************************************************************\ * isSet | *****************************************************************************/ jboolean Calendar::isFieldSet(Field field) { return fieldSet[field]; } /*****************************************************************************\ * complete | *****************************************************************************/ void Calendar::complete() { if (!isTimeSet) computeTime(); if (!areFieldsSet) computeFields(); } /*****************************************************************************\ * equals | *****************************************************************************/ jboolean Calendar::equals(Object* o) { return (o->instanceOf(JAKELIB_ONDEMAND(jakelib2_strings[0], new jakelib::lang::String(chars_jakelib2_str_0, 0, 21))) && getTimeInMillis() == ((Calendar*) o)->getTimeInMillis()); } /*****************************************************************************\ * hashCode | *****************************************************************************/ jint Calendar::hashCode() { jlong time = getTimeInMillis(); return (jint) ((time & 0xffffffffL) ^ (time >> 32)); } /*****************************************************************************\ * before | *****************************************************************************/ jboolean Calendar::before(Object* o) { return getTimeInMillis() < ((Calendar*) o)->getTimeInMillis(); } /*****************************************************************************\ * after | *****************************************************************************/ jboolean Calendar::after(Object* o) { return getTimeInMillis() > ((Calendar*) o)->getTimeInMillis(); } /*****************************************************************************\ * roll | *****************************************************************************/ void Calendar::roll(Field field, jint amount) { while (amount > 0) { roll(field, true); amount--; } while (amount < 0) { roll(field, false); amount++; } } /*****************************************************************************\ * setTimeZone | *****************************************************************************/ // void Calendar::setTimeZone(TimeZone* zone) // { // this->zone = zone; // } /*****************************************************************************\ * getTimeZone | *****************************************************************************/ // TimeZone* Calendar::getTimeZone() // { // return zone; // } /*****************************************************************************\ * setLenient | *****************************************************************************/ void Calendar::setLenient(jboolean lenient) { this->lenient = lenient; } /*****************************************************************************\ * isLenient | *****************************************************************************/ jboolean Calendar::isLenient() { return lenient; } /*****************************************************************************\ * setFirstDayOfWeek | *****************************************************************************/ void Calendar::setFirstDayOfWeek(jint value) { firstDayOfWeek = value; } /*****************************************************************************\ * getFirstDayOfWeek | *****************************************************************************/ jint Calendar::getFirstDayOfWeek() { return firstDayOfWeek; } /*****************************************************************************\ * getFirstDayOfWeek | *****************************************************************************/ void Calendar::setMinimalDaysInFirstWeek(jint value) { minimalDaysInFirstWeek = value; } /*****************************************************************************\ * getFirstDayOfWeek | *****************************************************************************/ jint Calendar::getMinimalDaysInFirstWeek() { return minimalDaysInFirstWeek; } /*****************************************************************************\ * clone | *****************************************************************************/ // Object* Calendar::clone() // { // try { // Calendar* cal = (Calendar*) clone(); // cal->fields = (jints*) fields->clone(); // cal->fieldSet = (jbooleans*)fieldSet->clone(); // return cal; // } // catch (CloneNotSupportedException *ex) { // System::out->println(ex); // return null; // } // } /*****************************************************************************\ * toString | *****************************************************************************/ String* Calendar::toString() { StringBuffer* sb = new StringBuffer(); complete(); sb->append(getClass()->getName())->append('['); sb->append(JAKELIB_ONDEMAND(jakelib2_strings[1], new jakelib::lang::String(chars_jakelib2_str_1, 0, 5))); if (isTimeSet) sb->append(time); else sb->append('?'); //sb->append(`",zone="` .. zone); sb->append(JAKELIB_ONDEMAND(jakelib2_strings[2], new jakelib::lang::String(chars_jakelib2_str_2, 0, 14)) ->plus( areFieldsSet)); for (int idx = 0; idx < FIELD_COUNT; idx++) { if (idx > 0) { sb->append(','); } sb->append(JAKELIB_ONDEMAND(jakelib2_strings[3], new jakelib::lang::String(chars_jakelib2_str_3, 0, 6)))->append(idx)->append('='); if (fieldSet[idx]) sb->append(fields[idx]); else sb->append('?'); } sb->append(JAKELIB_ONDEMAND(jakelib2_strings[4], new jakelib::lang::String(chars_jakelib2_str_4, 0, 9)) ->plus( lenient)); sb->append(JAKELIB_ONDEMAND(jakelib2_strings[5], new jakelib::lang::String(chars_jakelib2_str_5, 0, 16)) ->plus( firstDayOfWeek)); sb->append(JAKELIB_ONDEMAND(jakelib2_strings[6], new jakelib::lang::String(chars_jakelib2_str_6, 0, 24)) ->plus( minimalDaysInFirstWeek)); sb->append(']'); return sb->toString(); }