Skip to content

Instantly share code, notes, and snippets.

  1. First of all you need either Clang64 or MinGW64 MSYS2 environment
  2. You will probably need to install llvm and cmake: pacman -S install llvm cmake
  3. c3c: https://github.com/kvk1920/c3c
git clone https://github.com/kvk1920/c3c c3c_win_test
cd c3c_win_test
git checkout windows_compatibility
mkdir cmake-build
cd cmake-build
cmake .. -G "MinGW Makefiles"
template <typename T, size_t D = 1, bool Owner = true>
class TMatrix
{
public:
TMatrix(std::vector<size_t> n_)
: n(std::move(n_))
{
static_assert(Owner);
assert(n.size() == D - 1);
#include <iostream>
#include "sigslots.h"
using namespace std;
template <bool First = true, typename T, typename ...Args>
void Log(const T& t, const Args& ...args) {
cerr << t << ' ';
if constexpr (sizeof...(args))
Log<false>(args...);
//
// Created by kvk1920 on 21.07.18.
//
/**
*Слотов пока нет, но будут.
*/
#ifndef MYSTL_SIGSLOTS_H
#define MYSTL_SIGSLOTS_H
/*
В плюсах есть правило: в одно время не могут быть необработанны два исключения.
Тут будет происходить примерно следующее:
Деструтор class B будет кидать исключение.
В классе А будет поле В.
Функция f() создаст объект А и бросит исключение.
Исключение приведёт к вызову деструктора А, тот в свою очередь вызовет ~B(), а тот бросит ещё одно исключение.
И получим 2 необработанных исключениея одновременно, что приведёт к ваврийному завершению программы.
*/
template <typename Iterator, typename IteratorType>
struct __distance {
static typename std::iterator_traits<Iterator>::difference_type
f(Iterator l, Iterator r) {
typename std::iterator_traits<Iterator>::difference_type result(0);
while (l != r) {
++l;
++result;
}
return result;
template <typename Iterator, typename IteratorType>
struct __advance {
static Iterator f(Iterator it, int n) {
while (n > 0) { ++it; --n; }
while (n < 0) { --it; ++n; }
return it;
}
};
template <typename Iterator>
#include <iterator>
namespace Hard1 {
/**
* template<typename _Category, typename _Tp, typename _Distance = ptrdiff_t,
* typename _Pointer = _Tp*, typename _Reference = _Tp&>
* Это шаблон std::iterator.
* Т.к. insert-итераторы не указывают на объект какого-то типа, то _Tp следует сделать
* void.
@kvk1920
kvk1920 / task1(v1).cpp
Created March 26, 2018 19:12
Ломанный англо-саксонский + работает без дебаг-вывода в 1.5 раз дольше стандартного аллокатора. Ну и ещё могу сказать точно: аллокаторы копируются, в них можно хранить инфу. А ещё практика показала, что в качестве WORD лучше всего брать int или long.
#include <memory>
#include <iostream>
#include <fstream>
#include <list>
/*
* If function isn't safe, its name looks like a "__FunctionName"
*/
namespace VDebugTools {
#include <iostream>
template <typename Function>
inline void VRep(size_t n, Function f) {
for (size_t i(0); i < n; ++i)
f();
}
class {
private: