Skip to content
Snippets Groups Projects
Commit a1bbc3b6 authored by Birte Kristina Friesel's avatar Birte Kristina Friesel
Browse files

add preliminary xdr input driver

parent 5471509e
No related branches found
No related tags found
No related merge requests found
#ifndef XDRINPUT_H
#define XDRINPUT_H
#include <stdint.h>
class XDRInput {
private:
XDRInput(const XDRInput& copy);
char *data;
uint32_t pos;
public:
XDRInput(char *d) : pos(0) { data = d; }
uint32_t get_uint32();
int32_t get_int32();
uint64_t get_uint64();
int64_t get_int64();
uint32_t get_opaque_length();
char* get_opaque(uint32_t length);
};
#endif
#include "object/xdrinput.h"
uint32_t XDRInput::get_uint32()
{
uint32_t ret = ((uint8_t)data[pos]<<24) | ((uint8_t)data[pos+1]<<16)
| ((uint8_t)data[pos+2]<<8) | (uint8_t)data[pos+3];
pos += 4;
return ret;
}
int32_t XDRInput::get_int32()
{
int32_t ret = (data[pos]<<24) | (data[pos+1]<<16) | (data[pos+2]<<8) | data[pos+3];
pos += 4;
return ret;
}
uint64_t XDRInput::get_uint64()
{
uint64_t ret0 = ((uint8_t)data[pos]<<24) | ((uint8_t)data[pos+1]<<16)
| ((uint8_t)data[pos+2]<<8) | (uint8_t)data[pos+3];
pos += 4;
uint64_t ret1 = ((uint8_t)data[pos]<<24) | ((uint8_t)data[pos+1]<<16)
| ((uint8_t)data[pos+2]<<8) | (uint8_t)data[pos+3];
pos += 4;
return (ret0 << 32) | ret1;
}
int64_t XDRInput::get_int64()
{
int64_t ret0 = (data[pos]<<24) | (data[pos+1]<<16) | (data[pos+2]<<8) | data[pos+3];
pos += 4;
int64_t ret1 = (data[pos]<<24) | (data[pos+1]<<16) | (data[pos+2]<<8) | data[pos+3];
pos += 4;
return (ret0 << 32) | ret1;
}
uint32_t XDRInput::get_opaque_length()
{
return get_uint32();
}
char *XDRInput::get_opaque(uint32_t length)
{
char *ret = data + pos;
pos += length;
if (length % 4) {
pos += 4 - (length % 4);
}
return ret;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment