aboutsummaryrefslogtreecommitdiff
path: root/thirdparty/preact/src/vdom/component-recycler.js
diff options
context:
space:
mode:
authortg(x) <*@tg-x.net>2016-10-05 00:02:10 +0200
committertg(x) <*@tg-x.net>2016-10-05 00:02:10 +0200
commitec62d29c90958aa8d41474ed2fe5a179d6fafed7 (patch)
tree367cc55bc6772cf194ed6c4778cd344d581d3d7c /thirdparty/preact/src/vdom/component-recycler.js
parentfda241d74d5c1c39203b64da676c684d4dc9d800 (diff)
parentd3ccf4103900b8d990b1970d135695b938d94eae (diff)
Merge branch 'master' of taler.net:/var/git/wallet-webex
Diffstat (limited to 'thirdparty/preact/src/vdom/component-recycler.js')
-rw-r--r--thirdparty/preact/src/vdom/component-recycler.js32
1 files changed, 32 insertions, 0 deletions
diff --git a/thirdparty/preact/src/vdom/component-recycler.js b/thirdparty/preact/src/vdom/component-recycler.js
new file mode 100644
index 000000000..a70f0ece0
--- /dev/null
+++ b/thirdparty/preact/src/vdom/component-recycler.js
@@ -0,0 +1,32 @@
+import { Component } from '../component';
+
+/** Retains a pool of Components for re-use, keyed on component name.
+ * Note: since component names are not unique or even necessarily available, these are primarily a form of sharding.
+ * @private
+ */
+const components = {};
+
+
+export function collectComponent(component) {
+ let name = component.constructor.name,
+ list = components[name];
+ if (list) list.push(component);
+ else components[name] = [component];
+}
+
+
+export function createComponent(Ctor, props, context) {
+ let inst = new Ctor(props, context),
+ list = components[Ctor.name];
+ Component.call(inst, props, context);
+ if (list) {
+ for (let i=list.length; i--; ) {
+ if (list[i].constructor===Ctor) {
+ inst.nextBase = list[i].nextBase;
+ list.splice(i, 1);
+ break;
+ }
+ }
+ }
+ return inst;
+}