51 lines
979 B
Rust
51 lines
979 B
Rust
use super::*;
|
|
|
|
#[repr(transparent)]
|
|
pub struct BasicString(*const u16);
|
|
|
|
impl BasicString {
|
|
pub fn is_empty(&self) -> bool {
|
|
self.len() == 0
|
|
}
|
|
|
|
pub fn len(&self) -> usize {
|
|
if self.0.is_null() {
|
|
0
|
|
} else {
|
|
unsafe { SysStringLen(self.0) as usize }
|
|
}
|
|
}
|
|
|
|
pub fn as_wide(&self) -> &[u16] {
|
|
let len = self.len();
|
|
if len != 0 {
|
|
unsafe { core::slice::from_raw_parts(self.as_ptr(), len) }
|
|
} else {
|
|
&[]
|
|
}
|
|
}
|
|
|
|
pub fn as_ptr(&self) -> *const u16 {
|
|
if !self.is_empty() {
|
|
self.0
|
|
} else {
|
|
const EMPTY: [u16; 1] = [0];
|
|
EMPTY.as_ptr()
|
|
}
|
|
}
|
|
}
|
|
|
|
impl Default for BasicString {
|
|
fn default() -> Self {
|
|
Self(core::ptr::null_mut())
|
|
}
|
|
}
|
|
|
|
impl Drop for BasicString {
|
|
fn drop(&mut self) {
|
|
if !self.0.is_null() {
|
|
unsafe { SysFreeString(self.0) }
|
|
}
|
|
}
|
|
}
|