/*------------------------------------------------------------------------------ | |
* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team | |
* | |
* Distributable under the terms of either the Apache License (Version 2.0) or | |
* the GNU Lesser General Public License, as specified in the COPYING file. | |
------------------------------------------------------------------------------*/ | |
#include "CLucene/StdHeader.h" | |
#include "DateField.h" | |
#include "CLucene/util/Misc.h" | |
CL_NS_USE(util) | |
CL_NS_DEF(document) | |
DateField::~DateField(){ | |
} | |
TCHAR* DateField::timeToString(const int64_t time) { | |
TCHAR* buf = _CL_NEWARRAY(TCHAR,DATEFIELD_DATE_LEN + 1); | |
timeToString(time,buf); | |
return buf; | |
} | |
void DateField::timeToString(const int64_t time, TCHAR* buf) { | |
CND_PRECONDITION (buf, "buf == NULL"); | |
*buf = '\0'; | |
if (time < 0) | |
_CLTHROWA (CL_ERR_IllegalArgument,"time too early"); //todo: make richer error | |
if (time > DATEFIELD_DATE_MAX) | |
_CLTHROWA (CL_ERR_IllegalArgument, "time too late (past DATEFIELD_DATE_MAX"); //todo: make richer error | |
_i64tot(time, buf, 36); | |
int32_t bufLen = _tcslen(buf); | |
CND_PRECONDITION (bufLen <= DATEFIELD_DATE_LEN, "timeToString length is greater than 9"); | |
/* Supply leading zeroes if necessary. */ | |
if (bufLen < DATEFIELD_DATE_LEN) { | |
const int32_t nMissingZeroes = DATEFIELD_DATE_LEN - bufLen; | |
/* Move buffer contents forward to make room for leading zeroes. */ | |
for (int32_t i = DATEFIELD_DATE_LEN - 1; i >= nMissingZeroes; i--) | |
buf[i] = buf[i - nMissingZeroes]; | |
/* Insert leading zeroes. */ | |
{// MSVC6 scoping fix | |
for (int32_t i = 0; i < nMissingZeroes; i++) | |
buf[i] = '0'; | |
} | |
buf[DATEFIELD_DATE_LEN] = 0; | |
} | |
CND_PRECONDITION (_tcslen(buf) == DATEFIELD_DATE_LEN, "timeToString return is not equal to DATEFIELD_DATE_LEN"); | |
} | |
int64_t DateField::stringToTime(const TCHAR* time) { | |
TCHAR* end; | |
return _tcstoi64(time, &end, 36); | |
} | |
CL_NS_END |