Skip to content

Commit

Permalink
release 13 to 15
Browse files Browse the repository at this point in the history
  • Loading branch information
0xBoji committed Sep 1, 2024
1 parent 5cd41f2 commit 532b21b
Show file tree
Hide file tree
Showing 12 changed files with 222 additions and 65 deletions.
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[package]
name = "180daysofrust"
name = "_180daysofrust"
version = "0.1.0"
edition = "2021"

Expand Down
19 changes: 18 additions & 1 deletion src/day01_to_day03/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,21 @@ pub mod loops;
pub mod structs;
pub mod conditionals;
pub mod enums;
pub mod pointer_ref;
pub mod pointer_ref;

pub fn run() {
println!("Days 1-3: Getting Started");
print::run();
strings::run();
functions::run();
types::run();
arrays::run();
vars::run();
cli::run();
vectors::run();
loops::run();
structs::run();
conditionals::run();
enums::run();
pointer_ref::run();
}
7 changes: 7 additions & 0 deletions src/day04_to_day06/mod.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
pub mod shadowing;
pub mod ownership;
pub mod borrowing;

pub fn run() {
println!("Days 4-6: Understanding Ownership");
shadowing::run();
ownership::run();
borrowing::run();
}
12 changes: 11 additions & 1 deletion src/day07_to_day09/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,14 @@ pub mod linear_search;
pub mod binary_search;
pub mod bubble_sort;
pub mod palindrome_checker;
pub mod fibonacci_sequence;
pub mod fibonacci_sequence;

pub fn run() {
println!("Days 7-9: Common Collections");
fibonacci_sequence::run();
linear_search::run();
binary_search::run();
bubble_sort::run();
palindrome_checker::run();
fibonacci_sequence::run();
}
14 changes: 13 additions & 1 deletion src/day10_to_day12/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,16 @@ pub mod error_handling;
pub mod generics;
pub mod iterators;
pub mod lifetimes;
pub mod smart_pointers;
pub mod smart_pointers;
pub mod traits;

pub fn run() {
println!("Days 10-12: Advanced Rust Concepts");
closures::examples();
error_handling::examples();
generics::examples();
iterators::examples();
lifetimes::examples();
smart_pointers::examples();
traits::examples();
}
24 changes: 24 additions & 0 deletions src/day13_to_day15/advanced_concurrency.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
use std::sync::{Arc, Mutex};
use std::thread;

pub fn examples() {
println!("Advanced Concurrency Examples:");

let counter = Arc::new(Mutex::new(0));
let mut handles = vec![];

for _ in 0..10 {
let counter = Arc::clone(&counter);
let handle = thread::spawn(move || {
let mut num = counter.lock().unwrap();
*num += 1;
});
handles.push(handle);
}

for handle in handles {
handle.join().unwrap();
}

println!("Result: {}", *counter.lock().unwrap());
}
27 changes: 27 additions & 0 deletions src/day13_to_day15/advanced_lifetimes.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
pub fn examples() {
println!("Advanced Lifetimes Examples:");

let x = 5;
let r = &x;
print_ref(r);

let context = Context("context");
let parser = Parser { context: &context };
parser.parse("input");
}

fn print_ref<'a, T>(t: &'a T) where T: std::fmt::Debug + 'a {
println!("t: {:?}", t);
}

struct Context<'a>(&'a str);

struct Parser<'a> {
context: &'a Context<'a>,
}

impl<'a> Parser<'a> {
fn parse(&self, input: &str) {
println!("Parsing {} in context {}", input, self.context.0);
}
}
46 changes: 46 additions & 0 deletions src/day13_to_day15/advanced_traits.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
use std::ops::Add;

pub fn examples() {
println!("Advanced Traits Examples:");

// Associated types
let point1 = Point { x: 1, y: 0 };
let point2 = Point { x: 2, y: 3 };
let sum = point1 + point2;
println!("Sum of points: {:?}", sum);

// Default type parameters
let millimeters = Millimeters(100);
let meters = Meters(1);
let sum = millimeters + meters;
println!("Sum of lengths: {:?}", sum);
}

#[derive(Debug)]
struct Point {
x: i32,
y: i32,
}

impl Add for Point {
type Output = Point;

fn add(self, other: Point) -> Point {
Point {
x: self.x + other.x,
y: self.y + other.y,
}
}
}

#[derive(Debug)]
struct Millimeters(u32);
struct Meters(u32);

impl Add<Meters> for Millimeters {
type Output = Millimeters;

fn add(self, other: Meters) -> Millimeters {
Millimeters(self.0 + (other.0 * 1000))
}
}
29 changes: 29 additions & 0 deletions src/day13_to_day15/macros.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
macro_rules! say_hello {
() => {
println!("Hello!");
};
($name:expr) => {
println!("Hello, {}!", $name);
};
}

macro_rules! create_function {
($func_name:ident) => {
fn $func_name() {
println!("You called {:?}()", stringify!($func_name));
}
};
}

create_function!(foo);
create_function!(bar);

pub fn examples() {
println!("Macros Examples:");

say_hello!();
say_hello!("Alice");

foo();
bar();
}
14 changes: 14 additions & 0 deletions src/day13_to_day15/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
mod advanced_traits;
mod advanced_lifetimes;
mod unsafe_rust;
mod macros;
mod advanced_concurrency;

pub fn run() {
println!("Days 13-15: Advanced Rust Concepts");
advanced_traits::examples();
advanced_lifetimes::examples();
unsafe_rust::examples();
macros::examples();
advanced_concurrency::examples();
}
24 changes: 24 additions & 0 deletions src/day13_to_day15/unsafe_rust.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
pub fn examples() {
println!("Unsafe Rust Examples:");

let mut num = 5;

let r1 = &num as *const i32;
let r2 = &mut num as *mut i32;

unsafe {
println!("r1 is: {}", *r1);
println!("r2 is: {}", *r2);

*r2 = 10;
println!("r2 is now: {}", *r2);
}

unsafe {
dangerous();
}
}

unsafe fn dangerous() {
println!("This function is unsafe");
}
69 changes: 8 additions & 61 deletions src/main.rs
Original file line number Diff line number Diff line change
@@ -1,76 +1,23 @@
//Day 01 to day03
pub mod day01_to_day03;

use day01_to_day03::print;
use day01_to_day03::strings;
use day01_to_day03::functions;
use day01_to_day03::types;
use day01_to_day03::arrays;
use day01_to_day03::vars;
use day01_to_day03::cli;
use day01_to_day03::loops;
use day01_to_day03::vectors;
use day01_to_day03::structs;
use day01_to_day03::conditionals;
use day01_to_day03::enums;
use day01_to_day03::pointer_ref;

//Day04 to day06
pub mod day04_to_day06;
use day04_to_day06::shadowing;
use day04_to_day06::ownership;
use day04_to_day06::borrowing;


//Day 07 to day 09
pub mod day07_to_day09;
use day07_to_day09::fibonacci;
use day07_to_day09::linear_search;
use day07_to_day09::binary_search;
use day07_to_day09::bubble_sort;
use day07_to_day09::palindrome_checker;
use day07_to_day09::fibonacci_sequence;

//Day 10 to day 12
pub mod day10_to_day12;
use day10_to_day12::closures;
use day10_to_day12::error_handling;
use day10_to_day12::generics;
use day10_to_day12::iterators;
use day10_to_day12::lifetimes;
use day10_to_day12::smart_pointers;


mod day13_to_day15;

fn main() {
//Hello world in rust
// println!("Hello, world!");
// //Print from an another file!
// print::run();
// strings::run();
// functions::run();
// types::run();
// arrays::run();
// vars::run();
// cli::run();
// loops::run();
// vectors::run();
// structs::run();
// conditionals::run();
// enums::run();
// pointer_ref::run();
// shadowing::run();
// ownership::run();
// borrowing::run();
// fibonacci::run();
// linear_search::run();
// binary_search::run();
// bubble_sort::run();
// palindrome_checker::run();
// fibonacci_sequence::run();
// closures::run();
// error_handling::run();
// generics::run();
// iterators::run();
// lifetimes::run();
// smart_pointers::run();
// day01_to_day03::run();
// day04_to_day06::run();
// day07_to_day09::run();
// day10_to_day12::run();
day13_to_day15::run();

}

0 comments on commit 532b21b

Please sign in to comment.