diff options
author | Matteo F. Vescovi <mfv.debian@gmail.com> | 2013-08-20 09:53:19 +0100 |
---|---|---|
committer | Matteo F. Vescovi <mfv.debian@gmail.com> | 2013-08-20 09:53:19 +0100 |
commit | 66e5d9e2915733247bca47d077414ec2594aedad (patch) | |
tree | f4070a31bf015e159dadd34378cda703d8f6edea /src/core/Platform.h |
opencolorio (1.0.8~dfsg0-2) unstable; urgency=low
* debian/rules: get-orig-source stuff added
* debian/rules: useless dh addon removed
* debian/rules: License.txt duplicate removed
* debian/rules: SSE optimization disabled (Closes: #719174)
* debian/libopencolorio1.symbols: file removed (Closes: #719175)
# imported from the archive
Diffstat (limited to 'src/core/Platform.h')
-rw-r--r-- | src/core/Platform.h | 202 |
1 files changed, 202 insertions, 0 deletions
diff --git a/src/core/Platform.h b/src/core/Platform.h new file mode 100644 index 0000000..56d0971 --- /dev/null +++ b/src/core/Platform.h @@ -0,0 +1,202 @@ +/* +Copyright (c) 2003-2010 Sony Pictures Imageworks Inc., et al. +All Rights Reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +* Neither the name of Sony Pictures Imageworks nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +#ifndef INCLUDED_OCIO_PLATFORM_H +#define INCLUDED_OCIO_PLATFORM_H + +/* +PTEX SOFTWARE +Copyright 2009 Disney Enterprises, Inc. All rights reserved + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * The names "Disney", "Walt Disney Pictures", "Walt Disney Animation + Studios" or the names of its contributors may NOT be used to + endorse or promote products derived from this software without + specific prior written permission from Walt Disney Pictures. + +Disclaimer: THIS SOFTWARE IS PROVIDED BY WALT DISNEY PICTURES AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND TITLE ARE DISCLAIMED. +IN NO EVENT SHALL WALT DISNEY PICTURES, THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND BASED ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +*/ + +// platform-specific includes +#if defined(_WIN32) || defined(_WIN64) || defined(_WINDOWS) || defined(_MSC_VER) +#ifndef WINDOWS +#define WINDOWS +#endif +#define _CRT_NONSTDC_NO_DEPRECATE 1 +#define _CRT_SECURE_NO_DEPRECATE 1 +#define NOMINMAX 1 + +// windows - defined for both Win32 and Win64 +#include <Windows.h> +#include <malloc.h> +#include <io.h> +#include <tchar.h> +#include <process.h> + +#else + +// linux/unix/posix +#include <stdlib.h> +#include <alloca.h> +#include <string.h> +#include <pthread.h> +// OS for spinlock +#ifdef __APPLE__ +#include <libkern/OSAtomic.h> +#include <sys/types.h> +#endif +#endif + +// general includes +#include <stdio.h> +#include <math.h> +#include <assert.h> + +// missing functions on Windows +#ifdef WINDOWS +#define snprintf sprintf_s +#define strtok_r strtok_s +typedef __int64 FilePos; +#define fseeko _fseeki64 +#define ftello _ftelli64 + +inline double log2(double x) { + return log(x) * 1.4426950408889634; +} + +#else +typedef off_t FilePos; +#endif + + +OCIO_NAMESPACE_ENTER +{ + +// TODO: Add proper endian detection using architecture / compiler mojo +// In the meantime, hardcode to x86 +#define OCIO_LITTLE_ENDIAN 1 // This is correct on x86 + + /* + * Mutex/SpinLock classes + */ + +#ifdef WINDOWS + + class _Mutex { + public: + _Mutex() { _mutex = CreateMutex(NULL, FALSE, NULL); } + ~_Mutex() { CloseHandle(_mutex); } + void lock() { WaitForSingleObject(_mutex, INFINITE); } + void unlock() { ReleaseMutex(_mutex); } + private: + HANDLE _mutex; + }; + + class _SpinLock { + public: + _SpinLock() { InitializeCriticalSection(&_spinlock); } + ~_SpinLock() { DeleteCriticalSection(&_spinlock); } + void lock() { EnterCriticalSection(&_spinlock); } + void unlock() { LeaveCriticalSection(&_spinlock); } + private: + CRITICAL_SECTION _spinlock; + }; + +#else + // assume linux/unix/posix + + class _Mutex { + public: + _Mutex() { pthread_mutex_init(&_mutex, 0); } + ~_Mutex() { pthread_mutex_destroy(&_mutex); } + void lock() { pthread_mutex_lock(&_mutex); } + void unlock() { pthread_mutex_unlock(&_mutex); } + private: + pthread_mutex_t _mutex; + }; + +#if __APPLE__ + class _SpinLock { + public: + _SpinLock() { _spinlock = 0; } + ~_SpinLock() { } + void lock() { OSSpinLockLock(&_spinlock); } + void unlock() { OSSpinLockUnlock(&_spinlock); } + private: + OSSpinLock _spinlock; + }; +#elif ANDROID + // we don't have access to pthread on andriod so we just make an empty + // class that does nothing. + class _SpinLock { + public: + _SpinLock() { } + ~_SpinLock() { } + void lock() { } + void unlock() { } + }; +#else + class _SpinLock { + public: + _SpinLock() { pthread_spin_init(&_spinlock, PTHREAD_PROCESS_PRIVATE); } + ~_SpinLock() { pthread_spin_destroy(&_spinlock); } + void lock() { pthread_spin_lock(&_spinlock); } + void unlock() { pthread_spin_unlock(&_spinlock); } + private: + pthread_spinlock_t _spinlock; + }; +#endif // __APPLE__ +#endif // WINDOWS + +} +OCIO_NAMESPACE_EXIT + +#endif // INCLUDED_OCIO_PLATFORM_H |