00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef FIX_TIMERANGE_H
00023 #define FIX_TIMERANGE_H
00024
00025 #ifdef _MSC_VER
00026 #pragma warning( disable : 4503 4355 4786 4290 )
00027 #endif
00028
00029 #include "FieldTypes.h"
00030
00031 namespace FIX
00032 {
00034 class TimeRange
00035 {
00036 public:
00037 TimeRange( const UtcTimeOnly& startTime, const UtcTimeOnly& endTime,
00038 int startDay = -1, int endDay = -1 );
00039
00040 TimeRange( const LocalTimeOnly& startTime, const LocalTimeOnly& endTime,
00041 int startDay = -1, int endDay = -1 );
00042
00043 static bool isInRange( const UtcTimeOnly& start,
00044 const UtcTimeOnly& end,
00045 const DateTime& time )
00046 {
00047 return isInRange
00048 ( (DateTime)start, (DateTime)end, (DateTime)time );
00049 }
00050
00051 static bool isInRange( const UtcTimeOnly& startTime,
00052 const UtcTimeOnly& endTime,
00053 int startDay,
00054 int endDay,
00055 const DateTime& time )
00056 {
00057 return isInRange
00058 ( (DateTime)startTime, (DateTime)endTime,
00059 startDay, endDay,
00060 (DateTime)time );
00061 }
00062
00063 static bool isInSameRange( const UtcTimeOnly& start,
00064 const UtcTimeOnly& end,
00065 const DateTime& time1,
00066 const DateTime& time2 )
00067 {
00068 return isInSameRange
00069 ( (DateTime)start, (DateTime)end,
00070 (DateTime)time1, (DateTime)time2 );
00071 }
00072
00073 static bool isInSameRange( const UtcTimeOnly& startTime,
00074 const UtcTimeOnly& endTime,
00075 int startDay,
00076 int endDay,
00077 const DateTime& time1,
00078 const DateTime& time2 )
00079 {
00080 return isInSameRange
00081 ( (DateTime)startTime, (DateTime)endTime,
00082 startDay, endDay,
00083 (DateTime)time1, (DateTime)time2 );
00084 }
00085
00086 static bool isInRange( const LocalTimeOnly& start,
00087 const LocalTimeOnly& end,
00088 const DateTime& time )
00089 {
00090 return isInRange
00091 ( (DateTime)start, (DateTime)end, (DateTime)time );
00092 }
00093
00094 static bool isInRange( const LocalTimeOnly& startTime,
00095 const LocalTimeOnly& endTime,
00096 int startDay,
00097 int endDay,
00098 const DateTime& time )
00099 {
00100 return isInRange
00101 ( (DateTime)startTime, (DateTime)endTime,
00102 startDay, endDay,
00103 (DateTime)time );
00104 }
00105
00106 static bool isInSameRange( const LocalTimeOnly& start,
00107 const LocalTimeOnly& end,
00108 const DateTime& time1,
00109 const DateTime& time2 )
00110 {
00111 return isInSameRange
00112 ( (DateTime)start, (DateTime)end,
00113 (DateTime)time1, (DateTime)time2 );
00114 }
00115
00116 static bool isInSameRange( const LocalTimeOnly& startTime,
00117 const LocalTimeOnly& endTime,
00118 int startDay,
00119 int endDay,
00120 const DateTime& time1,
00121 const DateTime& time2 )
00122 {
00123 return isInSameRange
00124 ( (DateTime)startTime, (DateTime)endTime,
00125 startDay, endDay,
00126 (DateTime)time1, (DateTime)time2 );
00127 }
00128
00129 private:
00130 static bool isInRange( const DateTime& start,
00131 const DateTime& end,
00132 const DateTime& time );
00133
00134 static bool isInRange( const DateTime& startTime,
00135 const DateTime& endTime,
00136 int startDay,
00137 int endDay,
00138 const DateTime& time );
00139
00140 static bool isInSameRange( const DateTime& start,
00141 const DateTime& end,
00142 const DateTime& time1,
00143 const DateTime& time2 );
00144
00145 static bool isInSameRange( const DateTime& startTime,
00146 const DateTime& endTime,
00147 int startDay,
00148 int endDay,
00149 const DateTime& time1,
00150 const DateTime& time2 );
00151 public:
00152 bool isInRange( const DateTime& dateTime )
00153 {
00154 if( m_startDay < 0 && m_endDay < 0 )
00155 return isInRange( m_startTime, m_endTime, dateTime );
00156 else
00157 return isInRange
00158 ( m_startTime, m_endTime, m_startDay, m_endDay, dateTime );
00159 }
00160
00161 bool isInSameRange( const UtcTimeStamp& time1, const UtcTimeStamp& time2 )
00162 {
00163 return isInSameRange( (DateTime)time1, (DateTime)time2 );
00164 }
00165
00166 bool isInSameRange( const LocalTimeStamp& time1, const LocalTimeStamp& time2 )
00167 {
00168 return isInSameRange( (DateTime)time1, (DateTime)time2 );
00169 }
00170
00171 private:
00172 bool isInSameRange( const DateTime& time1, const DateTime& time2 )
00173 {
00174 if( m_startDay < 0 && m_endDay < 0 )
00175 return isInSameRange( m_startTime, m_endTime, time1, time2 );
00176 else
00177 return isInSameRange
00178 ( m_startTime, m_endTime, m_startDay, m_endDay, time1, time2 );
00179 }
00180
00181 UtcTimeOnly m_startTime;
00182 UtcTimeOnly m_endTime;
00183 int m_startDay;
00184 int m_endDay;
00185 };
00186 }
00187
00188 #endif