Added new functionality to Serial class

This commit is contained in:
OmniaX-Dev 2026-06-08 06:24:43 +02:00
parent 068adbe282
commit 08daf0cea1
5 changed files with 53 additions and 35 deletions

View file

@ -1 +1 @@
2091
2095

View file

@ -23,7 +23,7 @@
namespace ostd
{
void Memory::printByteStream(const ByteStream& data, StreamIndex start, u8 line_len, u16 n_rows, OutputHandlerBase& out, i32 addrHighlight, u32 highlightRange, const String& title)
void Memory::printByteStream(std::span<const i8> data, StreamIndex start, u8 line_len, u16 n_rows, OutputHandlerBase& out, i32 addrHighlight, u32 highlightRange, const String& title)
{
StreamIndex end = start + (n_rows * line_len);
if (end > data.size()) end = data.size();
@ -89,13 +89,13 @@ namespace ostd
out.nl().fg(ConsoleColors::BrightBlue).p(String::duplicateChar('=', linew)).nl().reset();
}
bool Memory::saveByteStreamToFile(const ByteStream& stream, const String& filePath)
bool Memory::saveByteStreamToFile(std::span<const i8> stream, const String& filePath)
{
std::ofstream writeFile;
writeFile.open(filePath.cpp_str(), std::ios::out | std::ios::binary);
writeFile.write((char*)(&stream[0]), stream.size());
writeFile.write((char*)(stream.data()), stream.size());
writeFile.close();
return true;
return writeFile.good();
}
bool Memory::loadByteStreamFromFile(const String& filePath, ByteStream& outStream)
@ -117,7 +117,7 @@ namespace ostd
return bstream;
}
String Memory::byteStreamToString(const ByteStream& data)
String Memory::byteStreamToString(std::span<const i8> data)
{
String out_string = "";
for (i64 i = 0; i < data.size(); i++)

View file

@ -32,11 +32,11 @@ namespace ostd
class Memory
{
public:
static void printByteStream(const ByteStream& data, StreamIndex start, u8 line_len, u16 n_rows, OutputHandlerBase& out, i32 addrHighlight = -1, u32 highlightRange = 1, const String& title = "");
static bool saveByteStreamToFile(const ByteStream& stream, const String& filePath);
static void printByteStream(std::span<const i8> data, StreamIndex start, u8 line_len, u16 n_rows, OutputHandlerBase& out, i32 addrHighlight = -1, u32 highlightRange = 1, const String& title = "");
static bool saveByteStreamToFile(std::span<const i8> stream, const String& filePath);
static bool loadByteStreamFromFile(const String& filePath, ByteStream& outStream);
static ByteStream stringToByteStream(const String& data);
static String byteStreamToString(const ByteStream& data);
static String byteStreamToString(std::span<const i8> data);
//Array helpers
template<typename T>

View file

@ -1,4 +1,5 @@
#include "Serial.hpp"
#include "Memory.hpp"
namespace ostd
{
@ -41,6 +42,14 @@ namespace ostd
Serial::Serial(StreamView copyData, serial::Endianness endianness) : read(*this), write(*this)
{
if (construct(copyData.size(), endianness, false) && isValid())
{
std::ranges::copy(copyData, m_data.data().begin());
}
}
bool Serial::construct(u64 size, serial::Endianness endianness, bool preInitialize, i8 initialValue)
{
if (m_data.isValid()) return false;
@ -63,6 +72,12 @@ namespace ostd
return (addr + size - 1) < m_data.size();
}
bool Serial::writeToFile(const String& filePath) const
{
if (!isValid()) return false;
return Memory::saveByteStreamToFile(m_data.data(), filePath);
}

View file

@ -21,6 +21,7 @@
#pragma once
#include <ostd/string/String.hpp>
// #include <ostd/io/Memory.hpp>
#include <span>
namespace ostd
@ -307,8 +308,10 @@ namespace ostd
public:
inline Serial(void) : read(*this), write(*this) { }
inline Serial(u64 size, serial::Endianness endianness = serial::Endianness::LittleEndian, bool preInitialize = false, i8 initialValue = 0) : read(*this), write(*this) { construct(size, endianness, preInitialize, initialValue); }
Serial(StreamView copyData, serial::Endianness endianness = serial::Endianness::LittleEndian);
bool construct(u64 size, serial::Endianness endianness = serial::Endianness::LittleEndian, bool preInitialize = false, i8 initialValue = 0);
bool isValidAddress(u64 addr, u32 size = 1) const;
bool writeToFile(const String& filePath) const;
inline bool isValid(void) const { return m_data.isValid(); }
inline bool isInvalid(void) const { return !isValid(); }