diff --git a/CMakeLists.txt b/CMakeLists.txt index 27f5ee0..c99063c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -82,6 +82,9 @@ set(HEADERS include/amuse/DSPCodec.hpp include/amuse/N64MusyXCodec.hpp include/amuse/VolumeTable.hpp) +if(NX) + list(APPEND HEADERS include/switch_math.hpp) +endif() unset(EXTRAS) if(TARGET boo) diff --git a/include/amuse/Common.hpp b/include/amuse/Common.hpp index 4d6f621..2e02e69 100644 --- a/include/amuse/Common.hpp +++ b/include/amuse/Common.hpp @@ -25,6 +25,12 @@ #include #endif +#if __SWITCH__ +#undef _S + +#include "switch_math.hpp" +#endif + #undef min #undef max diff --git a/include/amuse/DSPCodec.hpp b/include/amuse/DSPCodec.hpp index 157a838..9705093 100644 --- a/include/amuse/DSPCodec.hpp +++ b/include/amuse/DSPCodec.hpp @@ -2,6 +2,7 @@ #define _DSPCODEC_h #include +#include static inline int16_t DSPSampClamp(int32_t val) { diff --git a/include/switch_math.hpp b/include/switch_math.hpp new file mode 100644 index 0000000..efbca3a --- /dev/null +++ b/include/switch_math.hpp @@ -0,0 +1,22 @@ +#ifndef SWITCH_MATH_HPP +#define SWITCH_MATH_HPP + +/* Properly forward math defines to std:: */ +#ifdef __SWITCH__ + +#include +#include + +#undef exp2 +#undef log2 +#undef fabs + +namespace std +{ + using ::exp2; + using ::log2; + using ::fabs; +} +#endif + +#endif //TEST_SWITCH_MATH_HPP diff --git a/lib/AudioGroupSampleDirectory.cpp b/lib/AudioGroupSampleDirectory.cpp index 22564e0..3019cdd 100644 --- a/lib/AudioGroupSampleDirectory.cpp +++ b/lib/AudioGroupSampleDirectory.cpp @@ -612,6 +612,8 @@ static void SetAudioFileTime(const SystemString& path, const Sstat& stat) #else #if __APPLE__ struct timespec times[] = { stat.st_atimespec, stat.st_mtimespec }; +#elif __SWITCH__ + struct timespec times[] = { stat.st_atime, stat.st_mtime }; #else struct timespec times[] = { stat.st_atim, stat.st_mtim }; #endif diff --git a/lib/Common.cpp b/lib/Common.cpp index 869f6bc..822ff2b 100644 --- a/lib/Common.cpp +++ b/lib/Common.cpp @@ -32,6 +32,8 @@ bool Copy(const SystemChar* from, const SystemChar* to) return true; #if __APPLE__ struct timespec times[] = { theStat.st_atimespec, theStat.st_mtimespec }; +#elif __SWITCH__ + struct timespec times[] = { theStat.st_atime, theStat.st_mtime }; #else struct timespec times[] = { theStat.st_atim, theStat.st_mtim }; #endif diff --git a/lib/ContainerRegistry.cpp b/lib/ContainerRegistry.cpp index 33b6ce0..4f6f654 100644 --- a/lib/ContainerRegistry.cpp +++ b/lib/ContainerRegistry.cpp @@ -9,6 +9,64 @@ #include #include +#if __SWITCH__ +/*- + * Copyright (c) 2005 Pascal Gloor + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. + */ +static void * +memmem(const void *l, size_t l_len, const void *s, size_t s_len) +{ + char *cur, *last; + const char *cl = (const char *)l; + const char *cs = (const char *)s; + + /* we need something to compare */ + if (l_len == 0 || s_len == 0) + return NULL; + + /* "s" must be smaller or equal to "l" */ + if (l_len < s_len) + return NULL; + + /* special case where s_len == 1 */ + if (s_len == 1) + return memchr(l, (int)*cs, l_len); + + /* the last position where its possible to find "s" in "l" */ + last = (char *)cl + l_len - s_len; + + for (cur = (char *)cl; cur <= last; cur++) + if (cur[0] == cs[0] && memcmp(cur, cs, s_len) == 0) + return cur; + + return NULL; +} +#endif + #if _WIN32 #define WIN32_LEAN_AND_MEAN #include diff --git a/lib/DSPCodec.cpp b/lib/DSPCodec.cpp index 9ada90f..9967da4 100644 --- a/lib/DSPCodec.cpp +++ b/lib/DSPCodec.cpp @@ -1,5 +1,10 @@ #include "amuse/DSPCodec.hpp" #include +#include + +#if __SWITCH__ +#include "switch_math.hpp" +#endif #undef min #undef max