/* Copyright (C) 2016-2020, Dirk Krause SPDX-License-Identifier: BSD-3-Clause */ /* WARNING: This file was generated by the dkct program (see http://dktools.sourceforge.net/ for details). Changes you make here will be lost if dkct is run again! You should modify the original source and run dkct on it. Original source: dk4strms.ctr */ /** @file dk4strms.c The dk4strms module. */ #line 242 "dk4strms.ctr" #include "dk4conf.h" #if DK4_HAVE_STRING_H #ifndef STRING_H_INCLUDED #include #define STRING_H_INCLUDED 1 #endif #endif #if DK4_HAVE_MATH_H #ifndef MATH_H_INCLUDED #if DK4_ON_WINDOWS #ifndef _USE_MATH_DEFINES #define _USE_MATH_DEFINES 1 #endif #endif #include #define MATH_H_INCLUDED 1 #endif #endif #if DK4_HAVE_ASSERT_H #ifndef ASSERT_H_INCLUDED #include #define ASSERT_H_INCLUDED 1 #endif #endif #include "dk4strms.h" #include "dk4mao8dbl.h" int dk4stream_serialize_u32(dk4_stream_t *strm, uint32_t u32, dk4_er_t *erp) { unsigned char buf[8]; int back = 0; #if DK4_USE_ASSERT assert(NULL != strm); #endif if (NULL != strm) { buf[0] = (unsigned char)( u32 & 0x000000FFUL); buf[1] = (unsigned char)((u32 >> 8) & 0x000000FFUL); buf[2] = (unsigned char)((u32 >> 16) & 0x000000FFUL); buf[3] = (unsigned char)((u32 >> 24) & 0x000000FFUL); back = dk4stream_write(strm, buf, 4, erp); } else { dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); } return back; } int dk4stream_serialize_i32(dk4_stream_t *strm, int32_t i32, dk4_er_t *erp) { #if DK4_USE_ASSERT assert(NULL != strm); #endif return ( dk4stream_serialize_u32(strm, (uint32_t)i32, erp) ); } int dk4stream_serialize_u16(dk4_stream_t *strm, uint16_t u16, dk4_er_t *erp) { unsigned char buf[8]; int back = 0; #if DK4_USE_ASSERT assert(NULL != strm); #endif if (NULL != strm) { buf[0] = (unsigned char)( u16 & 0x00FFU); buf[1] = (unsigned char)((u16 >> 8) & 0x00FFU); back = dk4stream_write(strm, buf, 2, erp); } else { dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); } return back; } int dk4stream_serialize_i16(dk4_stream_t *strm, int16_t i16, dk4_er_t *erp) { #if DK4_USE_ASSERT assert(NULL != strm); #endif return ( dk4stream_serialize_u16(strm, (uint16_t)i16, erp) ); } int dk4stream_serialize_u8(dk4_stream_t *strm, uint8_t u8, dk4_er_t *erp) { unsigned char uc; int back = 0; #if DK4_USE_ASSERT assert(NULL != strm); #endif if (NULL != strm) { uc = (unsigned char)u8; back = dk4stream_write(strm, &uc, 1, erp); } else { dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); } return back; } int dk4stream_serialize_i8(dk4_stream_t *strm, int8_t i8, dk4_er_t *erp) { #if DK4_USE_ASSERT assert(NULL != strm); #endif return ( dk4stream_serialize_u8(strm, (uint8_t)i8, erp) ); } int dk4stream_serialize_string(dk4_stream_t *strm, const char *str, dk4_er_t *erp) { size_t sl = 0; int back = 0; #if DK4_USE_ASSERT assert(NULL != strm); assert(NULL != str); #endif if ((NULL != strm) && (NULL != str)) { sl = strlen(str); if (((size_t)0xFFFFU) > sl) { sl++; if (0 < dk4stream_serialize_u16(strm, (uint16_t)sl, erp)) { back = dk4stream_write(strm, str, sl, erp); } else { /* ERROR: Failed to serialize string length already reported */ } } else { dk4error_set_simple_error_code(erp, DK4_E_BUFFER_TOO_SMALL); } } else { dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); } return back; } int dk4stream_serialize_double(dk4_stream_t *strm,double d,double e,dk4_er_t *erp) { char buf[16*sizeof(double)]; size_t szbuf = sizeof(buf); int back = 0; #if DK4_USE_ASSERT assert(NULL != strm); #endif if (NULL != strm) { if (fabs(d) < e) { back = dk4stream_serialize_u16(strm, (uint16_t)0U, erp); } else { if (0 < dk4ma_write_c8_double(buf, szbuf, d, 1, 1, erp)) { back = dk4stream_serialize_string(strm, buf, erp); } else { /* ##### ERROR: Failed to write double to string */ } } } else { dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); } return back; } int dk4stream_serialize_double_0(dk4_stream_t *strm, dk4_er_t *erp) { int back = 0; #if DK4_USE_ASSERT assert(NULL != strm); #endif if (NULL != strm) { back = dk4stream_serialize_u16(strm, 0U, erp); } else { dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); } return back; } /* vim: set ai sw=4 ts=4 : */