Skip to content

Instantly share code, notes, and snippets.

@Lovesan
Lovesan / float4-log.lisp
Created November 2, 2024 11:47
An example from upcoming SSE/AVX math library for SBCL(and maybe other implementations)
(definline %float4-log (v)
;; min-norm-pos is the smallest non denormalized float number
(let* ((min-norm-pos (float4! (int4 #x00800000)))
(inv-mant-mask (float4! (int4 (lognot #x7f800000))))
(cephes-sqrthf (float4 +0.707106781186547524d0))
(cephes-log-p0 (float4 +7.0376836292d-2))
(cephes-log-p1 (float4 -1.1514610310d-1))
(cephes-log-p2 (float4 +1.1676998740d-1))
(cephes-log-p3 (float4 -1.2420140846d-1))
(cephes-log-p4 (float4 +1.4249322787d-1))
@Lovesan
Lovesan / excel-interop.lisp
Created February 22, 2024 21:45
Excel interop using bike library
(eval-when (:compile-toplevel :load-toplevel :execute)
(unless (find-package 'bike)
(ql:quickload 'bike)))
(named-readtables:in-readtable bike:bike-syntax)
(bike:use-namespace 'System)
;; The below is required to overcome internal bike optimizations related to property retrieval,
;; which utilize Type.GetProperty internally, which does not work for COM objects.
;; Note that you should also use bike:reflection-invoke instead of invoke, for the same reasons.
@Lovesan
Lovesan / cbrf.lisp
Created January 25, 2024 21:04
Exchange rates & converter using russian central bank API
;;;; -*- Mode: lisp; indent-tabs-mode: nil -*-
;;; Copyright (C) 2024, Dmitry Ignatiev <lovesan.ru at gmail.com>
;;; Permission is hereby granted, free of charge, to any person
;;; obtaining a copy of this software and associated documentation
;;; files (the "Software"), to deal in the Software without
;;; restriction, including without limitation the rights to use, copy,
;;; modify, merge, publish, distribute, sublicense, and/or sell copies
;;; of the Software, and to permit persons to whom the Software is
@Lovesan
Lovesan / IEnumerable.lisp
Created October 10, 2023 14:26
IEnumerable and IReadOnlyCollection<> implementation using bike library
(define-dotnet-callable-class (sequence-enumerator
(:interfaces (IEnumerator :object))) ()
"An implementation of IEnumerator<object> for CL sequences."
(parent :initform nil :initarg :parent :reader se-parent)
(seq :initform '() :initarg :sequence :reader se-sequence)
(idx :initform -1 :reader se-index)
(:property current :object :initform nil :reader se-current
:documentation "An element at current enumerator index")
(:defmethod move-next :bool ()
#overall:
#gmp
#mpfr
#mpc
#isl
#binutils
#mingw-w64
#gcc
#zlib (optional, only native)
using namespace System.IO;
$ErrorActionPreference = 'Stop'
function VideoToGif{
Param(
[Parameter(Mandatory=$true)][string] $InFile,
[Parameter(Mandatory=$true)][string] $OutFile,
[int]$Width=320,
[int]$Height=-1,
[double]$Start=0.0,
(set-macro-character #\→ (lambda (s c)
(declare (ignore s c))
(error "Unexpected '→'")))
(set-macro-character #\λ
(lambda (s c)
(declare (ignore c))
(loop :with arg = (read s t nil t)
:for next = (peek-char t s t nil t)
:until (eql next #\→)
@Lovesan
Lovesan / call_ec.js
Created March 27, 2020 08:37
call/ec implemented in JS
function call_ec(f) {
var tag = new EvalError('Continuation block no loger exists');
try {
f(function(rv) {
tag.rv = rv;
throw tag;
});
} catch(obj) {
if(obj === tag) {
return tag.rv;
@Lovesan
Lovesan / simd-pack-single.lisp
Last active March 15, 2022 05:05
SBCL SSE operations on single-float vectors
(in-package #:sb-vm)
(eval-when (:compile-toplevel :load-toplevel :execute)
(defknown %m128+ ((simd-pack single-float) (simd-pack single-float))
(simd-pack single-float)
(movable foldable flushable always-translatable)
:overwrite-fndb-silently t)
(define-vop (%m128+)
@Lovesan
Lovesan / get-active-object.lisp
Last active March 7, 2020 01:57
usage of bike and cffi libraries for instantiation of active COM objects
(eval-when (:compile-toplevel :load-toplevel :execute)
(cffi:define-foreign-library oleaut32
(t "oleaut32.dll"))
(cffi:use-foreign-library oleaut32))
(cffi:defcfun ("GetActiveObject"
%get-active-object
:library oleaut32