1/* 2 * Copyright 2006, Haiku. All rights reserved. 3 * Distributed under the terms of the MIT License. 4 * 5 * Authors: 6 * Stephan A��mus <superstippi@gmx.de> 7 */ 8 9#ifndef SUPPORT_H 10#define SUPPORT_H 11 12#include <Rect.h> 13 14// constrain 15inline void 16constrain(float& value, float min, float max) 17{ 18 if (value < min) 19 value = min; 20 if (value > max) 21 value = max; 22} 23 24#ifdef __i386__ 25 26// constrain_int32_0_255_asm 27inline int32 28constrain_int32_0_255_asm(int32 value) { 29 asm("movl $0, %%ecx\n\t" 30 "movl $255, %%edx\n\t" 31 "cmpl %%ecx, %%eax\n\t" 32 "cmovl %%ecx, %%eax\n\t" 33 "cmpl %%edx, %%eax\n\t" 34 "cmovg %%edx, %%eax" 35 : "=a" (value) 36 : "a" (value) 37 : "%ecx", "%edx" ); 38 return value; 39} 40 41#define constrain_int32_0_255 constrain_int32_0_255_asm 42 43#else 44 45inline int32 46constrain_int32_0_255_c(int32 value) 47{ 48 return max_c(0, min_c(255, value)); 49} 50 51#define constrain_int32_0_255 constrain_int32_0_255_c 52 53#endif 54 55// rect_to_int 56inline void 57rect_to_int(BRect r, 58 int32& left, int32& top, int32& right, int32& bottom) 59{ 60 left = (int32)floorf(r.left); 61 top = (int32)floorf(r.top); 62 right = (int32)ceilf(r.right); 63 bottom = (int32)ceilf(r.bottom); 64} 65 66 67# endif // SUPPORT_H 68