add a couple of serialization/deserialization methods

This commit is contained in:
Mathieu Lacage
2008-04-24 15:44:15 -07:00
parent 062a2dcc42
commit d3623e2142
2 changed files with 40 additions and 0 deletions

View File

@@ -36,6 +36,23 @@ MtagBuffer::WriteU64 (uint64_t data)
WriteU8 ((data >> 48) & 0xff);
WriteU8 ((data >> 54) & 0xff);
}
void
MtagBuffer::WriteDouble (double v)
{
uint8_t *buf = (uint8_t *)&v;
for (uint32_t i = 0; i < sizeof (double); ++i, ++buf)
{
WriteU8 (*buf);
}
}
void
MtagBuffer::Write (const uint8_t *buffer, uint32_t size)
{
for (uint32_t i = 0; i < size; ++i, ++buffer)
{
WriteU8 (*buffer);
}
}
uint8_t
MtagBuffer::ReadU8 (void)
{
@@ -100,6 +117,25 @@ MtagBuffer::ReadU64 (void)
return data;
}
double
MtagBuffer::ReadDouble (void)
{
double v;
uint8_t *buf = (uint8_t *)&v;
for (uint32_t i = 0; i < sizeof (double); ++i, ++buf)
{
*buf = ReadU8 ();
}
return v;
}
void
MtagBuffer::Read (uint8_t *buffer, uint32_t size)
{
for (uint32_t i = 0; i < size; ++i, ++buffer)
{
*buffer = ReadU8 ();
}
}
MtagBuffer::MtagBuffer (uint8_t *start, uint8_t *end)
: m_current (start),
m_end (end)

View File

@@ -15,10 +15,14 @@ public:
void WriteU16 (uint16_t v);
void WriteU32 (uint32_t v);
void WriteU64 (uint64_t v);
void WriteDouble (double v);
void Write (const uint8_t *buffer, uint32_t size);
uint8_t ReadU8 (void);
uint16_t ReadU16 (void);
uint32_t ReadU32 (void);
uint64_t ReadU64 (void);
double ReadDouble (void);
void Read (uint8_t *buffer, uint32_t size);
void CopyFrom (MtagBuffer o);
private: