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: 67*11c03c6dSDamjan Jovanovic 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 81*11c03c6dSDamjan Jovanovic max(E in1, E in2) { return in1 < in2 ? in2 : in1; } 82*11c03c6dSDamjan Jovanovic template <class E> 83*11c03c6dSDamjan Jovanovic inline E 84*11c03c6dSDamjan Jovanovic min(E in1, E in2) { return in1 < in2 ? in1 : in2; } 85*11c03c6dSDamjan Jovanovic template <class E> 86*11c03c6dSDamjan Jovanovic inline bool 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 * 90*11c03c6dSDamjan Jovanovic valid_str(const char * str) { return str != 0 ? str : ""; } 91*11c03c6dSDamjan Jovanovic inline bool 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 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