FluentLogger: fluent-logger-mbed A structured logger for Fluentd (mbed)

Dependents:   FluentLogger_Hello SNIC-FluentLogger-example

FluentLogger

Fluentd Logo

What is this ?

You can logging to Fluentd server.
This library included subset of MassagePack library.

Supported MessagePack formats(encode only)

format namefirst byte (in hex)
positive fixint0x00 - 0x7f
fixmap0x80 - 0x8f
fixarray0x90 - 0x9f
fixstr0xa0 - 0xbf
nil0xc0
false0xc2
true0xc3
float 320xca
float 640xcb
uint 80xcc
uint 160xcd
uint 320xce
uint 640xcf
int 80xd0
int 160xd1
int 320xd2
int 640xd3
str 80xd9
negative fixint0xe0 - 0xff

これは何?

Fluentd サーバにログを送信するためのライブラリです。
サブセット版のMassagePackライブラリも同梱しています。

サーバ側ダウン時の再接続機能は限定的に実装されています。 現時点での実装は送信時に切断を検知し、次回送信時に再接続する仕様です。

Committer:
YuuichiAkagawa
Date:
Tue Nov 11 02:14:44 2014 +0000
Revision:
0:b4815a079a4b
Child:
1:6b1268731465
Initial release

Who changed what in which revision?

UserRevisionLine numberNew contents of line
YuuichiAkagawa 0:b4815a079a4b 1 /* uMP - micro MessagePack class
YuuichiAkagawa 0:b4815a079a4b 2 * Copyright (c) 2014 Yuuichi Akagawa
YuuichiAkagawa 0:b4815a079a4b 3 *
YuuichiAkagawa 0:b4815a079a4b 4 * Licensed under the Apache License, Version 2.0 (the "License");
YuuichiAkagawa 0:b4815a079a4b 5 * you may not use this file except in compliance with the License.
YuuichiAkagawa 0:b4815a079a4b 6 * You may obtain a copy of the License at
YuuichiAkagawa 0:b4815a079a4b 7 *
YuuichiAkagawa 0:b4815a079a4b 8 * http://www.apache.org/licenses/LICENSE-2.0
YuuichiAkagawa 0:b4815a079a4b 9 *
YuuichiAkagawa 0:b4815a079a4b 10 * Unless required by applicable law or agreed to in writing, software
YuuichiAkagawa 0:b4815a079a4b 11 * distributed under the License is distributed on an "AS IS" BASIS,
YuuichiAkagawa 0:b4815a079a4b 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
YuuichiAkagawa 0:b4815a079a4b 13 * See the License for the specific language governing permissions and
YuuichiAkagawa 0:b4815a079a4b 14 * limitations under the License.
YuuichiAkagawa 0:b4815a079a4b 15 */
YuuichiAkagawa 0:b4815a079a4b 16
YuuichiAkagawa 0:b4815a079a4b 17 #include "mbed.h"
YuuichiAkagawa 0:b4815a079a4b 18 #include "uMP.h"
YuuichiAkagawa 0:b4815a079a4b 19
YuuichiAkagawa 0:b4815a079a4b 20 uMP::uMP() :
YuuichiAkagawa 0:b4815a079a4b 21 _ptr(0), _nbuf(DEFAULT_BUFFSIZE)
YuuichiAkagawa 0:b4815a079a4b 22 {
YuuichiAkagawa 0:b4815a079a4b 23 _buf = new uint8_t[_nbuf];
YuuichiAkagawa 0:b4815a079a4b 24 }
YuuichiAkagawa 0:b4815a079a4b 25
YuuichiAkagawa 0:b4815a079a4b 26 uMP::uMP(uint32_t size) :
YuuichiAkagawa 0:b4815a079a4b 27 _ptr(0), _nbuf(size)
YuuichiAkagawa 0:b4815a079a4b 28 {
YuuichiAkagawa 0:b4815a079a4b 29 _buf = new uint8_t[_nbuf];
YuuichiAkagawa 0:b4815a079a4b 30 }
YuuichiAkagawa 0:b4815a079a4b 31
YuuichiAkagawa 0:b4815a079a4b 32 uMP::~uMP()
YuuichiAkagawa 0:b4815a079a4b 33 {
YuuichiAkagawa 0:b4815a079a4b 34 delete[] _buf;
YuuichiAkagawa 0:b4815a079a4b 35 }
YuuichiAkagawa 0:b4815a079a4b 36
YuuichiAkagawa 0:b4815a079a4b 37 /* MessagePack funcions (Subset) */
YuuichiAkagawa 0:b4815a079a4b 38 bool uMP::set_nil()
YuuichiAkagawa 0:b4815a079a4b 39 {
YuuichiAkagawa 0:b4815a079a4b 40 return set_buffer(TAG_NIL);
YuuichiAkagawa 0:b4815a079a4b 41 }
YuuichiAkagawa 0:b4815a079a4b 42
YuuichiAkagawa 0:b4815a079a4b 43 bool uMP::set_true()
YuuichiAkagawa 0:b4815a079a4b 44 {
YuuichiAkagawa 0:b4815a079a4b 45 return set_buffer(TAG_TRUE);
YuuichiAkagawa 0:b4815a079a4b 46 }
YuuichiAkagawa 0:b4815a079a4b 47
YuuichiAkagawa 0:b4815a079a4b 48 bool uMP::set_false()
YuuichiAkagawa 0:b4815a079a4b 49 {
YuuichiAkagawa 0:b4815a079a4b 50 return set_buffer(TAG_FALSE);
YuuichiAkagawa 0:b4815a079a4b 51 }
YuuichiAkagawa 0:b4815a079a4b 52
YuuichiAkagawa 0:b4815a079a4b 53 bool uMP::set_array(uint32_t size)
YuuichiAkagawa 0:b4815a079a4b 54 {
YuuichiAkagawa 0:b4815a079a4b 55 if (size <= 0x0f) {
YuuichiAkagawa 0:b4815a079a4b 56 return set_buffer((uint8_t)(TAG_FIXARRAY | size));
YuuichiAkagawa 0:b4815a079a4b 57 }
YuuichiAkagawa 0:b4815a079a4b 58 return false;
YuuichiAkagawa 0:b4815a079a4b 59 }
YuuichiAkagawa 0:b4815a079a4b 60
YuuichiAkagawa 0:b4815a079a4b 61 bool uMP::set_map(uint32_t size)
YuuichiAkagawa 0:b4815a079a4b 62 {
YuuichiAkagawa 0:b4815a079a4b 63 if (size <= 0x0f) {
YuuichiAkagawa 0:b4815a079a4b 64 return set_buffer((uint8_t)(TAG_FIXMAP | size));
YuuichiAkagawa 0:b4815a079a4b 65 }
YuuichiAkagawa 0:b4815a079a4b 66 #if 0
YuuichiAkagawa 0:b4815a079a4b 67 if (size <= 0xffff) {
YuuichiAkagawa 0:b4815a079a4b 68 return cmp_write_map16(ctx, size);
YuuichiAkagawa 0:b4815a079a4b 69 }
YuuichiAkagawa 0:b4815a079a4b 70 #endif
YuuichiAkagawa 0:b4815a079a4b 71 return false;
YuuichiAkagawa 0:b4815a079a4b 72 }
YuuichiAkagawa 0:b4815a079a4b 73
YuuichiAkagawa 0:b4815a079a4b 74 bool uMP::set_uint(uint32_t u)
YuuichiAkagawa 0:b4815a079a4b 75 {
YuuichiAkagawa 0:b4815a079a4b 76 if (u <= 0x7f) {
YuuichiAkagawa 0:b4815a079a4b 77 return set_buffer((uint8_t)u);
YuuichiAkagawa 0:b4815a079a4b 78 }
YuuichiAkagawa 0:b4815a079a4b 79 if (u <= 0xff) {
YuuichiAkagawa 0:b4815a079a4b 80 return set_u8((uint8_t)u);
YuuichiAkagawa 0:b4815a079a4b 81 }
YuuichiAkagawa 0:b4815a079a4b 82 if (u <= 0xffff) {
YuuichiAkagawa 0:b4815a079a4b 83 return set_u16((uint16_t)u);
YuuichiAkagawa 0:b4815a079a4b 84 }
YuuichiAkagawa 0:b4815a079a4b 85 if (u <= 0xffffffff) {
YuuichiAkagawa 0:b4815a079a4b 86 return set_u32(u);
YuuichiAkagawa 0:b4815a079a4b 87 }
YuuichiAkagawa 0:b4815a079a4b 88 return false;
YuuichiAkagawa 0:b4815a079a4b 89 }
YuuichiAkagawa 0:b4815a079a4b 90
YuuichiAkagawa 0:b4815a079a4b 91 bool uMP::set_u8(uint8_t u)
YuuichiAkagawa 0:b4815a079a4b 92 {
YuuichiAkagawa 0:b4815a079a4b 93 if (!set_buffer((uint8_t)TAG_U8)) {
YuuichiAkagawa 0:b4815a079a4b 94 return false;
YuuichiAkagawa 0:b4815a079a4b 95 }
YuuichiAkagawa 0:b4815a079a4b 96 return set_buffer(u);
YuuichiAkagawa 0:b4815a079a4b 97 }
YuuichiAkagawa 0:b4815a079a4b 98
YuuichiAkagawa 0:b4815a079a4b 99 bool uMP::set_u16(uint16_t u)
YuuichiAkagawa 0:b4815a079a4b 100 {
YuuichiAkagawa 0:b4815a079a4b 101 if (!set_buffer((uint8_t)TAG_U16)) {
YuuichiAkagawa 0:b4815a079a4b 102 return false;
YuuichiAkagawa 0:b4815a079a4b 103 }
YuuichiAkagawa 0:b4815a079a4b 104
YuuichiAkagawa 0:b4815a079a4b 105 u = to_be16(u);
YuuichiAkagawa 0:b4815a079a4b 106 return set_buffer((uint8_t*)&u, sizeof(uint16_t));
YuuichiAkagawa 0:b4815a079a4b 107 }
YuuichiAkagawa 0:b4815a079a4b 108
YuuichiAkagawa 0:b4815a079a4b 109 bool uMP::set_u32(uint32_t u)
YuuichiAkagawa 0:b4815a079a4b 110 {
YuuichiAkagawa 0:b4815a079a4b 111 if (!set_buffer((uint8_t)TAG_U32)) {
YuuichiAkagawa 0:b4815a079a4b 112 return false;
YuuichiAkagawa 0:b4815a079a4b 113 }
YuuichiAkagawa 0:b4815a079a4b 114
YuuichiAkagawa 0:b4815a079a4b 115 u = to_be32(u);
YuuichiAkagawa 0:b4815a079a4b 116 return set_buffer((uint8_t*)&u, sizeof(uint32_t));
YuuichiAkagawa 0:b4815a079a4b 117 }
YuuichiAkagawa 0:b4815a079a4b 118
YuuichiAkagawa 0:b4815a079a4b 119 bool uMP::set_u64(uint64_t u)
YuuichiAkagawa 0:b4815a079a4b 120 {
YuuichiAkagawa 0:b4815a079a4b 121 if (!set_buffer((uint8_t)TAG_U64)) {
YuuichiAkagawa 0:b4815a079a4b 122 return false;
YuuichiAkagawa 0:b4815a079a4b 123 }
YuuichiAkagawa 0:b4815a079a4b 124
YuuichiAkagawa 0:b4815a079a4b 125 u = to_be64(u);
YuuichiAkagawa 0:b4815a079a4b 126 return set_buffer((uint8_t*)&u, sizeof(uint64_t));
YuuichiAkagawa 0:b4815a079a4b 127 }
YuuichiAkagawa 0:b4815a079a4b 128
YuuichiAkagawa 0:b4815a079a4b 129 bool uMP::set_sint(int32_t i)
YuuichiAkagawa 0:b4815a079a4b 130 {
YuuichiAkagawa 0:b4815a079a4b 131 if (i >=0) {
YuuichiAkagawa 0:b4815a079a4b 132 return set_uint((uint32_t)i);
YuuichiAkagawa 0:b4815a079a4b 133 }
YuuichiAkagawa 0:b4815a079a4b 134 if (i >= -32) {
YuuichiAkagawa 0:b4815a079a4b 135 return set_buffer((uint8_t)i);
YuuichiAkagawa 0:b4815a079a4b 136 }
YuuichiAkagawa 0:b4815a079a4b 137 if (i >= -128) {
YuuichiAkagawa 0:b4815a079a4b 138 return set_s8(i);
YuuichiAkagawa 0:b4815a079a4b 139 }
YuuichiAkagawa 0:b4815a079a4b 140 if (i >= -32768) {
YuuichiAkagawa 0:b4815a079a4b 141 return set_s16(i);
YuuichiAkagawa 0:b4815a079a4b 142 }
YuuichiAkagawa 0:b4815a079a4b 143 if (i >= -2147483648) {
YuuichiAkagawa 0:b4815a079a4b 144 return set_s32(i);
YuuichiAkagawa 0:b4815a079a4b 145 }
YuuichiAkagawa 0:b4815a079a4b 146 return false;
YuuichiAkagawa 0:b4815a079a4b 147 }
YuuichiAkagawa 0:b4815a079a4b 148
YuuichiAkagawa 0:b4815a079a4b 149 bool uMP::set_s8(int8_t i)
YuuichiAkagawa 0:b4815a079a4b 150 {
YuuichiAkagawa 0:b4815a079a4b 151 if (!set_buffer((uint8_t)TAG_S8)) {
YuuichiAkagawa 0:b4815a079a4b 152 return false;
YuuichiAkagawa 0:b4815a079a4b 153 }
YuuichiAkagawa 0:b4815a079a4b 154 return set_buffer((uint8_t)i);
YuuichiAkagawa 0:b4815a079a4b 155 }
YuuichiAkagawa 0:b4815a079a4b 156
YuuichiAkagawa 0:b4815a079a4b 157 bool uMP::set_s16(int16_t i)
YuuichiAkagawa 0:b4815a079a4b 158 {
YuuichiAkagawa 0:b4815a079a4b 159 if (!set_buffer((uint8_t)TAG_S16)) {
YuuichiAkagawa 0:b4815a079a4b 160 return false;
YuuichiAkagawa 0:b4815a079a4b 161 }
YuuichiAkagawa 0:b4815a079a4b 162
YuuichiAkagawa 0:b4815a079a4b 163 i = to_be16(i);
YuuichiAkagawa 0:b4815a079a4b 164 return set_buffer((uint8_t*)&i, sizeof(int16_t));
YuuichiAkagawa 0:b4815a079a4b 165 }
YuuichiAkagawa 0:b4815a079a4b 166
YuuichiAkagawa 0:b4815a079a4b 167 bool uMP::set_s32(int32_t i)
YuuichiAkagawa 0:b4815a079a4b 168 {
YuuichiAkagawa 0:b4815a079a4b 169 if (!set_buffer((uint8_t)TAG_S32)) {
YuuichiAkagawa 0:b4815a079a4b 170 return false;
YuuichiAkagawa 0:b4815a079a4b 171 }
YuuichiAkagawa 0:b4815a079a4b 172
YuuichiAkagawa 0:b4815a079a4b 173 i = to_be32(i);
YuuichiAkagawa 0:b4815a079a4b 174 return set_buffer((uint8_t*)&i, sizeof(int32_t));
YuuichiAkagawa 0:b4815a079a4b 175 }
YuuichiAkagawa 0:b4815a079a4b 176
YuuichiAkagawa 0:b4815a079a4b 177 bool uMP::set_s64(int64_t i)
YuuichiAkagawa 0:b4815a079a4b 178 {
YuuichiAkagawa 0:b4815a079a4b 179 if (!set_buffer((uint8_t)TAG_S64)) {
YuuichiAkagawa 0:b4815a079a4b 180 return false;
YuuichiAkagawa 0:b4815a079a4b 181 }
YuuichiAkagawa 0:b4815a079a4b 182
YuuichiAkagawa 0:b4815a079a4b 183 i = to_be64(i);
YuuichiAkagawa 0:b4815a079a4b 184 return set_buffer((uint8_t*)&i, sizeof(int64_t));
YuuichiAkagawa 0:b4815a079a4b 185 }
YuuichiAkagawa 0:b4815a079a4b 186
YuuichiAkagawa 0:b4815a079a4b 187 bool uMP::set_str(const char *data, uint32_t size)
YuuichiAkagawa 0:b4815a079a4b 188 {
YuuichiAkagawa 0:b4815a079a4b 189 if (size <= 0x1f) {
YuuichiAkagawa 0:b4815a079a4b 190 return set_fixstr(data, size);
YuuichiAkagawa 0:b4815a079a4b 191 }
YuuichiAkagawa 0:b4815a079a4b 192 if (size <= 0xff) {
YuuichiAkagawa 0:b4815a079a4b 193 return set_str8(data, size);
YuuichiAkagawa 0:b4815a079a4b 194 }
YuuichiAkagawa 0:b4815a079a4b 195 return false;
YuuichiAkagawa 0:b4815a079a4b 196 }
YuuichiAkagawa 0:b4815a079a4b 197
YuuichiAkagawa 0:b4815a079a4b 198 bool uMP::set_fixstr(const char *data, uint8_t size)
YuuichiAkagawa 0:b4815a079a4b 199 {
YuuichiAkagawa 0:b4815a079a4b 200 if (size > 0x1f) {
YuuichiAkagawa 0:b4815a079a4b 201 return false;
YuuichiAkagawa 0:b4815a079a4b 202 }
YuuichiAkagawa 0:b4815a079a4b 203 if (!set_buffer((uint8_t)(TAG_FIXSTR | size))) {
YuuichiAkagawa 0:b4815a079a4b 204 return false;
YuuichiAkagawa 0:b4815a079a4b 205 }
YuuichiAkagawa 0:b4815a079a4b 206 if (!set_buffer((uint8_t*)data, size)) {
YuuichiAkagawa 0:b4815a079a4b 207 return false;
YuuichiAkagawa 0:b4815a079a4b 208 }
YuuichiAkagawa 0:b4815a079a4b 209 return true;
YuuichiAkagawa 0:b4815a079a4b 210 }
YuuichiAkagawa 0:b4815a079a4b 211
YuuichiAkagawa 0:b4815a079a4b 212 bool uMP::set_str8(const char *data, uint8_t size)
YuuichiAkagawa 0:b4815a079a4b 213 {
YuuichiAkagawa 0:b4815a079a4b 214 if (size > 0xff) {
YuuichiAkagawa 0:b4815a079a4b 215 return false;
YuuichiAkagawa 0:b4815a079a4b 216 }
YuuichiAkagawa 0:b4815a079a4b 217 if (!set_buffer((uint8_t)TAG_STR8)) {
YuuichiAkagawa 0:b4815a079a4b 218 return false;
YuuichiAkagawa 0:b4815a079a4b 219 }
YuuichiAkagawa 0:b4815a079a4b 220 if (!set_buffer((uint8_t)size)) {
YuuichiAkagawa 0:b4815a079a4b 221 return false;
YuuichiAkagawa 0:b4815a079a4b 222 }
YuuichiAkagawa 0:b4815a079a4b 223 if (!set_buffer((uint8_t*)data, size)) {
YuuichiAkagawa 0:b4815a079a4b 224 return false;
YuuichiAkagawa 0:b4815a079a4b 225 }
YuuichiAkagawa 0:b4815a079a4b 226 return true;
YuuichiAkagawa 0:b4815a079a4b 227 }
YuuichiAkagawa 0:b4815a079a4b 228
YuuichiAkagawa 0:b4815a079a4b 229 bool uMP::set_raw(const char *data, uint8_t size)
YuuichiAkagawa 0:b4815a079a4b 230 {
YuuichiAkagawa 0:b4815a079a4b 231 if (!set_buffer((uint8_t*)data, size)) {
YuuichiAkagawa 0:b4815a079a4b 232 return false;
YuuichiAkagawa 0:b4815a079a4b 233 }
YuuichiAkagawa 0:b4815a079a4b 234 return true;
YuuichiAkagawa 0:b4815a079a4b 235 }
YuuichiAkagawa 0:b4815a079a4b 236
YuuichiAkagawa 0:b4815a079a4b 237 bool uMP::set_float(float f)
YuuichiAkagawa 0:b4815a079a4b 238 {
YuuichiAkagawa 0:b4815a079a4b 239 if (!set_buffer((uint8_t)TAG_FLOAT32)) {
YuuichiAkagawa 0:b4815a079a4b 240 return false;
YuuichiAkagawa 0:b4815a079a4b 241 }
YuuichiAkagawa 0:b4815a079a4b 242 f = to_be32(f);
YuuichiAkagawa 0:b4815a079a4b 243 if (!set_buffer((uint8_t*)&f, sizeof(float))) {
YuuichiAkagawa 0:b4815a079a4b 244 return false;
YuuichiAkagawa 0:b4815a079a4b 245 }
YuuichiAkagawa 0:b4815a079a4b 246 return true;
YuuichiAkagawa 0:b4815a079a4b 247 }
YuuichiAkagawa 0:b4815a079a4b 248
YuuichiAkagawa 0:b4815a079a4b 249 bool uMP::set_double(double d)
YuuichiAkagawa 0:b4815a079a4b 250 {
YuuichiAkagawa 0:b4815a079a4b 251 if (!set_buffer((uint8_t)TAG_FLOAT64)) {
YuuichiAkagawa 0:b4815a079a4b 252 return false;
YuuichiAkagawa 0:b4815a079a4b 253 }
YuuichiAkagawa 0:b4815a079a4b 254 d = to_be64(d);
YuuichiAkagawa 0:b4815a079a4b 255 if (!set_buffer((uint8_t*)&d, sizeof(double))) {
YuuichiAkagawa 0:b4815a079a4b 256 return false;
YuuichiAkagawa 0:b4815a079a4b 257 }
YuuichiAkagawa 0:b4815a079a4b 258 return true;
YuuichiAkagawa 0:b4815a079a4b 259 }
YuuichiAkagawa 0:b4815a079a4b 260
YuuichiAkagawa 0:b4815a079a4b 261 bool uMP::set_buffer(const uint8_t c)
YuuichiAkagawa 0:b4815a079a4b 262 {
YuuichiAkagawa 0:b4815a079a4b 263 //buffer overflow?
YuuichiAkagawa 0:b4815a079a4b 264 if ( _ptr == _nbuf) {
YuuichiAkagawa 0:b4815a079a4b 265 return false;
YuuichiAkagawa 0:b4815a079a4b 266 }
YuuichiAkagawa 0:b4815a079a4b 267 *(_buf+_ptr) = c;
YuuichiAkagawa 0:b4815a079a4b 268 _ptr++;
YuuichiAkagawa 0:b4815a079a4b 269 return true;
YuuichiAkagawa 0:b4815a079a4b 270 }
YuuichiAkagawa 0:b4815a079a4b 271
YuuichiAkagawa 0:b4815a079a4b 272 bool uMP::set_buffer(const uint8_t *c, size_t size)
YuuichiAkagawa 0:b4815a079a4b 273 {
YuuichiAkagawa 0:b4815a079a4b 274 //buffer overflow?
YuuichiAkagawa 0:b4815a079a4b 275 if ( (_ptr+size) > _nbuf) {
YuuichiAkagawa 0:b4815a079a4b 276 return false;
YuuichiAkagawa 0:b4815a079a4b 277 }
YuuichiAkagawa 0:b4815a079a4b 278 while (size--) {
YuuichiAkagawa 0:b4815a079a4b 279 *(_buf+_ptr) = *c++;
YuuichiAkagawa 0:b4815a079a4b 280 _ptr++;
YuuichiAkagawa 0:b4815a079a4b 281 }
YuuichiAkagawa 0:b4815a079a4b 282 return true;
YuuichiAkagawa 0:b4815a079a4b 283 }
YuuichiAkagawa 0:b4815a079a4b 284
YuuichiAkagawa 0:b4815a079a4b 285 //ByteOrder
YuuichiAkagawa 0:b4815a079a4b 286 template<typename T> T uMP::to_be16(T t)
YuuichiAkagawa 0:b4815a079a4b 287 {
YuuichiAkagawa 0:b4815a079a4b 288 uint16_t *x = (uint16_t *)&t;
YuuichiAkagawa 0:b4815a079a4b 289 *x = __REV16(*x);
YuuichiAkagawa 0:b4815a079a4b 290 return t;
YuuichiAkagawa 0:b4815a079a4b 291 }
YuuichiAkagawa 0:b4815a079a4b 292
YuuichiAkagawa 0:b4815a079a4b 293 template<typename T> T uMP::to_be32(T t)
YuuichiAkagawa 0:b4815a079a4b 294 {
YuuichiAkagawa 0:b4815a079a4b 295 uint32_t *x = (uint32_t *)&t;
YuuichiAkagawa 0:b4815a079a4b 296 *x = __REV(*x);
YuuichiAkagawa 0:b4815a079a4b 297 return t;
YuuichiAkagawa 0:b4815a079a4b 298 }
YuuichiAkagawa 0:b4815a079a4b 299
YuuichiAkagawa 0:b4815a079a4b 300 template<typename T> T uMP::to_be64(T t)
YuuichiAkagawa 0:b4815a079a4b 301 {
YuuichiAkagawa 0:b4815a079a4b 302 uint32_t *x = (uint32_t *)&t;
YuuichiAkagawa 0:b4815a079a4b 303 uint32_t h = __REV(*x);
YuuichiAkagawa 0:b4815a079a4b 304 uint32_t l = __REV(*(x+1));
YuuichiAkagawa 0:b4815a079a4b 305 //swap
YuuichiAkagawa 0:b4815a079a4b 306 *x = l;
YuuichiAkagawa 0:b4815a079a4b 307 *(x+1) = h;
YuuichiAkagawa 0:b4815a079a4b 308 return t;
YuuichiAkagawa 0:b4815a079a4b 309 }