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 CSV_COMFUNC_HXX 25 #define CSV_COMFUNC_HXX 26 27 #include <stdlib.h> 28 29 30 31 32 namespace csv 33 { 34 class String; 35 36 37 // min, max and range functions 38 template <class E> 39 inline E max(E in1, E in2); 40 template <class E> 41 inline E min(E in1, E in2); 42 template <class E> 43 inline bool in_range(E low, E val, E high); // return low <= val < high; 44 45 46 // string functions 47 inline const char * valid_str(const char * str); 48 inline bool no_str(const char * str); // return !str || !strlen(str) 49 intt count_chars(const char * str, char c); 50 51 52 // endian functions 53 template <class NUMTYPE> 54 void switch_endian( 55 NUMTYPE & o_rNumber, 56 const NUMTYPE & i_rNumber ); 57 58 // Zeit-Typecasts 59 bool str2date(const char * str, int & out_day, int & out_month, int & out_year); 60 void date2str(String & out_Str, int day, int month, int year); 61 bool str2time(const char * str, int & out_hour, int & out_min, int & out_sec); 62 void time2str(String & out_Str, int hour, int min, int sec); 63 64 class noncopyable 65 { 66 protected: 67 noncopyable() {} 68 ~noncopyable() {} 69 private: 70 // Private to make copying impossible: 71 noncopyable(const noncopyable&); 72 noncopyable & operator=(const noncopyable&); 73 }; 74 75 76 77 78 // IMPLEMENTATION 79 template <class E> 80 inline E 81 max(E in1, E in2) { return in1 < in2 ? in2 : in1; } 82 template <class E> 83 inline E 84 min(E in1, E in2) { return in1 < in2 ? in1 : in2; } 85 template <class E> 86 inline bool 87 in_range(E low, E val, E high) { return low <= val AND val < high; } 88 89 inline const char * 90 valid_str(const char * str) { return str != 0 ? str : ""; } 91 inline bool 92 no_str(const char * str) { return str != 0 ? *str == '\0' : true; } 93 94 95 template <class NUMTYPE> 96 void 97 switch_endian( NUMTYPE & o_rNumber, 98 const NUMTYPE & i_rNumber ) 99 { 100 char * pFront = reinterpret_cast< char* >(&o_rNumber); 101 const char * pBack = reinterpret_cast< const char* >(&i_rNumber) + sizeof(NUMTYPE); 102 103 for ( size_t p = 0; p < sizeof(NUMTYPE); --p ) 104 { 105 *pFront++ = *(--pBack); 106 } 107 } 108 109 110 } // namespace csv 111 112 113 114 115 #define NON_COPYABLE(xy) \ 116 private: xy(const xy &); xy & operator=(const xy &) 117 118 119 120 121 #endif 122