#pragma once
//!@file опирации смешивания для пикселей и конструктроов функций принта
#include "image-color.hpp"
#include "table/table-mul.hpp"
#include "table/table-mul-safe.hpp"
#include "table/table-add.hpp"
#include "table/table-add-safe.hpp"
#include "table/table-sub-safe.hpp"
#include "table/table-min.hpp"
#include "table/table-max.hpp"
#include "table/table-avr.hpp"
#include "table/table-and.hpp"
#include "table/table-or.hpp"
#include "table/table-blend158.hpp"
#include "table/table-diff.hpp"
#include "table/table-softlight.hpp"
#include "table/table-overlay.hpp"
#include "table/table-inv.hpp"
using blend_pf = void (*)(CN(Color) src, Color& dst); //! pointer 2 blend func
void blend_past(CN(Color) src, Color& dst) { dst = src; }
void blend_add_safe(CN(Color) src, Color& dst) { dst.val = table_add_safe[src.val][dst.val]; }
void blend_sub_safe(CN(Color) src, Color& dst) { dst.val = table_sub_safe[src.val][dst.val]; }
void blend_add(CN(Color) src, Color& dst) { dst.val = table_add[src.val][dst.val]; }
void blend_sub(CN(Color) src, Color& dst) { dst.val -= src.val; }
void blend_mul_safe(CN(Color) src, Color& dst) { dst.val = table_mul_safe[src.val][dst.val]; }
void blend_mul(CN(Color) src, Color& dst) { dst.val = table_mul[src.val][dst.val]; }
void blend_and(CN(Color) src, Color& dst) { dst.val = table_and[src.val][dst.val]; }
void blend_or (CN(Color) src, Color& dst) { dst.val = table_or [src.val][dst.val]; }
void blend_min(CN(Color) src, Color& dst) { dst.val = table_min[src.val][dst.val]; }
void blend_max(CN(Color) src, Color& dst) { dst.val = table_max[src.val][dst.val]; }
void blend_avr(CN(Color) src, Color& dst) { dst.val = table_avr[src.val][dst.val]; }
void blend_158(CN(Color) src, Color& dst) { dst.val = table_blend158[src.val][dst.val]; }
void blend_diff(CN(Color) src, Color& dst) { dst.val = table_diff[src.val][dst.val]; }
void blend_softlight(CN(Color) src, Color& dst) { dst.val = table_softlight[src.val][dst.val]; }
void blend_overlay(CN(Color) src, Color& dst) { dst.val = table_overlay[src.val][dst.val]; }
void blend_inv(Color& dst) { dst.val = table_inv[dst.val]; }