1 /**************************************************************
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied. See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
19 *
20 *************************************************************/
21
22
23
24 #ifndef _SALUNX_H
25 #define _SALUNX_H
26
27 // -=-= #includes =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
28 #if defined SCO || defined LINUX || defined HPUX || defined FREEBSD || defined NETBSD
29 #include <sys/time.h>
30 #elif defined AIX
31 #include <time.h>
32 #include <sys/time.h>
33 #include <strings.h>
34 #endif
35 #include <unx/svunx.h>
36 #include <unx/salstd.hxx>
37
38 // -=-= #defines -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
39 #define capacityof(a) (sizeof(a)/sizeof(*a))
40
41 // -=-= inlines =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Divide(long nDividend,long nDivisor)42 inline long Divide( long nDividend, long nDivisor )
43 { return (nDividend + nDivisor/2) / nDivisor; }
44
DPI(long pixel,long mm)45 inline long DPI( long pixel, long mm )
46 { return Divide( pixel*254, mm*10 ); }
47
48 // -=-= timeval =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
operator >=(const timeval & t1,const timeval & t2)49 inline int operator >= ( const timeval &t1, const timeval &t2 )
50 {
51 if( t1.tv_sec == t2.tv_sec )
52 return t1.tv_usec >= t2.tv_usec;
53 return t1.tv_sec > t2.tv_sec;
54 }
55
operator >(const timeval & t1,const timeval & t2)56 inline int operator > ( const timeval &t1, const timeval &t2 )
57 {
58 if( t1.tv_sec == t2.tv_sec )
59 return t1.tv_usec > t2.tv_usec;
60 return t1.tv_sec > t2.tv_sec;
61 }
62
operator ==(const timeval & t1,const timeval & t2)63 inline int operator == ( const timeval &t1, const timeval &t2 )
64 {
65 if( t1.tv_sec == t2.tv_sec )
66 return t1.tv_usec == t2.tv_usec;
67 return sal_False;
68 }
69
operator -=(timeval & t1,const timeval & t2)70 inline timeval &operator -= ( timeval &t1, const timeval &t2 )
71 {
72 if( t1.tv_usec < t2.tv_usec )
73 {
74 t1.tv_sec--;
75 t1.tv_usec += 1000000;
76 }
77 t1.tv_sec -= t2.tv_sec;
78 t1.tv_usec -= t2.tv_usec;
79 return t1;
80 }
81
operator +=(timeval & t1,const timeval & t2)82 inline timeval &operator += ( timeval &t1, const timeval &t2 )
83 {
84 t1.tv_sec += t2.tv_sec;
85 t1.tv_usec += t2.tv_usec;
86 if( t1.tv_usec > 1000000 )
87 {
88 t1.tv_sec++;
89 t1.tv_usec -= 1000000;
90 }
91 return t1;
92 }
93
operator +=(timeval & t1,sal_uIntPtr t2)94 inline timeval &operator += ( timeval &t1, sal_uIntPtr t2 )
95 {
96 t1.tv_sec += t2 / 1000;
97 t1.tv_usec += t2 ? (t2 % 1000) * 1000 : 500;
98 if( t1.tv_usec > 1000000 )
99 {
100 t1.tv_sec++;
101 t1.tv_usec -= 1000000;
102 }
103 return t1;
104 }
105
operator +(const timeval & t1,const timeval & t2)106 inline timeval operator + ( const timeval &t1, const timeval &t2 )
107 {
108 timeval t0 = t1;
109 return t0 += t2;
110 }
111
operator +(const timeval & t1,sal_uIntPtr t2)112 inline timeval operator + ( const timeval &t1, sal_uIntPtr t2 )
113 {
114 timeval t0 = t1;
115 return t0 += t2;
116 }
117
operator -(const timeval & t1,const timeval & t2)118 inline timeval operator - ( const timeval &t1, const timeval &t2 )
119 {
120 timeval t0 = t1;
121 return t0 -= t2;
122 }
123 #endif
124
125