00001 #ifndef __J2K__Message_HPP__ 00002 #define __J2K__Message_HPP__ 00003 00004 #include <j2k/Fred/Standard.hpp> 00005 00006 // XOR checksum 00007 void Message::calculateCheckSum() 00008 { 00009 msg.checksum = ~0; 00010 00011 for( size_t i = 0; i < size; i++ ) 00012 { 00013 msg.checksum ^= ( msg.buffer[i] * ((i+1) & 65535 ) ); 00014 } 00015 00016 msg.checksum ^= msg.number; 00017 } 00018 00019 Message::Message( void* buffer0, size_t size0, int number0 = 0 ) 00020 { 00021 msg.buffer = new char[ size0+1 ]; 00022 msg.size = size0+1; 00023 msg.number = number0; 00024 memcpy( msg.buffer, buffer0, msg.size ); 00025 calculateCheckSum(); 00026 } 00027 00028 Message::Message( int number0 = 0 ) 00029 { 00030 msg.buffer = NULL; 00031 msg.size = 0; 00032 msg.number = number0; 00033 calculateCheckSum(); 00034 } 00035 00036 Message::Message( const Message& src ) 00037 { 00038 msg.buffer = new char[ src.msg.size ]; 00039 msg.size = src.msg.size; 00040 msg.number = src.msg.number; 00041 memcpy( msg.buffer, src.msg.buffer, src.msg.size ); 00042 calculateCheckSum(); 00043 } 00044 00045 const Message& Message::operator= ( const Message& src ) 00046 { 00047 msg.buffer = new char[ src.msg.size ]; 00048 msg.size = src.msg.size; 00049 msg.number = src.msg.number; 00050 memcpy( msg.buffer, src.msg.buffer, src.msg.size ); 00051 calculateCheckSum(); 00052 } 00053 00054 Message::~Message() 00055 { 00056 if ( msg.buffer != NULL ) 00057 { 00058 delete[] msg.buffer; 00059 } 00060 } 00061 00062 #endif