xref: /trunk/main/autodoc/inc/cosv/comfunc.hxx (revision 914d351e5f5b84e4342a86d6ab8d4aca7308b9bd)
1*11c03c6dSDamjan Jovanovic /**************************************************************
2*11c03c6dSDamjan Jovanovic  *
3*11c03c6dSDamjan Jovanovic  * Licensed to the Apache Software Foundation (ASF) under one
4*11c03c6dSDamjan Jovanovic  * or more contributor license agreements.  See the NOTICE file
5*11c03c6dSDamjan Jovanovic  * distributed with this work for additional information
6*11c03c6dSDamjan Jovanovic  * regarding copyright ownership.  The ASF licenses this file
7*11c03c6dSDamjan Jovanovic  * to you under the Apache License, Version 2.0 (the
8*11c03c6dSDamjan Jovanovic  * "License"); you may not use this file except in compliance
9*11c03c6dSDamjan Jovanovic  * with the License.  You may obtain a copy of the License at
10*11c03c6dSDamjan Jovanovic  *
11*11c03c6dSDamjan Jovanovic  *   http://www.apache.org/licenses/LICENSE-2.0
12*11c03c6dSDamjan Jovanovic  *
13*11c03c6dSDamjan Jovanovic  * Unless required by applicable law or agreed to in writing,
14*11c03c6dSDamjan Jovanovic  * software distributed under the License is distributed on an
15*11c03c6dSDamjan Jovanovic  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*11c03c6dSDamjan Jovanovic  * KIND, either express or implied.  See the License for the
17*11c03c6dSDamjan Jovanovic  * specific language governing permissions and limitations
18*11c03c6dSDamjan Jovanovic  * under the License.
19*11c03c6dSDamjan Jovanovic  *
20*11c03c6dSDamjan Jovanovic  *************************************************************/
21*11c03c6dSDamjan Jovanovic 
22*11c03c6dSDamjan Jovanovic 
23*11c03c6dSDamjan Jovanovic 
24*11c03c6dSDamjan Jovanovic #ifndef CSV_COMFUNC_HXX
25*11c03c6dSDamjan Jovanovic #define CSV_COMFUNC_HXX
26*11c03c6dSDamjan Jovanovic 
27*11c03c6dSDamjan Jovanovic #include <stdlib.h>
28*11c03c6dSDamjan Jovanovic 
29*11c03c6dSDamjan Jovanovic 
30*11c03c6dSDamjan Jovanovic 
31*11c03c6dSDamjan Jovanovic 
32*11c03c6dSDamjan Jovanovic namespace csv
33*11c03c6dSDamjan Jovanovic {
34*11c03c6dSDamjan Jovanovic     class String;
35*11c03c6dSDamjan Jovanovic 
36*11c03c6dSDamjan Jovanovic 
37*11c03c6dSDamjan Jovanovic // min, max and range functions
38*11c03c6dSDamjan Jovanovic template <class E>
39*11c03c6dSDamjan Jovanovic inline E            max(E in1, E in2);
40*11c03c6dSDamjan Jovanovic template <class E>
41*11c03c6dSDamjan Jovanovic inline E            min(E in1, E in2);
42*11c03c6dSDamjan Jovanovic template <class E>
43*11c03c6dSDamjan Jovanovic inline bool         in_range(E low, E val, E high);    // return low <= val < high;
44*11c03c6dSDamjan Jovanovic 
45*11c03c6dSDamjan Jovanovic 
46*11c03c6dSDamjan Jovanovic // string functions
47*11c03c6dSDamjan Jovanovic inline const char * valid_str(const char * str);
48*11c03c6dSDamjan Jovanovic inline bool         no_str(const char * str);       // return !str || !strlen(str)
49*11c03c6dSDamjan Jovanovic intt                count_chars(const char * str, char c);
50*11c03c6dSDamjan Jovanovic 
51*11c03c6dSDamjan Jovanovic 
52*11c03c6dSDamjan Jovanovic // endian functions
53*11c03c6dSDamjan Jovanovic template <class NUMTYPE>
54*11c03c6dSDamjan Jovanovic void                switch_endian(
55*11c03c6dSDamjan Jovanovic                         NUMTYPE &       o_rNumber,
56*11c03c6dSDamjan Jovanovic                         const NUMTYPE & i_rNumber );
57*11c03c6dSDamjan Jovanovic 
58*11c03c6dSDamjan Jovanovic // Zeit-Typecasts
59*11c03c6dSDamjan Jovanovic bool  str2date(const char * str, int & out_day, int & out_month, int & out_year);
60*11c03c6dSDamjan Jovanovic void  date2str(String       & out_Str, int day, int month, int year);
61*11c03c6dSDamjan Jovanovic bool  str2time(const char * str, int & out_hour, int & out_min, int & out_sec);
62*11c03c6dSDamjan Jovanovic void  time2str(String       & out_Str, int hour, int min, int sec);
63*11c03c6dSDamjan Jovanovic 
64*11c03c6dSDamjan Jovanovic class noncopyable
65*11c03c6dSDamjan Jovanovic {
66*11c03c6dSDamjan Jovanovic   protected:
noncopyable()67*11c03c6dSDamjan Jovanovic                         noncopyable() {}
~noncopyable()68*11c03c6dSDamjan Jovanovic                         ~noncopyable() {}
69*11c03c6dSDamjan Jovanovic   private:
70*11c03c6dSDamjan Jovanovic     // Private to make copying impossible:
71*11c03c6dSDamjan Jovanovic                         noncopyable(const noncopyable&);
72*11c03c6dSDamjan Jovanovic     noncopyable &       operator=(const noncopyable&);
73*11c03c6dSDamjan Jovanovic };
74*11c03c6dSDamjan Jovanovic 
75*11c03c6dSDamjan Jovanovic 
76*11c03c6dSDamjan Jovanovic 
77*11c03c6dSDamjan Jovanovic 
78*11c03c6dSDamjan Jovanovic // IMPLEMENTATION
79*11c03c6dSDamjan Jovanovic template <class E>
80*11c03c6dSDamjan Jovanovic inline E
max(E in1,E in2)81*11c03c6dSDamjan Jovanovic max(E in1, E in2)   { return in1 < in2 ? in2 : in1; }
82*11c03c6dSDamjan Jovanovic template <class E>
83*11c03c6dSDamjan Jovanovic inline E
min(E in1,E in2)84*11c03c6dSDamjan Jovanovic min(E in1, E in2)   { return in1 < in2 ? in1 : in2; }
85*11c03c6dSDamjan Jovanovic template <class E>
86*11c03c6dSDamjan Jovanovic inline bool
in_range(E low,E val,E high)87*11c03c6dSDamjan Jovanovic in_range(E low, E val, E high) { return low <= val AND val < high; }
88*11c03c6dSDamjan Jovanovic 
89*11c03c6dSDamjan Jovanovic inline const char *
valid_str(const char * str)90*11c03c6dSDamjan Jovanovic valid_str(const char * str) { return str != 0 ? str : ""; }
91*11c03c6dSDamjan Jovanovic inline bool
no_str(const char * str)92*11c03c6dSDamjan Jovanovic no_str(const char * str) { return str != 0 ? *str == '\0' : true; }
93*11c03c6dSDamjan Jovanovic 
94*11c03c6dSDamjan Jovanovic 
95*11c03c6dSDamjan Jovanovic template <class NUMTYPE>
96*11c03c6dSDamjan Jovanovic void
switch_endian(NUMTYPE & o_rNumber,const NUMTYPE & i_rNumber)97*11c03c6dSDamjan Jovanovic switch_endian( NUMTYPE &       o_rNumber,
98*11c03c6dSDamjan Jovanovic                const NUMTYPE & i_rNumber )
99*11c03c6dSDamjan Jovanovic {
100*11c03c6dSDamjan Jovanovic     char *          pFront = reinterpret_cast< char* >(&o_rNumber);
101*11c03c6dSDamjan Jovanovic     const char *    pBack  = reinterpret_cast< const char* >(&i_rNumber) + sizeof(NUMTYPE);
102*11c03c6dSDamjan Jovanovic 
103*11c03c6dSDamjan Jovanovic     for ( size_t p = 0; p < sizeof(NUMTYPE); --p )
104*11c03c6dSDamjan Jovanovic     {
105*11c03c6dSDamjan Jovanovic         *pFront++ = *(--pBack);
106*11c03c6dSDamjan Jovanovic     }
107*11c03c6dSDamjan Jovanovic }
108*11c03c6dSDamjan Jovanovic 
109*11c03c6dSDamjan Jovanovic 
110*11c03c6dSDamjan Jovanovic }   // namespace csv
111*11c03c6dSDamjan Jovanovic 
112*11c03c6dSDamjan Jovanovic 
113*11c03c6dSDamjan Jovanovic 
114*11c03c6dSDamjan Jovanovic 
115*11c03c6dSDamjan Jovanovic #define NON_COPYABLE(xy) \
116*11c03c6dSDamjan Jovanovic     private: xy(const xy &); xy & operator=(const xy &)
117*11c03c6dSDamjan Jovanovic 
118*11c03c6dSDamjan Jovanovic 
119*11c03c6dSDamjan Jovanovic 
120*11c03c6dSDamjan Jovanovic 
121*11c03c6dSDamjan Jovanovic #endif
122