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