package.lisp @ 6aeaaa9a56bf

Vendorize quickutils
author Steve Losh <steve@stevelosh.com>
date Sun, 18 Sep 2016 12:50:38 +0000
parents 1475bc2740d2
children ee7247080256
(defpackage #:losh.internal
  (:use #:cl))

(in-package #:losh.internal)

(eval-when (:compile-toplevel :load-toplevel :execute)
  (defun external-symbols (package)
    (let ((symbols nil))
      (do-external-symbols (s (find-package package) symbols)
        (push s symbols)))))

(defmacro defpackage-inheriting (name parent-packages &rest args)
  `(defpackage ,name
     ,@args
     ,@(loop :for parent-package :in parent-packages
             :collect
             `(:use ,parent-package)
             :collect
             `(:export ,@(external-symbols parent-package)))))


(defpackage #:losh.math
  (:documentation "Utilities related to math and numbers.")
  (:export
    #:tau
    #:square
    #:dividesp
    #:norm
    #:lerp
    #:precise-lerp
    #:map-range
    #:clamp))

(defpackage #:losh.random
  (:documentation "Utilities related to randomness.")
  (:export
    #:randomp
    #:random-elt
    #:random-range
    #:random-range-exclusive
    #:random-around
    #:random-gaussian
    #:random-gaussian-integer
    #:d))

(defpackage #:losh.functions
  (:documentation "Utilities for working with higher-order functions.")
  (:export
    #:juxt
    #:nullary))

(defpackage #:losh.control-flow
  (:documentation "Utilities for managing control flow.")
  (:export
    #:recursively
    #:recur
    #:when-found
    #:if-found
    #:gathering
    #:gather))

(defpackage #:losh.mutation
  (:documentation "Utilities for mutating places in-place.")
  (:export
    #:zapf
    #:%
    #:mulf
    #:divf
    #:modf
    #:remainderf
    #:clampf
    #:negatef
    #:notf
    #:callf))

(defpackage #:losh.lists
  (:documentation "Utilities related to lists.")
  (:export
    #:take))

(defpackage #:losh.arrays
  (:documentation "Utilities related to arrays.")
  (:export
    #:do-array
    #:fill-multidimensional-array
    #:fill-multidimensional-array-t
    #:fill-multidimensional-array-fixnum
    #:fill-multidimensional-array-single-float))

(defpackage #:losh.queues
  (:documentation "A simple queue implementation.")
  (:export
    #:queue
    #:make-queue
    #:queue-contents
    #:queue-size
    #:queue-empty-p
    #:enqueue
    #:dequeue
    #:queue-append))

(defpackage #:losh.iterate
  (:use #:iterate) ; need this for iterate's `for` symbol fuckery
  (:documentation "Custom `iterate` drivers and clauses.")
  (:export
    #:pairs-of-list
    #:averaging
    #:into
    #:timing
    #:since-start-into
    #:per-iteration-into
    #:real-time
    #:run-time
    #:in-lists
    #:in-sequences
    #:in-whatever
    #:in-array
    #:across-flat-array
    #:index-of-flat-array
    #:cycling
    #:for-nested
    #:within-radius
    #:skip-origin))

(defpackage #:losh.distributions
  (:documentation "Utilities for calculating statistical... things.")
  (:export
    #:prefix-sums
    #:frequencies))

(defpackage #:losh.hash-sets
  (:documentation "A simple hash set implementation.")
  (:export
    #:hash-set
    #:make-set
    #:set-contains-p
    #:set-empty-p
    #:set-add
    #:set-add-all
    #:set-remove
    #:set-remove-all
    #:set-clear
    #:set-random
    #:set-pop))

(defpackage #:losh.debugging
  (:documentation "Utilities for figuring out what the hell is going on.")
  (:export
    #:pr
    #:bits
    #:shut-up
    #:dis))

(defpackage #:losh.weightlists
  (:documentation
    "A simple data structure for choosing random items with weighted probabilities.")
  (:export
    #:weightlist
    #:weightlist-weights
    #:weightlist-items
    #:make-weightlist
    #:weightlist-random))

(defpackage #:losh.eldritch-horrors
  (:documentation "Abandon all hope, ye who enter here.")
  (:export
    #:dlambda
    #:define-with-macro))


(defpackage-inheriting #:losh
  (#:losh.arrays
   #:losh.control-flow
   #:losh.debugging
   #:losh.distributions
   #:losh.eldritch-horrors
   #:losh.functions
   #:losh.hash-sets
   #:losh.iterate
   #:losh.lists
   #:losh.math
   #:losh.mutation
   #:losh.queues
   #:losh.random
   #:losh.weightlists)
  (:use
    #:cl
    #:iterate
    #:losh.quickutils)
  (:documentation
    "This package exports all of the symbols in the other packages.

  If you just want to get everything you can `:use` this one and be done with
  it.  Otherwise you can `:use` only the ones you need.

  "))


;;;; Remember to add it to the docs!