///////////////////////////////////////////////////////////////////////////////
//
//  The contents of this file are subject to the Mozilla Public License
//  Version 1.1 (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.mozilla.org/MPL/
//
//  Software distributed under the License is distributed on an "AS IS"
//  basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
//  License for the specific language governing rights and limitations
//  under the License.
//
//  The Original Code is MP4v2.
//
//  The Initial Developer of the Original Code is Kona Blend.
//  Portions created by Kona Blend are Copyright (C) 2008.
//  All Rights Reserved.
//
//  Contributors:
//      Kona Blend, kona8lend@@gmail.com
//
///////////////////////////////////////////////////////////////////////////////

#ifndef MP4V2_PLATFORM_WIN32_H
#define MP4V2_PLATFORM_WIN32_H

///////////////////////////////////////////////////////////////////////////////

// mingw needs this to enable some newer 64-bit functions
#ifdef __MINGW32__
#   undef  __MSVCRT_VERSION__
#   define __MSVCRT_VERSION__ 0x800
// JAN: see http://code.google.com/p/mp4v2/issues/detail?id=132
#   define _USE_32BIT_TIME_T
#endif

// set minimum win32 API requirement to Windows 2000 or higher
#ifndef _WIN32_WINNT
#   define _WIN32_WINNT 0x0500
#endif 
#ifndef WINVER
#   define WINVER 0x0500
#endif 

///////////////////////////////////////////////////////////////////////////////

#include "libplatform/platform_base.h"
#include <mp4v2/mp4v2.h>

///////////////////////////////////////////////////////////////////////////////

namespace mp4v2 { namespace platform {
    using namespace std;

    using ::int8_t;
    using ::int16_t;
    using ::int32_t;
    using ::int64_t;

    using ::uint8_t;
    using ::uint16_t;
    using ::uint32_t;
    using ::uint64_t;
}} // namespace mp4v2::platform

///////////////////////////////////////////////////////////////////////////////

// fprintf macros for unsigned types - mingw32 is a good source if more needed
#define PRId8   "d"
#define PRId16  "d"
#define PRId32  "d"
#define PRId64  "I64d"

#define PRIu8   "u"
#define PRIu16  "u"
#define PRIu32  "u"
#define PRIu64  "I64u"

#define PRIx8   "x"
#define PRIx16  "x"
#define PRIx32  "x"
#define PRIx64  "I64x"

///////////////////////////////////////////////////////////////////////////////

// If using Visual Studio 2010 or newer these aren't needed since stdint.h is available.
#if !(defined(_MSC_VER) && _MSC_VER >= 1600)
// some macros for constant expressions
#define INT8_C(x)    x
#define INT16_C(x)   x
#define INT32_C(x)   x ## L
#define INT64_C(x)   x ## LL

#define UINT8_C(x)   x
#define UINT16_C(x)  x
#define UINT32_C(x)  x ## UL
#define UINT64_C(x)  x ## ULL
#endif

///////////////////////////////////////////////////////////////////////////////

#ifdef min
#   undef min
#endif

#ifdef max
#   undef max
#endif

///////////////////////////////////////////////////////////////////////////////

#define snprintf(s,n,...)  _snprintf(s,n,__VA_ARGS__)
#define strcasecmp(s1,s2)  _stricmp(s1,s2)
#define strdup(s)          _strdup(s)

///////////////////////////////////////////////////////////////////////////////

// macro clashes with symbol
#undef LC_NONE

#endif // MP4V2_PLATFORM_WIN32_H
