equal
deleted
inserted
replaced
697 } |
697 } |
698 |
698 |
699 uint32_t |
699 uint32_t |
700 Buffer::Serialize (uint8_t* buffer, uint32_t maxSize) const |
700 Buffer::Serialize (uint8_t* buffer, uint32_t maxSize) const |
701 { |
701 { |
702 uint32_t* p = (uint32_t*)buffer; |
702 uint32_t* p = reinterpret_cast<uint32_t *> (buffer); |
703 uint32_t size = 0; |
703 uint32_t size = 0; |
704 |
704 |
705 NS_LOG_FUNCTION (this); |
705 NS_LOG_FUNCTION (this); |
706 |
706 |
707 // Add the zero data length |
707 // Add the zero data length |
766 // Serialzed everything successfully |
766 // Serialzed everything successfully |
767 return 1; |
767 return 1; |
768 } |
768 } |
769 |
769 |
770 uint32_t |
770 uint32_t |
771 Buffer::Deserialize (uint8_t *buffer, uint32_t size) |
771 Buffer::Deserialize (const uint8_t *buffer, uint32_t size) |
772 { |
772 { |
773 uint32_t* p = (uint32_t*)buffer; |
773 const uint32_t* p = reinterpret_cast<const uint32_t *> (buffer); |
774 uint32_t sizeCheck = size-4; |
774 uint32_t sizeCheck = size-4; |
775 |
775 |
776 NS_ASSERT (sizeCheck >= 4); |
776 NS_ASSERT (sizeCheck >= 4); |
777 uint32_t zeroDataLength = *p++; |
777 uint32_t zeroDataLength = *p++; |
778 sizeCheck -= 4; |
778 sizeCheck -= 4; |
785 uint32_t dataStartLength = *p++; |
785 uint32_t dataStartLength = *p++; |
786 sizeCheck -= 4; |
786 sizeCheck -= 4; |
787 AddAtStart (dataStartLength); |
787 AddAtStart (dataStartLength); |
788 |
788 |
789 NS_ASSERT (sizeCheck >= dataStartLength); |
789 NS_ASSERT (sizeCheck >= dataStartLength); |
790 Begin ().Write ((uint8_t*)p, dataStartLength); |
790 Begin ().Write (reinterpret_cast<uint8_t *> (const_cast<uint32_t *> (p)), dataStartLength); |
791 p += (((dataStartLength+3)&(~3))/4); |
791 p += (((dataStartLength+3)&(~3))/4); // Advance p, insuring 4 byte boundary |
792 sizeCheck -= ((dataStartLength+3)&(~3)); |
792 sizeCheck -= ((dataStartLength+3)&(~3)); |
793 |
793 |
794 // Add end data |
794 // Add end data |
795 NS_ASSERT (sizeCheck >= 4); |
795 NS_ASSERT (sizeCheck >= 4); |
796 uint32_t dataEndLength = *p++; |
796 uint32_t dataEndLength = *p++; |
798 AddAtEnd (dataEndLength); |
798 AddAtEnd (dataEndLength); |
799 |
799 |
800 NS_ASSERT (sizeCheck >= dataEndLength); |
800 NS_ASSERT (sizeCheck >= dataEndLength); |
801 Buffer::Iterator tmp = End (); |
801 Buffer::Iterator tmp = End (); |
802 tmp.Prev (dataEndLength); |
802 tmp.Prev (dataEndLength); |
803 tmp.Write ((uint8_t*)p, dataEndLength); |
803 tmp.Write (reinterpret_cast<uint8_t *> (const_cast<uint32_t *> (p)), dataEndLength); |
804 p += (((dataEndLength+3)&(~3))/4); |
804 p += (((dataEndLength+3)&(~3))/4); // Advance p, insuring 4 byte boundary |
805 sizeCheck -= ((dataEndLength+3)&(~3)); |
805 sizeCheck -= ((dataEndLength+3)&(~3)); |
806 |
806 |
807 NS_ASSERT (sizeCheck == 0); |
807 NS_ASSERT (sizeCheck == 0); |
808 // return zero if buffer did not |
808 // return zero if buffer did not |
809 // contain a complete message |
809 // contain a complete message |