aboutsummaryrefslogtreecommitdiffstats
path: root/src/wait-group.lisp
blob: b2bc22fe5b02118ca8c51373e99ecf1400eb34af (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
;;;; TODO

;; TODO: Add a wg:clear

(in-package :wait-group)

(defclass wait-group ()
  ((counter
     :initform 0
     :accessor counter
     :documentation "TODO"))

  (:documentation "TODO"))

(defmethod print-object ((object wait-group) stream)
  (print-unreadable-object (object stream :type t)
    (with-slots (counter) object
      (format stream ":counter ~s" counter))))

(defun make-wait-group ()
  "TODO"
  (make-instance 'wait-group))

(defgeneric add (wait-group &optional amount)
  (:documentation "TODO"))

(defmethod add ((wait-group wait-group) &optional (amount 1))
  "TODO"
  (incf (counter wait-group) amount))

(defgeneric done (wait-group)
  (:documentation "TODO"))

(defmethod done ((wait-group wait-group))
  "TODO"
  (decf (counter wait-group)))

(defgeneric wait (wait-group)
  (:documentation "TODO"))

(defmethod wait ((wait-group wait-group))
  "TODO"
  (loop until (<= (counter wait-group) 0)))