1 /*********************************************************************
2 Copyright 2013 Karl Jones
5 Redistribution and use in source and binary forms, with or without
6 modification, are permitted provided that the following conditions are met:
8 1. Redistributions of source code must retain the above copyright notice, this
9 list of conditions and the following disclaimer.
10 2. Redistributions in binary form must reproduce the above copyright notice,
11 this list of conditions and the following disclaimer in the documentation
12 and/or other materials provided with the distribution.
14 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
15 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
18 ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
19 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
20 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
21 ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
23 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 For Further Information Please Contact me at
27 http://p.sf.net/kdis/UserGuide
28 *********************************************************************/
30 #include "./GridAxisIrregular.h"
34 using namespace DATA_TYPE
;
36 //////////////////////////////////////////////////////////////////////////
38 //////////////////////////////////////////////////////////////////////////
40 void GridAxisIrregular::calculatePadding()
42 // Calculate padding needed to be on a 64 bit boundary.
43 m_vui16Padding
.clear();
44 KUINT8 NumPadding
= m_ui16NumPoints
% 4;
48 for( KUINT8 i
= 0; i
< NumPadding
; ++i
)
50 m_vui16Padding
.push_back( Padding
);
54 //////////////////////////////////////////////////////////////////////////
56 //////////////////////////////////////////////////////////////////////////
58 GridAxisIrregular::GridAxisIrregular() :
59 m_f64CoordScaleXi( 0 ),
60 m_f64CoordOffsetXi( 0 )
64 //////////////////////////////////////////////////////////////////////////
66 GridAxisIrregular::GridAxisIrregular( KDataStream
& stream
)
71 //////////////////////////////////////////////////////////////////////////
73 GridAxisIrregular::GridAxisIrregular( KFLOAT64 InitialXi
, KFLOAT64 FinalXi
, KUINT16 PointsXi
, KUINT8 InterleafFactor
,
74 KUINT8 AxisType
, KDataStream
& stream
) :
75 GridAxisRegular( InitialXi
, FinalXi
, PointsXi
, InterleafFactor
, AxisType
, stream
)
77 stream
>> m_f64CoordScaleXi
78 >> m_f64CoordOffsetXi
;
80 KUINT16 ui16TmpVal
= 0;
81 for( KUINT16 i
= 0; i
< m_ui16NumPoints
; ++i
)
84 m_vXiValues
.push_back( ui16TmpVal
);
87 // Calculate the padding that needs to be extracted. 64 bit boundary
88 KUINT8 NumPadding
= m_ui16NumPoints
% 4;
89 for( KUINT8 i
= 0; i
< NumPadding
; ++i
)
92 m_vui16Padding
.push_back( ui16TmpVal
);
96 //////////////////////////////////////////////////////////////////////////
98 GridAxisIrregular::GridAxisIrregular( KFLOAT64 InitialXi
, KFLOAT64 FinalXi
, KUINT16 PointsXi
, KUINT8 InterleafFactor
,
99 KUINT8 AxisType
, KUINT16 InitialIndexXi
, KFLOAT64 CoordinateScaleXi
,
100 KFLOAT64 CoordinateOffsetXi
, const vector
<KUINT16
> & XiValues
) :
101 GridAxisRegular( InitialXi
, FinalXi
, PointsXi
, InterleafFactor
, AxisType
, XiValues
.size(), InitialIndexXi
),
102 m_f64CoordScaleXi( CoordinateScaleXi
),
103 m_f64CoordOffsetXi( CoordinateOffsetXi
),
104 m_vXiValues( XiValues
)
109 //////////////////////////////////////////////////////////////////////////
111 GridAxisIrregular::~GridAxisIrregular()
115 //////////////////////////////////////////////////////////////////////////
117 void GridAxisIrregular::SetCoordinateScaleXi( KFLOAT64 Xi
)
119 m_f64CoordScaleXi
= Xi
;
122 //////////////////////////////////////////////////////////////////////////
124 KFLOAT64
GridAxisIrregular::GetCoordinateScaleXi() const
126 return m_f64CoordScaleXi
;
129 //////////////////////////////////////////////////////////////////////////
131 void GridAxisIrregular::SetCoordinateOffsetXi( KFLOAT64 Xi
)
133 m_f64CoordOffsetXi
= Xi
;
136 //////////////////////////////////////////////////////////////////////////
138 KFLOAT64
GridAxisIrregular::GetCoordinateOffsetXi() const
140 return m_f64CoordOffsetXi
;
143 //////////////////////////////////////////////////////////////////////////
145 void GridAxisIrregular::AddXiValue( KUINT16 Xi
)
147 m_vXiValues
.push_back( Xi
);
148 m_ui16NumPoints
= m_vXiValues
.size();
152 //////////////////////////////////////////////////////////////////////////
154 void GridAxisIrregular::SetXiValues( const std::vector
<KUINT16
> & Xi
)
157 m_ui16NumPoints
= m_vXiValues
.size();
161 //////////////////////////////////////////////////////////////////////////
163 const std::vector
<KUINT16
> & GridAxisIrregular::GetXiValues() const
168 //////////////////////////////////////////////////////////////////////////
170 void GridAxisIrregular::ClearXiValues()
177 //////////////////////////////////////////////////////////////////////////
179 KBOOL
GridAxisIrregular::IsGridRegular() const
184 //////////////////////////////////////////////////////////////////////////
186 KUINT16
GridAxisIrregular::GetLength()
188 KUINT16 ui16Length
= GRID_AXIS_IRREGULAR
;
189 ui16Length
+= m_vXiValues
.size() * 2;
190 ui16Length
+= m_vui16Padding
.size() * 2;
194 //////////////////////////////////////////////////////////////////////////
196 KString
GridAxisIrregular::GetAsString() const
200 ss
<< "Grid Axis Irregular:"
201 << "\n\tDomain Initial Xi: " << m_f64DomainInitialXi
202 << "\n\tDomain Final Xi: " << m_f64DomainFinalXi
203 << "\n\tDomain Points Xi: " << m_ui16DomainPointsXi
204 << "\n\tInterleaf Factor: " << ( KUINT16
)m_ui8InterleafFactor
205 << "\n\tAxis Type: " << ( KUINT16
)m_ui8AxisType
206 << "\n\tNumber Of Points: " << m_ui16NumPoints
207 << "\n\tInitial Index: " << m_ui16InitialIndex
208 << "\n\tCoordinate Scale Xi: " << m_f64CoordScaleXi
209 << "\n\tCoordinate Offset Xi: " << m_f64CoordOffsetXi
212 vector
<KUINT16
>::const_iterator citr
= m_vXiValues
.begin();
213 vector
<KUINT16
>::const_iterator citrEnd
= m_vXiValues
.end();
215 for( ; citr
!= citrEnd
; ++citr
)
217 ss
<< "\n\t" << *citr
;
225 //////////////////////////////////////////////////////////////////////////
227 void GridAxisIrregular::Decode( KDataStream
& stream
)
229 if( stream
.GetBufferSize() < GRID_AXIS_IRREGULAR
)throw KException( __FUNCTION__
, NOT_ENOUGH_DATA_IN_BUFFER
);
232 m_vui16Padding
.clear();
234 GridAxisRegular::Decode( stream
);
236 stream
>> m_f64CoordScaleXi
237 >> m_f64CoordOffsetXi
;
239 KUINT16 ui16TmpVal
= 0;
240 for( KUINT16 i
= 0; i
< m_ui16NumPoints
; ++i
)
242 stream
>> ui16TmpVal
;
243 m_vXiValues
.push_back( ui16TmpVal
);
246 // Calculate the padding that needs to be extracted. 64 bit boundary
247 KUINT8 NumPadding
= m_ui16NumPoints
% 4;
248 for( KUINT8 i
= 0; i
< NumPadding
; ++i
)
250 stream
>> ui16TmpVal
;
251 m_vui16Padding
.push_back( ui16TmpVal
);
255 //////////////////////////////////////////////////////////////////////////
257 KDataStream
GridAxisIrregular::Encode() const
261 GridAxisIrregular::Encode( stream
);
266 //////////////////////////////////////////////////////////////////////////
268 void GridAxisIrregular::Encode( KDataStream
& stream
) const
270 GridAxisRegular::Encode( stream
);
272 stream
<< m_f64CoordScaleXi
273 << m_f64CoordOffsetXi
;
275 vector
<KUINT16
>::const_iterator citr
= m_vXiValues
.begin();
276 vector
<KUINT16
>::const_iterator citrEnd
= m_vXiValues
.end();
278 for( ; citr
!= citrEnd
; ++citr
)
284 citr
= m_vui16Padding
.begin();
285 citrEnd
= m_vui16Padding
.end();
287 for( ; citr
!= citrEnd
; ++citr
)
293 //////////////////////////////////////////////////////////////////////////
295 KBOOL
GridAxisIrregular::operator == ( const GridAxisIrregular
& Value
) const
297 if( GridAxisRegular::operator != ( Value
) ) return false;
298 if( m_f64CoordScaleXi
!= Value
.m_f64CoordScaleXi
) return false;
299 if( m_f64CoordOffsetXi
!= Value
.m_f64CoordOffsetXi
) return false;
300 if( m_vXiValues
!= Value
.m_vXiValues
) return false;
304 //////////////////////////////////////////////////////////////////////////
306 KBOOL
GridAxisIrregular::operator != ( const GridAxisIrregular
& Value
) const
308 return !( *this == Value
);
311 //////////////////////////////////////////////////////////////////////////