84 lines
2.1 KiB
Rust
84 lines
2.1 KiB
Rust
|
|
//! Phase 88: Ring0 trait 定義
|
|||
|
|
//!
|
|||
|
|
//! OS API レイヤーの純粋な抽象化。
|
|||
|
|
//! Box 名・Nyash 型を一切知らない。
|
|||
|
|
|
|||
|
|
use super::errors::{IoError, TimeError};
|
|||
|
|
use std::time::SystemTime;
|
|||
|
|
|
|||
|
|
/// メモリ API(Phase 88: noop、将来 hakmem 接続)
|
|||
|
|
pub trait MemApi: Send + Sync {
|
|||
|
|
/// メモリ割り当て(Phase 88: 未実装)
|
|||
|
|
fn alloc(&self, size: usize) -> *mut u8;
|
|||
|
|
|
|||
|
|
/// メモリ解放(Phase 88: 未実装)
|
|||
|
|
fn free(&self, ptr: *mut u8);
|
|||
|
|
|
|||
|
|
/// メモリ統計(Phase 88: 未実装)
|
|||
|
|
fn stats(&self) -> MemStats;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// メモリ統計情報
|
|||
|
|
#[derive(Debug, Default, Clone)]
|
|||
|
|
pub struct MemStats {
|
|||
|
|
pub allocated: usize,
|
|||
|
|
pub freed: usize,
|
|||
|
|
pub current: usize,
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// IO API
|
|||
|
|
pub trait IoApi: Send + Sync {
|
|||
|
|
/// 標準出力への書き込み
|
|||
|
|
fn stdout_write(&self, data: &[u8]) -> Result<(), IoError>;
|
|||
|
|
|
|||
|
|
/// 標準エラー出力への書き込み
|
|||
|
|
fn stderr_write(&self, data: &[u8]) -> Result<(), IoError>;
|
|||
|
|
|
|||
|
|
/// 標準入力からの読み込み
|
|||
|
|
fn stdin_read(&self, buf: &mut [u8]) -> Result<usize, IoError>;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// 時刻 API
|
|||
|
|
pub trait TimeApi: Send + Sync {
|
|||
|
|
/// 現在時刻取得
|
|||
|
|
fn now(&self) -> Result<SystemTime, TimeError>;
|
|||
|
|
|
|||
|
|
/// モノトニック時刻取得(高精度タイマー用)
|
|||
|
|
fn monotonic_now(&self) -> Result<std::time::Instant, TimeError>;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// ログレベル
|
|||
|
|
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
|||
|
|
pub enum LogLevel {
|
|||
|
|
Debug,
|
|||
|
|
Info,
|
|||
|
|
Warn,
|
|||
|
|
Error,
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// ログ API
|
|||
|
|
pub trait LogApi: Send + Sync {
|
|||
|
|
/// ログ出力
|
|||
|
|
fn log(&self, level: LogLevel, msg: &str);
|
|||
|
|
|
|||
|
|
/// デバッグログ(便利メソッド)
|
|||
|
|
fn debug(&self, msg: &str) {
|
|||
|
|
self.log(LogLevel::Debug, msg);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// 情報ログ(便利メソッド)
|
|||
|
|
fn info(&self, msg: &str) {
|
|||
|
|
self.log(LogLevel::Info, msg);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// 警告ログ(便利メソッド)
|
|||
|
|
fn warn(&self, msg: &str) {
|
|||
|
|
self.log(LogLevel::Warn, msg);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// エラーログ(便利メソッド)
|
|||
|
|
fn error(&self, msg: &str) {
|
|||
|
|
self.log(LogLevel::Error, msg);
|
|||
|
|
}
|
|||
|
|
}
|