From 16b712e0233cfd7b60668927067885f7e3551b92 Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Sat, 25 Dec 2021 18:07:25 +0100 Subject: rename os/object to object --- src/os/object/cpp_helpers.cc | 9 -- src/os/object/framebuffer.cc | 151 -------------------------- src/os/object/outputstream.cc | 247 ------------------------------------------ src/os/object/xdr16input.cc | 104 ------------------ src/os/object/xdr16stream.cc | 164 ---------------------------- src/os/object/xdrinput.cc | 94 ---------------- src/os/object/xdrstream.cc | 166 ---------------------------- 7 files changed, 935 deletions(-) delete mode 100644 src/os/object/cpp_helpers.cc delete mode 100644 src/os/object/framebuffer.cc delete mode 100644 src/os/object/outputstream.cc delete mode 100644 src/os/object/xdr16input.cc delete mode 100644 src/os/object/xdr16stream.cc delete mode 100644 src/os/object/xdrinput.cc delete mode 100644 src/os/object/xdrstream.cc (limited to 'src/os') diff --git a/src/os/object/cpp_helpers.cc b/src/os/object/cpp_helpers.cc deleted file mode 100644 index 59e1e97..0000000 --- a/src/os/object/cpp_helpers.cc +++ /dev/null @@ -1,9 +0,0 @@ -/* - * Copyright 2020 Daniel Friesel - * - * SPDX-License-Identifier: BSD-2-Clause - */ -extern "C" void __cxa_pure_virtual() -{ - //while (1); -} diff --git a/src/os/object/framebuffer.cc b/src/os/object/framebuffer.cc deleted file mode 100644 index e7b914d..0000000 --- a/src/os/object/framebuffer.cc +++ /dev/null @@ -1,151 +0,0 @@ -#include "object/framebuffer.h" - -#ifdef MULTIPASS_ARCH_arduino_nano -#include -#endif - -#ifdef CONFIG_framebuffer_in_text_segment -__attribute__ ((section(".text"))) -#endif -static unsigned char framebuffer[(unsigned long int)CONFIG_framebuffer_width * (unsigned long int)CONFIG_framebuffer_height / 8]; - -void Framebuffer::clear() -{ - for (unsigned int i = 0; i < width * (height / 8); i++) { - data[i] = 0; - } -} - -void Framebuffer::fillBox(unsigned int x, unsigned int y, unsigned int w, unsigned int h) -{ - if (w == 0 || h == 0) { - return; - } - w -= 1; - h -= 1; - if ((x+w) >= width || (y+h) >= height) { - return; - } - - unsigned int x1 = (height/8)*x; - unsigned int x2 = (height/8)*(x+w); - unsigned int y2 = height-1-y; - unsigned int y1 = y2-h; - unsigned char y2_mask = 0xff << (8 - (y2 % 8)); // bits from 0 to y2%8 must be filled - unsigned char y1_mask = 0xff >> (y1 % 8); // bits from y1%8 to 7 must be filled - y1 = y1/8; - y2 = y2/8; - - if (y1 == y2) { - // y1_mask and y2_mask overlap - for (unsigned int pos_x = x1; pos_x < x2; pos_x += height/8) { - data[pos_x + y1] |= y1_mask & y2_mask; - } - } else { - if (y1_mask != 0xff) { - for (unsigned int pos_x = x1; pos_x < x2; pos_x += height/8) { - data[pos_x + y1] |= y1_mask; - } - y1++; - } - for (unsigned int pos_x = x1; pos_x < x2; pos_x += height/8) { - for (unsigned int pos_y = y1; pos_y < y2; pos_y++) { - data[pos_x + pos_y] = 0xff; - } - } - if (y2_mask) { - for (unsigned int pos_x = x1; pos_x < x2; pos_x += height/8) { - data[pos_x + y2] |= y2_mask; - } - } - } -} - -void Framebuffer::drawAt(unsigned int x, unsigned int y, unsigned int w, unsigned int h, unsigned char *image) -{ - y /= 8; - for (unsigned int pos_x = 0; pos_x < w; pos_x++) { - for (unsigned int pos_y = 0; pos_y < h/8; pos_y++) { - data[(x + pos_x) * (height/8) + y + pos_y] = image[pos_x * (h/8) + pos_y]; - } - } -} - -void Framebuffer::drawBattery(unsigned int x, unsigned int y, unsigned char percent, bool charging) -{ - for (unsigned char i = 0; i < 13; i++) { - data[(x+i) * (height/8) + y] = 0x81 | (0xff * (percent*2 >= i*15)); - } - data[(x+11) * (height/8) + y/8] |= 0xe7; - data[(x+12) * (height/8) + y/8] &= ~0x81; - data[(x+12) * (height/8) + y/8] |= 0x24; - data[(x+13) * (height/8) + y/8] = 0x3c; - - if (charging) { - data[(x+2) * (height/8) + y/8] ^= 0x7e; - data[(x+3) * (height/8) + y/8] ^= 0x3c; - data[(x+4) * (height/8) + y/8] ^= 0x18; - data[(x+7) * (height/8) + y/8] ^= 0x7e; - data[(x+8) * (height/8) + y/8] ^= 0x3c; - data[(x+9) * (height/8) + y/8] ^= 0x18; - } -} - -void Framebuffer::scroll() -{ - for (unsigned int pos_x = 0; pos_x < width; pos_x++) { - for (unsigned int pos_y = fontSize; pos_y < height/8; pos_y++) { - data[pos_x * (height/8) + pos_y - fontSize] = data[pos_x * (height/8) + pos_y]; - } - for (unsigned int pos_y = 1; pos_y <= fontSize; pos_y++) { - data[pos_x * (height/8) + height/8 - pos_y] = 0; - } - } - if (fontY >= 8*fontSize) { - fontY -= 8*fontSize; - } -} - -void Framebuffer::put(char c) -{ - if (font == 0) { - return; - } - if (c == '\n') { - fontX = 0; - fontY += 8*fontSize; - return; - } - if ((c < 32) || (c > 126)) { - c = '?'; - } -#ifdef MULTIPASS_ARCH_arduino_nano - uint8_t *glyph_addr = (uint8_t *)pgm_read_ptr(&font[c - 32]); - const unsigned char glyph_w = pgm_read_byte(&glyph_addr[0]); -#else - glyph_t glyph = font[c - 32]; - const unsigned char glyph_w = glyph[0]; -#endif - - if (fontX + glyph_w + 1 >= width) { - put('\n'); - } - if (fontY + 8*fontSize > height) { - scroll(); - } - for (unsigned char i = 0; i < glyph_w; i++) { - unsigned char x = i / fontSize; - unsigned char y = i % fontSize; -#ifdef MULTIPASS_ARCH_arduino_nano - data[(height/8) * (fontX + x) + fontY/8 + y] = pgm_read_byte(&glyph_addr[i+1]); -#else - data[(height/8) * (fontX + x) + fontY/8 + y] = glyph[i+1]; -#endif - } - for (unsigned char i = 0; i < fontSize; i++) { - data[(height/8) * (fontX + glyph_w + 1) + fontY/8] = 0; - } - fontX += (glyph_w / fontSize) + 2; -} - -Framebuffer fb(framebuffer); diff --git a/src/os/object/outputstream.cc b/src/os/object/outputstream.cc deleted file mode 100644 index 3960a3e..0000000 --- a/src/os/object/outputstream.cc +++ /dev/null @@ -1,247 +0,0 @@ -/* - * Copyright 2020 Daniel Friesel - * - * SPDX-License-Identifier: BSD-2-Clause - */ -#include "object/outputstream.h" - -OutputStream & OutputStream::operator<<(unsigned char c) -{ - *this << (unsigned long long)c; - return *this; -} - -OutputStream & OutputStream::operator<<(char c) -{ - put(c); - return *this; -} - -OutputStream & OutputStream::operator<<(unsigned short number) -{ - *this << (unsigned long long)number; - return *this; -} - -OutputStream & OutputStream::operator<<(short number) -{ - *this << (long long)number; - return *this; -} - -OutputStream & OutputStream::operator<<(unsigned int number) -{ - *this << (unsigned long long)number; - return *this; -} - -OutputStream & OutputStream::operator<<(int number) -{ - *this << (long long)number; - return *this; -} - -OutputStream & OutputStream::operator<<(unsigned long number) -{ - *this << (unsigned long long)number; - return *this; -} - -OutputStream & OutputStream::operator<<(long number) -{ - *this << (long long)number; - return *this; -} - -OutputStream & OutputStream::operator<<(unsigned long long number) -{ - switch (base) { - case 2: - put('0'); - put('b'); - break; - case 8: - put('0'); - break; - case 16: - if (number < 16) { - put('0'); - } - break; - } - - if (number == 0) { - put('0'); - return *this; - } - - signed int i = 0; - while (number > 0) { - if (base == 16 && number % base > 9) { - digit_buffer[i] = 'a' + (number % base) - 10; - } else { - digit_buffer[i] = '0' + (number % base); - } - number /= base; - i++; - } - i--; - for (; i >= 0; i--) { - put(digit_buffer[i]); - } - return *this; - -} - -OutputStream & OutputStream::operator<<(long long number) -{ - if (number < 0) { - put('-'); - number *= -1; - } - *this << (unsigned long long)number; - - return *this; -} - -OutputStream & OutputStream::operator<<(double number) -{ - *this << (float)number; - return *this; -} - -OutputStream & OutputStream::operator<<(float number) -{ - printf_float(number); - return *this; -} - -OutputStream & OutputStream::operator<<(void *pointer) -{ - unsigned char temp_base = base; - *this << hex << (long)pointer; - switch (temp_base) { - case 2: - *this << bin; break; - case 8: - *this << oct; break; - case 10: - *this << dec; break; - } - return *this; -} - -OutputStream & OutputStream::operator<<(const char *text) -{ - int i = 0; - while (text[i] != '\0') { - put(text[i++]); - } - return *this; -} - -OutputStream & OutputStream::operator<<(OutputStream & (*fkt) (OutputStream &)) -{ - return fkt(*this); -} - -#ifdef CONFIG_ostream -OutputStream & OutputStream::operator<<(std::string s) -{ - for (auto c : s) { - put(c); - } - return *this; -} -#endif - -void OutputStream::setBase(uint8_t b) -{ - if (b == 2 || b == 8 || b == 10 || b == 16) { - base = b; - } -} - -static inline char format_hex_nibble(uint8_t num) -{ - if (num > 9) { - return 'a' + num - 10; - } - return '0' + num; -} - -void OutputStream::printf_uint8(uint8_t num) -{ - put(format_hex_nibble(num / 16)); - put(format_hex_nibble(num % 16)); -} - -void OutputStream::printf_float(float num) -{ - if (num < 0) { - put('-'); - num *= -1; - } - if (num > 1000) { - put('0' + (((unsigned int)num % 10000) / 1000)); - } - if (num > 100) { - put('0' + (((unsigned int)num % 1000) / 100)); - } - if (num > 10) { - put('0' + (((unsigned int)num % 100) / 10)); - } - put('0' + ((unsigned int)num % 10)); - put('.'); - put('0' + ((unsigned int)(num * 10) % 10)); - put('0' + ((unsigned int)(num * 100) % 10)); -} - -OutputStream & flush(OutputStream & os) -{ - os.flush(); - return os; -} - -OutputStream & endl(OutputStream & os) -{ - os.put('\n'); - os.flush(); - return os; -} - -OutputStream & bin(OutputStream & os) -{ - os.setBase(2); - return os; -} - -OutputStream & oct(OutputStream & os) -{ - os.setBase(8); - return os; -} - -OutputStream & dec(OutputStream & os) -{ - os.setBase(10); - return os; -} - -OutputStream & hex(OutputStream & os) -{ - os.setBase(16); - return os; -} - -OutputStream & term(OutputStream & os) -{ - os.put('\0'); - os.flush(); - return os; -} - -OutputStream::OutputStream() -{ - base = 10; -} diff --git a/src/os/object/xdr16input.cc b/src/os/object/xdr16input.cc deleted file mode 100644 index 2247c29..0000000 --- a/src/os/object/xdr16input.cc +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright 2020 Daniel Friesel - * - * SPDX-License-Identifier: BSD-2-Clause - */ -#include "object/xdr16input.h" - -uint16_t XDRInput::get_uint16() -{ - uint32_t ret = ((uint8_t)data[pos]<<8) | (uint8_t)data[pos+1]; - pos += 2; - return ret; -} - -int16_t XDRInput::get_int16() -{ - int32_t ret = (data[pos]<<8) | data[pos+1]; - pos += 2; - return ret; -} - -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; -} - -float XDRInput::get_float() -{ - union { - uint32_t i; - float f; - } v; - v.i = get_uint32(); - return v.f; -} - -double XDRInput::get_double() -{ - union { - uint64_t i; - double d; - } v; - v.i = get_uint64(); - return v.d; -} - -uint16_t XDRInput::get_opaque_length() -{ - return get_uint16(); -} - -char *XDRInput::get_opaque(uint16_t length) -{ - char *ret = data + pos; - pos += length; - if (length % 2) { - pos += 2 - (length % 2); - } - return ret; -} - -void XDRInput::get_string(char* target) -{ - uint16_t length = get_opaque_length(); - uint16_t i; - for (i = 0; i < length; i++) { - target[i] = data[pos + i]; - } - target[i] = 0; - pos += length; - if (length % 2) { - pos += 2 - (length % 2); - } -} diff --git a/src/os/object/xdr16stream.cc b/src/os/object/xdr16stream.cc deleted file mode 100644 index 7f2a414..0000000 --- a/src/os/object/xdr16stream.cc +++ /dev/null @@ -1,164 +0,0 @@ -/* - * Copyright 2020 Daniel Friesel - * - * SPDX-License-Identifier: BSD-2-Clause - */ -#include "object/xdr16stream.h" - -XDRStream & XDRStream::operator<<(unsigned char c) -{ - *this << (uint16_t)c; - return *this; -} - -XDRStream & XDRStream::operator<<(char c) -{ - *this << (int16_t)c; - return *this; -} - -XDRStream & XDRStream::operator<<(uint16_t number) -{ - put((number >> 8) & 0xffU); - put(number & 0xffU); - return *this; -} - -XDRStream & XDRStream::operator<<(int16_t number) -{ - put((number >> 8) & 0xffU); - put(number & 0xffU); - return *this; -} - -XDRStream & XDRStream::operator<<(uint32_t number) -{ - put((number >> 24) & 0xffU); - put((number >> 16) & 0xffU); - put((number >> 8) & 0xffU); - put(number & 0xffU); - return *this; -} - -XDRStream & XDRStream::operator<<(int32_t number) -{ - put((number >> 24) & 0xffU); - put((number >> 16) & 0xffU); - put((number >> 8) & 0xffU); - put(number & 0xffU); - return *this; -} - -XDRStream & XDRStream::operator<<(uint64_t number) -{ - put((number >> 56) & 0xffU); - put((number >> 48) & 0xffU); - put((number >> 40) & 0xffU); - put((number >> 32) & 0xffU); - put((number >> 24) & 0xffU); - put((number >> 16) & 0xffU); - put((number >> 8) & 0xffU); - put(number & 0xffU); - return *this; -} - -XDRStream & XDRStream::operator<<(int64_t number) -{ - put((number >> 56) & 0xffU); - put((number >> 48) & 0xffU); - put((number >> 40) & 0xffU); - put((number >> 32) & 0xffU); - put((number >> 24) & 0xffU); - put((number >> 16) & 0xffU); - put((number >> 8) & 0xffU); - put(number & 0xffU); - return *this; -} - -XDRStream & XDRStream::operator<<(float number) -{ - union { - uint32_t i; - float f; - } v; - v.f = number; - *this << v.i; - return *this; -} - -XDRStream & XDRStream::operator<<(double number) -{ - union { - uint64_t i; - double d; - } v; - v.d = number; - *this << v.i; - return *this; -} - -XDRStream & XDRStream::operator<<(char const *data){ - if (!is_fixed_length) { - *this << next_array_len; - } - uint32_t i; - for (i = 0; i < next_array_len; i++) { - put(data[i]); - } - while ((i++) % 2 != 0){ - put('\0'); - } - return *this; -} - -template -XDRStream & XDRStream::operator<<(char const (&data)[TSize]){ - if (!is_fixed_length) { - *this << TSize; - } - uint32_t i; - for (i = 0; i < TSize; i++) { - put(data[i]); - } - while ((i++) % 2 != 0){ - put('\0'); - } - return *this; -} - -XDRStream & XDRStream::operator<<(XDRStream & (*fkt) (XDRStream &)) -{ - return fkt(*this); -} - -XDRStream & flush(XDRStream & os) -{ - os.flush(); - return os; -} - -XDRStream & term(XDRStream & os) -{ - os.put('\0'); - os.flush(); - return os; -} - -template -XDRStream & opaque(XDRStream & os) -{ - os.setNextArrayLen(N); - return os; -} - -XDRStream & fixed(XDRStream & os) -{ - os.setFixedLength(); - return os; -} - -XDRStream & variable(XDRStream & os) -{ - os.setVariableLength(); - return os; -} diff --git a/src/os/object/xdrinput.cc b/src/os/object/xdrinput.cc deleted file mode 100644 index c98c110..0000000 --- a/src/os/object/xdrinput.cc +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright 2020 Daniel Friesel - * - * SPDX-License-Identifier: BSD-2-Clause - */ -#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; -} - -float XDRInput::get_float() -{ - union { - uint32_t i; - float f; - } v; - // Setting one member of a union and then reading another is undefined - // behaviour, but works as intended in nearly any (embedded) compiler - v.i = get_uint32(); - return v.f; -} - -double XDRInput::get_double() -{ - union { - uint64_t i; - double d; - } v; - // Setting one member of a union and then reading another is undefined - // behaviour, but works as intended in nearly any (embedded) compiler - v.i = get_uint64(); - return v.d; -} - -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; -} - -void XDRInput::get_string(char* target) -{ - uint16_t length = get_opaque_length(); - uint16_t i; - for (i = 0; i < length; i++) { - target[i] = data[pos + i]; - } - target[i] = 0; - pos += length; - if (length % 4) { - pos += 4 - (length % 4); - } -} diff --git a/src/os/object/xdrstream.cc b/src/os/object/xdrstream.cc deleted file mode 100644 index 9dc5a1b..0000000 --- a/src/os/object/xdrstream.cc +++ /dev/null @@ -1,166 +0,0 @@ -/* - * Copyright 2020 Daniel Friesel - * - * SPDX-License-Identifier: BSD-2-Clause - */ -#include "object/xdrstream.h" - -XDRStream & XDRStream::operator<<(unsigned char c) -{ - *this << (uint32_t)c; - return *this; -} - -XDRStream & XDRStream::operator<<(char c) -{ - *this << (int32_t)c; - return *this; -} - -XDRStream & XDRStream::operator<<(uint16_t number) -{ - *this << (uint32_t)number; - return *this; -} - -XDRStream & XDRStream::operator<<(int16_t number) -{ - *this << (int32_t)number; - return *this; -} - -XDRStream & XDRStream::operator<<(uint32_t number) -{ - put((number >> 24) & 0xffU); - put((number >> 16) & 0xffU); - put((number >> 8) & 0xffU); - put(number & 0xffU); - return *this; -} - -XDRStream & XDRStream::operator<<(int32_t number) -{ - put((number >> 24) & 0xffU); - put((number >> 16) & 0xffU); - put((number >> 8) & 0xffU); - put(number & 0xffU); - return *this; -} - -XDRStream & XDRStream::operator<<(uint64_t number) -{ - put((number >> 56) & 0xffU); - put((number >> 48) & 0xffU); - put((number >> 40) & 0xffU); - put((number >> 32) & 0xffU); - put((number >> 24) & 0xffU); - put((number >> 16) & 0xffU); - put((number >> 8) & 0xffU); - put(number & 0xffU); - return *this; -} - -XDRStream & XDRStream::operator<<(int64_t number) -{ - put((number >> 56) & 0xffU); - put((number >> 48) & 0xffU); - put((number >> 40) & 0xffU); - put((number >> 32) & 0xffU); - put((number >> 24) & 0xffU); - put((number >> 16) & 0xffU); - put((number >> 8) & 0xffU); - put(number & 0xffU); - return *this; -} - -XDRStream & XDRStream::operator<<(float number) -{ - union { - uint32_t i; - float f; - } v; - // Setting one member of a struct and then reading another is undefined - // behaviour, but works as intended in nearly any (embedded) compiler - v.f = number; - *this << v.i; - return *this; -} - -XDRStream & XDRStream::operator<<(double number) -{ - union { - uint64_t i; - double d; - } v; - // Setting one member of a union and then reading another is undefined - // behaviour, but works as intended in nearly any (embedded) compiler - v.d = number; - *this << v.i; - return *this; -} - -XDRStream & XDRStream::operator<<(char const *data){ - if (!is_fixed_length) { - *this << next_array_len; - } - uint32_t i; - for (i = 0; i < next_array_len; i++) { - put(data[i]); - } - while ((i++) % 4 != 0){ - put('\0'); - } - return *this; -} - -template -XDRStream & XDRStream::operator<<(char const (&data)[TSize]){ - if (!is_fixed_length) { - *this << TSize; - } - uint32_t i; - for (i = 0; i < TSize; i++) { - put(data[i]); - } - while ((i++) % 4 != 0){ - put('\0'); - } - return *this; -} - -XDRStream & XDRStream::operator<<(XDRStream & (*fkt) (XDRStream &)) -{ - return fkt(*this); -} - -XDRStream & flush(XDRStream & os) -{ - os.flush(); - return os; -} - -XDRStream & term(XDRStream & os) -{ - os.put('\0'); - os.flush(); - return os; -} - -template -XDRStream & opaque(XDRStream & os) -{ - os.setNextArrayLen(N); - return os; -} - -XDRStream & fixed(XDRStream & os) -{ - os.setFixedLength(); - return os; -} - -XDRStream & variable(XDRStream & os) -{ - os.setVariableLength(); - return os; -} -- cgit v1.2.3