00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef _SDNV_H_
00018 #define _SDNV_H_
00019
00020 #include <oasys/compat/inttypes.h>
00021
00022 #ifdef __cplusplus
00023
00024 namespace dtn {
00025
00043 class SDNV {
00044 public:
00049 static const size_t MAX_LENGTH = 10;
00050
00054 static size_t encoding_len(u_int64_t val);
00055
00061 static int encode(u_int64_t val, u_char* bp, size_t len);
00062
00069 static int decode(const u_char* bp, size_t len, u_int64_t* val);
00070
00077 static int decode(const u_char* bp, size_t len, u_int32_t* val)
00078 {
00079 u_int64_t lval;
00080 int ret = decode(bp, len, &lval);
00081
00082 if (lval > 0xffffffffLL) {
00083 return -1;
00084 }
00085
00086 *val = (u_int32_t)lval;
00087
00088 return ret;
00089 }
00090
00098 static int encode(u_int64_t val, char* bp, size_t len)
00099 {
00100 return encode(val, (u_char*)bp, len);
00101 }
00102
00103 static int decode(char* bp, size_t len, u_int64_t* val)
00104 {
00105 return decode((u_char*)bp, len, val);
00106 }
00107
00108 static int decode(char* bp, size_t len, u_int32_t* val)
00109 {
00110 return decode((u_char*)bp, len, val);
00111 }
00113
00118 static size_t len(const u_char* bp);
00119 };
00120
00121 }
00122
00123 #endif
00124
00125 #endif