Skip to content

Instantly share code, notes, and snippets.

Avatar
🤦‍♂️

Sergey Bugaev bugaevc

🤦‍♂️
View GitHub Profile
View fun.cpp
#include <stdio.h>
#include <type_traits>
#include <utility>
#include <new>
template<typename T>
void forget1(T &&value) {
union Forget {
~Forget() { }
typename std::remove_reference<T>::type t;
@bugaevc
bugaevc / type_name.cpp
Created Jun 8, 2020
Get the name of a type as a string, at compile time
View type_name.cpp
#include <cstddef>
#include <iostream>
#include <string_view>
template<typename T>
static constexpr inline const char *helper1() {
// Must have the same signature as helper2().
return __PRETTY_FUNCTION__ + __builtin_strlen(__FUNCTION__);
}
@bugaevc
bugaevc / fork.swift
Created Oct 8, 2018
Calling fork() from Swift
View fork.swift
// Note: calling fork() can be unsafe and dangerous, that
// is why Swift doesn't let you invoke it directy. Be very
// careful about how you use fork(). For some more details,
// see https://www.evanjones.ca/fork-is-dangerous.html and
// http://www.sealiesoftware.com/blog/archive/2017/6/5/Objective-C_and_fork_in_macOS_1013.html
import Darwin
let RTLD_DEFAULT = UnsafeMutableRawPointer(bitPattern: -2)
let forkPtr = dlsym(RTLD_DEFAULT, "fork")
View obozrenie-rs.diff
diff --git a/src/main.rs b/src/main.rs
index ac542de..e40605d 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -16,12 +16,10 @@ use futures_timer::*;
use gio::prelude::*;
use gtk::prelude::*;
use librgs::ServerEntry;
-use static_resources::Resources;
use std::sync::{
@bugaevc
bugaevc / foo.cpp
Created Jul 8, 2018
clang rewrite objc
View foo.cpp
#ifndef __OBJC2__
#define __OBJC2__
#endif
struct objc_selector; struct objc_class;
struct __rw_objc_super {
struct objc_object *object;
struct objc_object *superClass;
__rw_objc_super(struct objc_object *o, struct objc_object *s) : object(o), superClass(s) {}
};
#ifndef _REWRITER_typedef_Protocol
View gist:1213017230377f2d23d0179a05118ffc
Mar 05 12:35:43 org.gnome.Shell.desktop[1659]: (EE)
Mar 05 12:35:43 org.gnome.Shell.desktop[1659]: (EE) Backtrace:
Mar 05 12:35:43 org.gnome.Shell.desktop[1659]: (EE) 0: /usr/bin/Xwayland (OsLookupColor+0x139) [0x5909c9]
Mar 05 12:35:43 org.gnome.Shell.desktop[1659]: (EE) 1: /lib64/libpthread.so.0 (__restore_rt+0x0) [0x7ffae328d5bf]
Mar 05 12:35:43 org.gnome.Shell.desktop[1659]: (EE) 2: /usr/bin/Xwayland (os_move_fd+0x2ca0) [0x599b40]
Mar 05 12:35:43 org.gnome.Shell.desktop[1659]: (EE) 3: /usr/bin/Xwayland (dri3_send_open_reply+0x6d) [0x4f123d]
Mar 05 12:35:43 org.gnome.Shell.desktop[1659]: (EE) 4: /usr/bin/Xwayland (InitExtensions+0x657) [0x42ab17]
Mar 05 12:35:43 org.gnome.Shell.desktop[1659]: (EE) 5: /lib64/libffi.so.6 (ffi_call_unix64+0x4c) [0x7ffae282ac58]
Mar 05 12:35:43 org.gnome.Shell.desktop[1659]: (EE) 6: /lib64/libffi.so.6 (ffi_call+0x32a) [0x7ffae282a6ba]
Mar 05 12:35:43 org.gnome.Shell.desktop[1659]: (EE) 7: /lib64/libwayland-client.so.0 (wl_log_set_handler_client+0x1c9e) [0x7ffae506e80e]
View rust_ex11.rs
fn the_longest<'a>(s1: &'a str, s2: &'a str) -> &'a str {
if s1.len() > s2.len() { s1 } else { s2 }
}
fn main() {
let s1 = String::from("Python");
// explicitly borrowing to ensure that
// the borrow lasts longer than s2 exists
let s1_b = &s1;
{
View rust_ex10.rs
fn search<'a, 'b>(needle: &'a str, haystack: &'b str) -> Option<&'b str> {
// imagine some clever algorithm here
// that returns a slice of the original string
let len = needle.len();
if haystack.chars().nth(0) == needle.chars().nth(0) {
Some(&haystack[..len])
} else if haystack.chars().nth(1) == needle.chars().nth(0) {
Some(&haystack[1..len+1])
} else {
None
View rust_ex9.rs
fn middle_name<'a>(full_name: &'a str) -> &'a str {
full_name.split_whitespace().nth(1).unwrap()
}
fn main() {
let name = String::from("Harry James Potter");
let res = middle_name(&name);
assert_eq!(res, "James");
// won't compile:
View rust_ex8.c
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
const char *last_name(const char *full_name)
{
return strrchr(full_name, ' ') + 1;
}
int main() {
You can’t perform that action at this time.