This commit is contained in:
azw 2023-10-29 10:11:51 +00:00
parent 1add5d9388
commit c22ee46299
5 changed files with 8 additions and 8 deletions

View File

@ -1,7 +1,7 @@
use std::rc::{Rc, Weak}; use std::rc::{Rc, Weak};
use std::cell::RefCell; use std::cell::RefCell;
use std::thread::sleep; use std::thread::sleep;
use std::time::{Duration, SystemTime}; use std::time::Duration;
use r9_macro::SharedFromSelf; use r9_macro::SharedFromSelf;
use r9_macro_derive::SharedFromSelf; use r9_macro_derive::SharedFromSelf;
@ -60,7 +60,7 @@ impl App {
} }
pub fn run(&mut self) { pub fn run(&mut self) {
while true { loop {
crate::Timer::instance().borrow_mut().update(); crate::Timer::instance().borrow_mut().update();
sleep(Duration::from_secs(1)); sleep(Duration::from_secs(1));
} }

View File

@ -1,7 +1,7 @@
use std::rc::{Rc, Weak}; use std::rc::{Rc, Weak};
use std::any::Any; use std::any::Any;
use std::cell::RefCell; use std::cell::RefCell;
use std::time::{Duration, Instant}; use std::time::{Instant};
use r9::xtimer::{TimerCb, XTimerWp, XTimerAttacherRp, TimerEvent}; use r9::xtimer::{TimerCb, XTimerWp, XTimerAttacherRp, TimerEvent};
use r9_macro::SharedFromSelf; use r9_macro::SharedFromSelf;
use r9_macro_derive::SharedFromSelf; use r9_macro_derive::SharedFromSelf;

View File

@ -2,7 +2,7 @@ use std::rc::{Rc, Weak};
use std::cell::RefCell; use std::cell::RefCell;
use std::any::Any; use std::any::Any;
use std::cmp; use std::cmp;
use std::time::{Duration, Instant}; use std::time::{Instant};
use r9_macro::SharedFromSelf; use r9_macro::SharedFromSelf;
use r9_macro_derive::SharedFromSelf; use r9_macro_derive::SharedFromSelf;

View File

@ -15,5 +15,4 @@ pub trait SharedFromSelf {
} }
pub trait Singleton { pub trait Singleton {
fn instance() -> Rc::<RefCell::<Self>>;
} }

View File

@ -42,10 +42,10 @@ pub fn singleton_derive(input: TokenStream) -> TokenStream {
fn impl_singleton_macro(ast: &syn::DeriveInput) -> TokenStream { fn impl_singleton_macro(ast: &syn::DeriveInput) -> TokenStream {
let name = &ast.ident; let name = &ast.ident;
let (impl_generics, _, _) = ast.generics.split_for_impl(); let (_, _, _) = ast.generics.split_for_impl();
let gen = quote! { let gen = quote! {
impl #impl_generics Singleton for #name #impl_generics { impl #name {
fn instance() -> Rc::<RefCell::<Self>> { pub fn instance() -> Rc::<RefCell::<Self>> {
static mut _INSTANCE: Option<Rc::<RefCell::<#name>>> = None; static mut _INSTANCE: Option<Rc::<RefCell::<#name>>> = None;
unsafe { unsafe {
match &_INSTANCE { match &_INSTANCE {
@ -63,5 +63,6 @@ fn impl_singleton_macro(ast: &syn::DeriveInput) -> TokenStream {
} }
} }
}; };
//println!("{}", gen);
gen.into() gen.into()
} }