utils.lisp 994 B

1234567891011121314151617181920212223242526272829303132333435
  1. (in-package :cl-user)
  2. (defpackage #:assboard.utils
  3. (:use :cl)
  4. (:export
  5. #:+project-path+
  6. #:starts-with
  7. #:loop-lines))
  8. (in-package :assboard.utils)
  9. (defmacro aget (key alist)
  10. `(cdr (assoc ,key ,alist :test #'equal)))
  11. (defmethod yason:encode ((symbol symbol) &optional (stream *standard-output*))
  12. (yason:encode (s-sql:to-sql-name symbol) stream))
  13. (defparameter +project-path+
  14. (asdf:component-pathname (asdf:find-system '#:assboard)))
  15. (defun starts-with (with-what str)
  16. (let ((len (min (length str) (length with-what))))
  17. (equal (subseq str 0 len)
  18. with-what)))
  19. (defun vec-to-hash (vec key-fn)
  20. (loop for val across vec
  21. with result = (make-hash-table :test #'equal :size (length vec))
  22. do (setf (gethash (funcall key-fn val) result) val)
  23. finally (return result)))
  24. (defmacro loop-lines (s &body body)
  25. `(with-input-from-string (stream ,s)
  26. (loop for line = (read-line stream nil :eof nil)
  27. until (eq line :eof)
  28. ,@body)))