00001 00040 #define _EXPORT_CCL_ 00041 00042 00043 #include "CigiSymbolCloneV3_3.h" 00044 #include "CigiSwapping.h" 00045 #include "CigiExceptions.h" 00046 00047 00048 00049 // ==================================================================== 00050 // Construction/Destruction 00051 // ==================================================================== 00052 00053 // ================================================ 00054 // CigiBaseEntityCtrl 00055 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 00056 CigiSymbolCloneV3_3::CigiSymbolCloneV3_3(void) 00057 { 00058 PacketID = CIGI_SYMBOL_CLONE_PACKET_ID_V3_3; 00059 PacketSize = CIGI_SYMBOL_CLONE_PACKET_SIZE_V3_3; 00060 Version = 3; 00061 MinorVersion = 3; 00062 00063 SymbolID = 0; 00064 SourceType = CigiBaseSymbolClone::SymbolSrc; 00065 SourceID = 0; 00066 00067 } 00068 00069 // ================================================ 00070 // ~CigiBaseEntityCtrl 00071 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 00072 CigiSymbolCloneV3_3::~CigiSymbolCloneV3_3(void) 00073 { 00074 } 00075 00076 00077 00078 // ==================================================================== 00079 // Pack and Unpack 00080 // ==================================================================== 00081 00082 // ================================================ 00083 // Pack 00084 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 00085 int CigiSymbolCloneV3_3::Pack(CigiBasePacket * Base, Cigi_uint8 * Buff, void *Spec) const 00086 { 00087 PackPointer CDta; 00088 00089 CigiSymbolCloneV3_3 * Data = 00090 ( CigiSymbolCloneV3_3 *)Base; 00091 00092 CDta.c = Buff; 00093 00094 *CDta.c++ = PacketID; 00095 *CDta.c++ = PacketSize; 00096 00097 *CDta.s++ = Data->SymbolID; 00098 00099 if(Data->SourceType == CigiBaseSymbolClone::SymbolTemplateSrc) 00100 *CDta.c++ = 0x01; 00101 else 00102 *CDta.c++ = 0; 00103 00104 *CDta.c++ = 0; 00105 00106 *CDta.s++ = Data->SourceID; 00107 00108 return(PacketSize); 00109 00110 } 00111 00112 // ================================================ 00113 // Unpack 00114 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 00115 int CigiSymbolCloneV3_3::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec) 00116 { 00117 PackPointer CDta; 00118 unsigned char HDta = 0; 00119 00120 CDta.c = Buff; 00121 00122 CDta.c += 2; // Step over packet id and size 00123 00124 if(!Swap) 00125 { 00126 00127 SymbolID = *CDta.s++; 00128 00129 HDta = *CDta.c++; 00130 00131 CDta.c++; 00132 00133 SourceID = *CDta.s++; 00134 00135 } 00136 else 00137 { 00138 00139 CigiSwap2(&SymbolID, CDta.s++); 00140 00141 HDta = *CDta.c++; 00142 00143 CDta.c++; 00144 00145 CigiSwap2(&SourceID, CDta.s++); 00146 00147 } 00148 00149 SourceType = (CigiBaseSymbolClone::SymbolSourceGrp)(HDta & 0x01); 00150 00151 return(PacketSize); 00152 00153 } 00154 00155 00156 00157