Home | History | Annotate | Download | only in runtime
      1 /*
      2  *  Copyright (C) 1999-2000 Harri Porten (porten (at) kde.org)
      3  *  Copyright (C) 2008 Apple Inc. All rights reserved.
      4  *
      5  *  This library is free software; you can redistribute it and/or
      6  *  modify it under the terms of the GNU Lesser General Public
      7  *  License as published by the Free Software Foundation; either
      8  *  version 2 of the License, or (at your option) any later version.
      9  *
     10  *  This library is distributed in the hope that it will be useful,
     11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
     12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     13  *  Lesser General Public License for more details.
     14  *
     15  *  You should have received a copy of the GNU Lesser General Public
     16  *  License along with this library; if not, write to the Free Software
     17  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
     18  *
     19  */
     20 
     21 #ifndef DateInstance_h
     22 #define DateInstance_h
     23 
     24 #include "JSWrapperObject.h"
     25 
     26 namespace WTF {
     27     struct GregorianDateTime;
     28 }
     29 
     30 namespace JSC {
     31 
     32     class DateInstance : public JSWrapperObject {
     33     public:
     34         DateInstance(ExecState*, Structure*, double);
     35         explicit DateInstance(ExecState*, Structure*);
     36 
     37         double internalNumber() const { return internalValue().uncheckedGetNumber(); }
     38 
     39         static JS_EXPORTDATA const ClassInfo s_info;
     40 
     41         const GregorianDateTime* gregorianDateTime(ExecState* exec) const
     42         {
     43             if (m_data && m_data->m_gregorianDateTimeCachedForMS == internalNumber())
     44                 return &m_data->m_cachedGregorianDateTime;
     45             return calculateGregorianDateTime(exec);
     46         }
     47 
     48         const GregorianDateTime* gregorianDateTimeUTC(ExecState* exec) const
     49         {
     50             if (m_data && m_data->m_gregorianDateTimeUTCCachedForMS == internalNumber())
     51                 return &m_data->m_cachedGregorianDateTimeUTC;
     52             return calculateGregorianDateTimeUTC(exec);
     53         }
     54 
     55         static Structure* createStructure(JSGlobalData& globalData, JSValue prototype)
     56         {
     57             return Structure::create(globalData, prototype, TypeInfo(ObjectType, StructureFlags), AnonymousSlotCount, &s_info);
     58         }
     59 
     60     private:
     61         const GregorianDateTime* calculateGregorianDateTime(ExecState*) const;
     62         const GregorianDateTime* calculateGregorianDateTimeUTC(ExecState*) const;
     63 
     64         mutable RefPtr<DateInstanceData> m_data;
     65     };
     66 
     67     DateInstance* asDateInstance(JSValue);
     68 
     69     inline DateInstance* asDateInstance(JSValue value)
     70     {
     71         ASSERT(asObject(value)->inherits(&DateInstance::s_info));
     72         return static_cast<DateInstance*>(asObject(value));
     73     }
     74 
     75 } // namespace JSC
     76 
     77 #endif // DateInstance_h
     78