#![allow(non_snake_case)]
#![allow(non_upper_case_globals)] #![allow(dead_code)]
use std::io::Write;
use crate::ported::memorymeter::MemoryMeter_class;
use crate::ported::meter::{
Meter, MeterClass, MeterModeId, Meter_class, Meter_new, Meter_setMode, BAR_METERMODE,
METERMODE_DEFAULT_SUPPORTED,
};
use crate::ported::object::ObjectClass;
use crate::ported::swapmeter::SwapMeter_class;
struct MemorySwapMeterData {
memoryMeter: Meter,
swapMeter: Meter,
}
impl MemorySwapMeterData {
fn of(this: &mut Meter) -> &mut MemorySwapMeterData {
this.meterData
.as_mut()
.and_then(|d| d.downcast_mut::<MemorySwapMeterData>())
.expect("MemorySwap meter: meterData is not an initialized MemorySwapMeterData")
}
}
pub fn MemorySwapMeter_updateValues(this: &mut Meter) {
let data = MemorySwapMeterData::of(this);
let mem_uv = data
.memoryMeter
.updateValues
.expect("MemorySwapMeter_updateValues: memory sub-meter updateValues");
mem_uv(&mut data.memoryMeter);
let swap_uv = data
.swapMeter
.updateValues
.expect("MemorySwapMeter_updateValues: swap sub-meter updateValues");
swap_uv(&mut data.swapMeter);
}
pub fn MemorySwapMeter_draw(out: &mut dyn Write, this: &mut Meter, x: i32, y: i32, w: i32) {
let colwidth = w / 2;
let diff = w % 2;
let data = MemorySwapMeterData::of(this);
let mem_draw = data
.memoryMeter
.draw
.expect("MemorySwapMeter_draw: memory sub-meter draw");
mem_draw(&mut *out, &mut data.memoryMeter, x, y, colwidth);
let swap_draw = data
.swapMeter
.draw
.expect("MemorySwapMeter_draw: swap sub-meter draw");
swap_draw(
&mut *out,
&mut data.swapMeter,
x + colwidth + diff,
y,
colwidth,
);
}
pub fn MemorySwapMeter_init(this: &mut Meter) {
if this.meterData.is_none() {
let host = this.host;
this.meterData = Some(Box::new(MemorySwapMeterData {
memoryMeter: Meter_new(host, 0, &MemoryMeter_class),
swapMeter: Meter_new(host, 0, &SwapMeter_class),
}));
}
}
pub fn MemorySwapMeter_updateMode(this: &mut Meter, mode: MeterModeId) {
this.mode = mode;
let data = MemorySwapMeterData::of(this);
Meter_setMode(&mut data.memoryMeter, mode);
Meter_setMode(&mut data.swapMeter, mode);
let h = data.memoryMeter.h.max(data.swapMeter.h);
this.h = h;
}
pub fn MemorySwapMeter_done(this: &mut Meter) {
this.meterData = None;
}
pub static MemorySwapMeter_class: MeterClass = MeterClass {
super_: ObjectClass {
extends: Some(&Meter_class.super_),
},
display: None,
init: Some(MemorySwapMeter_init),
done: Some(MemorySwapMeter_done),
updateMode: Some(MemorySwapMeter_updateMode),
updateValues: Some(MemorySwapMeter_updateValues),
draw: Some(MemorySwapMeter_draw),
getCaption: None,
getUiName: None,
defaultMode: BAR_METERMODE,
supportedModes: METERMODE_DEFAULT_SUPPORTED,
total: 0.0,
attributes: &[],
name: "MemorySwap",
uiName: "Memory & Swap",
caption: "M&S",
description: Some("Combined memory and swap usage"),
maxItems: 0,
isMultiColumn: true,
isPercentChart: false,
};