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