Skip to content

Instantly share code, notes, and snippets.

View segfo's full-sized avatar

segfo segfo

View GitHub Profile
@segfo
segfo / printDisplay_for_Vec8.rs
Last active November 4, 2017 04:02
newtypeパターンでVec<u8>にDisplayトレイトを実装する
// 既存の型への自作trait以外の実装については
// newtypeパターンでないと実装できないらしい
// いろいろな制約があるとのこと、このあたりは知らん。
use std::fs::File;
use std::io::prelude::*;
use std::fmt;
use std::fmt::Formatter;
// 型を新しく定義する(newtype)
@segfo
segfo / file_partial_read.rs
Last active October 31, 2017 13:35
部分的にファイルを読み取る
use std::fs::File;
use std::io::prelude::*;
fn main(){
let mut file = File::open("src/main.rs").unwrap();
// ベクタを使ってread_to_endしているのはヒープに直接ぶち込みたいから。
// スタックに制約がない場合は、普通の配列を初期化してでもOK
// 5回繰り返す。
for i in 0..5{
let mut buf = Vec::<u8>::new();
@segfo
segfo / orig_error.rs
Created September 23, 2017 02:13
自作エラー(FFIで受け取ったり定義したり)とRustで定義されているエラーを混在させて"println!({},e)"する
use std::io;
use std::fmt::Display;
use std::fmt::Formatter;
// オレオレエラー列挙体
#[derive(Debug)]
enum myError{
RustError(io::Error),
FileError(myFileError),
SocketError(mySocketError)
@segfo
segfo / abstractionTest.rs
Created August 9, 2017 14:09
トレイトで抽象化
use std::io::{BufReader,BufWriter,BufRead,Read,Write};
use std::net::{TcpListener, TcpStream};
use std::fs::File;
use std::io::prelude::*;
// WriteトレイトとReadトレイトを実装しているSugoiTraitを実装すると
trait SugoiTrait:Write+Read{
}
// TCPストリームも
impl SugoiTrait for std::net::TcpStream{
@segfo
segfo / min_max.rs
Created August 2, 2017 14:54
最小値、最大値を取得
macro_rules! max {
($x:expr) => ( $x );
($x:expr, $($xs:expr),+) => {
{
use std::cmp::max;
max($x, max!( $($xs),+ ))
}
};
}
@segfo
segfo / hsv2rgb.rs
Created August 1, 2017 22:31
HSVからRGBに色を変換
struct RGB{
r:u8,
g:u8,
b:u8
}
impl RGB{
fn new()->Self{
Self{
r:0,
#include<stdio.h>
#include<stdlib.h>
#include<stdint.h>
typedef struct testVtbl{
int hoihoi[10];
void (*start)(void);
void (*end)(void);
}TestVTbl;
@segfo
segfo / crossref_struct.c
Last active March 11, 2018 06:14
相互参照する構造体の書き方
// タグ名だけ書く。
struct Context;
// ステートを管理するためのContext構造体を引数に持ってコールバックを呼びたい
// 例えば非同期関数がエラーだった時とかのコールバックや
// オブザーバーパターンを実装するときとかによく使うやつ。
typedef struct Callback
{
uintmax_t state; //状態の保存
void (*onError)(struct Context* ctx); //ここでContextを渡す関数ポインタを定義する
#include<stdio.h>
int main(){
// 例のテーブル
char tbl[]={
0x4,0xb2,0xf,0x47,0x33,0x84,0x7f,0xdd,0x44,0xbd,0xd6,0x98,0xad,
0x83,0xd3,0x34,0x23,0xa1,0x65,0x88,0x73,0xdb,0x95,0xf0
};
// randで生成される数値列を固定する
srand(0);
@segfo
segfo / dupDel.py
Created January 14, 2017 02:19
重複したものを削除
#!/usr/bin/env python
#-*- coding: utf-8 -*-
a = ["abc","def","cdf","abc","abb"]
b = ["abc","def","cdf","abb","zbjl","klgjh","43whyur"]
def dupDel(seq):
seen = set()
seen_add = seen.add