1b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson/* 2b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * Copyright (C) 2011 The Android Open Source Project 3b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * 4b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * Licensed under the Apache License, Version 2.0 (the "License"); 5b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * you may not use this file except in compliance with the License. 6b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * You may obtain a copy of the License at 7b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * 8b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * http://www.apache.org/licenses/LICENSE-2.0 9b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * 10b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * Unless required by applicable law or agreed to in writing, software 11b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * distributed under the License is distributed on an "AS IS" BASIS, 12b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * See the License for the specific language governing permissions and 14b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * limitations under the License. 15b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson */ 16b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 17b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson#ifndef FRAMEWORKS_EX_VARIABLESPEED_JNI_MACROS_H_ 18b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson#define FRAMEWORKS_EX_VARIABLESPEED_JNI_MACROS_H_ 19b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 20b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson#include <hlogging.h> 21b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 22b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudsoninline float min(float a, float b) { 23b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson return (a < b) ? a : b; 24b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson} 25b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 26b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudsoninline float max(float a, float b) { 27b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson return (a > b) ? a : b; 28b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson} 29b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 30b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudsontemplate <class ForwardIterator> 31b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson ForwardIterator min_element(ForwardIterator first, ForwardIterator last) { 32b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson ForwardIterator lowest = first; 33b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson if (first == last) return last; 34b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson while (++first != last) 35b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson if (*first < *lowest) 36b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson lowest = first; 37b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson return lowest; 38b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson} 39b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 40b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson// A macro to disallow the copy constructor and operator= functions 41b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson// This should be used in the private: declarations for a class 42b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson#define DISALLOW_COPY_AND_ASSIGN(TypeName) \ 43b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson TypeName(const TypeName&); \ 44b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson void operator=(const TypeName&) 45b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 46b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson#define CHECK(x) { \ 47b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson if (!(x)) { \ 48b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson LOGE("assertion failed: " #x); \ 49b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson LOGE("file: %s line: %d", __FILE__, __LINE__); \ 50b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson int* frob = NULL; \ 51b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson *frob = 5; \ 52b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson } \ 53b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson} 54b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 55b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudsontemplate <class Dest, class Source> 56b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudsoninline Dest bit_cast(const Source& source) { 57b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson // Compile time assertion: sizeof(Dest) == sizeof(Source) 58b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson // A compile error here means your Dest and Source have different sizes. 59b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson typedef char VerifySizesAreEqual [sizeof(Dest) == sizeof(Source) ? 1 : -1]; // NOLINT 60b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 61b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson Dest dest; 62b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson memcpy(&dest, &source, sizeof(dest)); 63b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson return dest; 64b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson} 65b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 66b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson#endif // FRAMEWORKS_EX_VARIABLESPEED_JNI_MACROS_H_ 67