⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmldatetime.hpp

📁 经典开源游戏glest的源代码
💻 HPP
字号:
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements.  See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License.  You may obtain a copy of the License at *  *      http://www.apache.org/licenses/LICENSE-2.0 *  * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *//* * $Id: XMLDateTime.hpp 568078 2007-08-21 11:43:25Z amassari $ */#ifndef XML_DATETIME_HPP#define XML_DATETIME_HPP#include <xercesc/util/XMLNumber.hpp>#include <xercesc/util/PlatformUtils.hpp>#include <xercesc/util/XMLString.hpp>#include <xercesc/util/XMLUniDefs.hpp>#include <xercesc/util/SchemaDateTimeException.hpp>XERCES_CPP_NAMESPACE_BEGINclass XSValue;class XMLUTIL_EXPORT XMLDateTime : public XMLNumber{public:	enum valueIndex    {        CentYear   = 0,        Month      ,        Day        ,        Hour       ,        Minute     ,        Second     ,        MiliSecond ,  //not to be used directly        utc        ,        TOTAL_SIZE    };    enum utcType    {        UTC_UNKNOWN = 0,        UTC_STD        ,          // set in parse() or normalize()        UTC_POS        ,          // set in parse()        UTC_NEG                   // set in parse()    };    // -----------------------------------------------------------------------    // ctors and dtor    // -----------------------------------------------------------------------    XMLDateTime(MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager);    XMLDateTime(const XMLCh* const,                MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager);    ~XMLDateTime();    inline void           setBuffer(const XMLCh* const);    // -----------------------------------------------------------------------    // Copy ctor and Assignment operators    // -----------------------------------------------------------------------    XMLDateTime(const XMLDateTime&);    XMLDateTime&          operator=(const XMLDateTime&);    // -----------------------------------------------------------------------    // Implementation of Abstract Interface    // -----------------------------------------------------------------------    /**     *     *  Deprecated: please use getRawData     *     */    virtual XMLCh*        toString() const;        virtual XMLCh*        getRawData() const;    virtual const XMLCh*  getFormattedString() const;    virtual int           getSign() const;    // -----------------------------------------------------------------------    // Canonical Representation    // -----------------------------------------------------------------------    XMLCh*                getDateTimeCanonicalRepresentation(MemoryManager* const memMgr) const;    XMLCh*                getTimeCanonicalRepresentation(MemoryManager* const memMgr)     const;    XMLCh*                getDateCanonicalRepresentation(MemoryManager* const memMgr)     const;    // -----------------------------------------------------------------------    // parsers    // -----------------------------------------------------------------------    void                  parseDateTime();       //DateTime    void                  parseDate();           //Date    void                  parseTime();           //Time    void                  parseDay();            //gDay    void                  parseMonth();          //gMonth    void                  parseYear();           //gYear    void                  parseMonthDay();       //gMonthDay    void                  parseYearMonth();      //gYearMonth    void                  parseDuration();       //duration    // -----------------------------------------------------------------------    // Comparison    // -----------------------------------------------------------------------    static int            compare(const XMLDateTime* const                                , const XMLDateTime* const);    static int            compare(const XMLDateTime* const                                , const XMLDateTime* const                                , bool                    );    static int            compareOrder(const XMLDateTime* const                                     , const XMLDateTime* const);                                        /***     * Support for Serialization/De-serialization     ***/    DECL_XSERIALIZABLE(XMLDateTime)private:    // -----------------------------------------------------------------------    // Constant data    // -----------------------------------------------------------------------	//    enum timezoneIndex    {        hh = 0,        mm ,        TIMEZONE_ARRAYSIZE    };    // -----------------------------------------------------------------------    // Comparison    // -----------------------------------------------------------------------    static int            compareResult(int                                      , int                                      , bool);    static void           addDuration(XMLDateTime*             pDuration                                    , const XMLDateTime* const pBaseDate                                    , int                      index);    static int            compareResult(const XMLDateTime* const                                      , const XMLDateTime* const                                      , bool                                      , int);    static inline int     getRetVal(int, int);    // -----------------------------------------------------------------------    // helper    // -----------------------------------------------------------------------    inline  void          reset();    inline  void          assertBuffer()               const;    inline  void          copy(const XMLDateTime&);    // allow multiple parsing    inline  void          initParser();    inline  bool          isNormalized()               const;    // -----------------------------------------------------------------------    // scaners    // -----------------------------------------------------------------------    void                  getDate();    void                  getTime();    void                  getYearMonth();    void                  getTimeZone(const int);    void                  parseTimeZone();    // -----------------------------------------------------------------------    // locator and converter    // -----------------------------------------------------------------------    int                   findUTCSign(const int start);    int                   indexOf(const int start                                , const int end                                , const XMLCh ch)     const;    int                   parseInt(const int start                                 , const int end)     const;    int                   parseIntYear(const int end) const;    double                parseMiliSecond(const int start                                        , const int end) const;    // -----------------------------------------------------------------------    // validator and normalizer    // -----------------------------------------------------------------------    void                  validateDateTime()          const;    void                  normalize();    void                  fillString(XMLCh*& ptr, int value, int expLen) const;    int                   fillYearString(XMLCh*& ptr, int value) const;    void                  searchMiliSeconds(XMLCh*& miliStartPtr, XMLCh*& miliEndPtr) const;    // -----------------------------------------------------------------------    // Unimplemented operator ==    // -----------------------------------------------------------------------	bool operator==(const XMLDateTime& toCompare) const;    // -----------------------------------------------------------------------    //  Private data members    //    //     fValue[]    //          object representation of date time.    //    //     fTimeZone[]    //          temporary storage for normalization    //    //     fStart, fEnd    //          pointers to the portion of fBuffer being parsed    //    //     fBuffer    //          raw data to be parsed, own it.    //    // -----------------------------------------------------------------------    int          fValue[TOTAL_SIZE];    int          fTimeZone[TIMEZONE_ARRAYSIZE];    int          fStart;    int          fEnd;    int          fBufferMaxLen;    double       fMiliSecond;    bool         fHasTime;    XMLCh*       fBuffer;    MemoryManager* fMemoryManager;    friend class XSValue;};inline void XMLDateTime::setBuffer(const XMLCh* const aString){    reset();    fEnd = XMLString::stringLen(aString);    if (fEnd > 0) {            if (fEnd > fBufferMaxLen)        {            fMemoryManager->deallocate(fBuffer);            fBufferMaxLen = fEnd + 8;            fBuffer = (XMLCh*) fMemoryManager->allocate((fBufferMaxLen+1) * sizeof(XMLCh));        }        memcpy(fBuffer, aString, (fEnd+1) * sizeof(XMLCh));    }}inline void XMLDateTime::reset(){    for ( int i=0; i < TOTAL_SIZE; i++ )        fValue[i] = 0;    fMiliSecond   = 0;    fHasTime      = false;    fTimeZone[hh] = fTimeZone[mm] = 0;    fStart = fEnd = 0;    if (fBuffer)        *fBuffer = 0;}inline void XMLDateTime::copy(const XMLDateTime& rhs){    for ( int i = 0; i < TOTAL_SIZE; i++ )        fValue[i] = rhs.fValue[i];    fMiliSecond   = rhs.fMiliSecond;    fHasTime      = rhs.fHasTime;    fTimeZone[hh] = rhs.fTimeZone[hh];    fTimeZone[mm] = rhs.fTimeZone[mm];    fStart = rhs.fStart;    fEnd   = rhs.fEnd;    if (fEnd > 0)    {        if (fEnd > fBufferMaxLen)        {            fMemoryManager->deallocate(fBuffer);//delete[] fBuffer;            fBufferMaxLen = rhs.fBufferMaxLen;            fBuffer = (XMLCh*) fMemoryManager->allocate((fBufferMaxLen+1) * sizeof(XMLCh));        }        memcpy(fBuffer, rhs.fBuffer, (fEnd+1) * sizeof(XMLCh));    }}inline void XMLDateTime::assertBuffer() const{    if ( ( !fBuffer )            ||         ( fBuffer[0] == chNull ) )    {        ThrowXMLwithMemMgr(SchemaDateTimeException               , XMLExcepts::DateTime_Assert_Buffer_Fail               , fMemoryManager);    }}inline void XMLDateTime::initParser(){    assertBuffer();    fStart = 0;   // to ensure scan from the very first beginning                  // in case the pointer is updated accidentally by someone else.}inline bool XMLDateTime::isNormalized() const{    return ( fValue[utc] == UTC_STD ? true : false );}inline int XMLDateTime::getRetVal(int c1, int c2){    if ((c1 == LESS_THAN    && c2 == GREATER_THAN) ||        (c1 == GREATER_THAN && c2 == LESS_THAN)      )    {        return INDETERMINATE;    }    return ( c1 != INDETERMINATE ) ? c1 : c2;}XERCES_CPP_NAMESPACE_END#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -