doc
[protos/libecoli.git] / lib / ecoli_node_weakref.h
index cba5018..cb2aed1 100644 (file)
@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: BSD-3-Clause
- * Copyright (c) 2016, Olivier MATZ <zer0@droids-corp.org>
+ * Copyright 2016, Olivier MATZ <zer0@droids-corp.org>
  */
 
 #ifndef ECOLI_NODE_WEAKREF_
  *   freeable, due to reference counters
  *
  * Example:
+ *  expr = or()
  *  val = int(0, 10)
  *  op = str("!")
- *  expr = or()
- *  seq = seq(clone(op), clone(expr))
- *  expr.add(clone(seq))
- *  expr.add(clone(val))
- *  free(val)
- *  free(op)
- *  free(seq)
+ *  seq = seq(op, clone(expr))
+ *  expr.add(seq)
+ *  expr.add(val)
+ *  free(expr) // just decrease ref
  *
  * FAIL: expr cannot be freed due to cyclic refs
  * The references are like this:
  *                   val
  *                    ^
  *                    |
- *        $user ---> expr ---> seq ---> op
+ *     $user ~ ~ ~ > expr ---> seq ---> op
  *                        <---
  *
  * It is solved with:
+ *  expr = or()
  *  val = int(0, 10)
  *  op = str("!")
- *  expr = or()
  *  weak = weak(expr)
- *  seq = seq(clone(op), clone(weak))
- *  expr.add(clone(seq))
- *  expr.add(clone(val))
- *  free(val)
- *  free(op)
- *  free(weak)
- *  free(seq)
+ *  seq = seq(op, weak)
+ *  expr.add(op)
+ *  expr.add(val)
  *
  *
  *                   val
  *                    ^
  *                    |
- *        $user ---> expr ---------------> seq ---> op
+ *     $user ~ ~ ~ > expr ---------------> seq ---> op
  *                        <- - - weak <---
  *
  * The node expr can be freed.