/* * \brief Textual output functions * \author Norman Feske * \date 2016-05-03 */ /* * Copyright (C) 2016-2017 Genode Labs GmbH * * This file is part of the Genode OS framework, which is distributed * under the terms of the GNU Affero General Public License version 3. */ /* Genode includes */ #include /* base-internal includes */ #include using namespace Genode; /************ ** Output ** ************/ void Output::out_string(char const *str, size_t n) { if (!str) return; while (*str && n--) out_char(*str++); } /****************************** ** Print function overloads ** ******************************/ void Genode::print(Output &output, char const *str) { if (!str) output.out_string(""); else while (*str) output.out_char(*str++); } void Genode::print(Output &output, void const *ptr) { print(output, Hex(reinterpret_cast(ptr))); } void Genode::print(Output &output, unsigned long value) { out_unsigned(value, 10, 0, [&] (char c) { output.out_char(c); }); } void Genode::print(Output &output, unsigned long long value) { out_unsigned(value, 10, 0, [&] (char c) { output.out_char(c); }); } void Genode::print(Output &output, long value) { out_signed(value, 10, [&] (char c) { output.out_char(c); }); } void Genode::print(Output &output, long long value) { out_signed(value, 10, [&] (char c) { output.out_char(c); }); } void Genode::print(Output &output, float value) { out_float(value, 10, 3, [&] (char c) { output.out_char(c); }); } void Genode::print(Output &output, double value) { out_float(value, 10, 6, [&] (char c) { output.out_char(c); }); } void Genode::Hex::print(Output &output) const { if (_prefix == Hex::PREFIX) output.out_string("0x"); size_t const pad_len = (_pad == Hex::PAD) ? _digits : 0; /* mask possible sign-extension bits */ unsigned long long mask = 0; for (size_t i = 0; i < _digits; ++i) mask = (mask << 4) | 0xf; out_unsigned(_value & mask, 16, pad_len, [&] (char c) { output.out_char(c); }); }