Skip to content

Instantly share code, notes, and snippets.

View Nekrolm's full-sized avatar

Dmitry Sviridkin Nekrolm

View GitHub Profile

Why unsafe is unsafe

Once I had seen this function. It was a nice function, but there is a problem

pub fn encode_logs(logs: impl IntoIterator<Item = impl AsRef<str>>) -> String {
    logs.into_iter().map(|line|
        line.as_ref()
            .replace("\\", "\\\\")
            .replace("\n", "\\n")
@Nekrolm
Nekrolm / input.txt
Created December 21, 2024 22:41
Rust Levenshtein otimizations?
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccc ddddddddddddddd eeeeeeeeeeeeeeeee ffffffffffffff ggggggggggg hhhhhhhhhhhhhhhhhhhhhhhhhhhhh iiiiiiiiiiiiiiiiiiiiiiiiiiiii jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk llllllllllllllllllllllllllllllllllllllllllllll mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn ooooooooooooooooooooooooooooooooo pppppppppppppppppppppppppppppppppppppppppp qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq rrrrrrrrrrrrrrrrrrrrrrrrrrrrr ssssssssssssssssssssssssssssss tttttttttttttttttttttttttt uuuuuuuuuuuuuuuuuuuuuuuuu vvvvvvvvvvvvvvvvvvvvvvvvvvvvv wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm 1234567890 QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm123456
@Nekrolm
Nekrolm / my_std_function.cpp
Created November 2, 2024 15:20
std::function type erasure example
#include <stdlib.h>
#include <cstdint>
#include <string>
#include <vector>
#include <map>
#include <iostream>
#include <functional>
#include <utility>
#include <memory>
@Nekrolm
Nekrolm / constexpr_maze_gen.cpp
Last active October 20, 2024 16:54
Constexpr Maze Generator C++23
// https://godbolt.org/z/hfcnTfaz8
#include <cstdint>
#include <array>
#include <cstddef>
#include <ranges>
#include <algorithm>
#include <utility>
#include <format>
#include <string_view>
#include <print>
@Nekrolm
Nekrolm / cpp23_options_list.cpp
Last active July 24, 2024 23:49
compile time boolean option list with C++23
#include <string>
#include <string_view>
#include <iostream>
#include <concepts>
void check_length(std::string_view sv)
{ std::cout << "check len\n"; }
void check_content(std::string_view sv)
{ std::cout << "check content\n"; }
@Nekrolm
Nekrolm / option.cpp
Created June 22, 2024 15:12
C++ optional with destructive move
// https://godbolt.org/z/cfE7sh3jT
#include <type_traits>
#include <utility>
#include <new>
#include <stdexcept>
#include <functional>
#include <print>
#include <string>
#include <vector>
@Nekrolm
Nekrolm / ugly_c_callback.md
Last active June 16, 2024 12:25
How to deal with ugly C callbacks

Мерзкий С-callback

Итак вы программист на высокоуровневых языках: Python, Java, C++ (прости господи)... И вот однажды вам, по долгу службы, выпадает необходимость взять и написать код на C/C++ с использованием прекрасной чистой C библиотеки... мы будем ее звать X.

В этой замечательной библиотеке есть функция

struct power_management_ctx_t; // opaque struct
@Nekrolm
Nekrolm / move_the_vector.md
Created January 14, 2024 00:05
How to move vectors of different types

Как перекладывают вектора

При работе над разными числодробилками, анализирующими последовательности, применяющими фильтры к картинкам, cчитающим свертки и проч, периодически возникает необходимость преобразовать массив целых чисел в массив чисел с плавающей точкой и наоборот.

На C++ это может выглядеть так

std::vector<float> to_floats(std::vector<int> input) {
    std::vector<float> result(input.size());
    std::transform(begin(input), end(input), begin(result), [](int x) -> float { return x; });
@Nekrolm
Nekrolm / magic_handlers.cpp
Created May 30, 2023 22:37
Magic handlers in C++20
#include <memory>
#include <type_traits>
#include <concepts>
#include <span>
#include <functional>
#include <iostream>
struct Context {
std::string_view body;
std::string_view headers;
@Nekrolm
Nekrolm / cxxconcept17.hpp
Last active November 23, 2020 15:22
cxxconcept17
#pragma once
#include <type_traits>
namespace cxxconcept17 {
namespace detail {
enum class RequiredE { kRequired = 0 };
}