diff options
| author | Aya Morisawa <AyaMorisawa4869@gmail.com> | 2018-12-20 19:41:04 +0900 |
|---|---|---|
| committer | Aya Morisawa <AyaMorisawa4869@gmail.com> | 2018-12-20 19:42:10 +0900 |
| commit | e9f8897fe28249642d47dd1ecf3e6a76b552ddf5 (patch) | |
| tree | c64445f671f782ae2a08e149400b1297f99e5eae /src/prelude | |
| parent | Fix overlap of birthday label on datepicker (#3697) (diff) | |
| download | misskey-e9f8897fe28249642d47dd1ecf3e6a76b552ddf5.tar.gz misskey-e9f8897fe28249642d47dd1ecf3e6a76b552ddf5.tar.bz2 misskey-e9f8897fe28249642d47dd1ecf3e6a76b552ddf5.zip | |
Refactor MFM
Co-authored-by: syuilo syuilotan@yahoo.co.jp
Diffstat (limited to 'src/prelude')
| -rw-r--r-- | src/prelude/tree.ts | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/prelude/tree.ts b/src/prelude/tree.ts new file mode 100644 index 0000000000..519234a0b0 --- /dev/null +++ b/src/prelude/tree.ts @@ -0,0 +1,36 @@ +import { concat, sum } from './array'; + +export type Tree<T> = { + node: T, + children: Forest<T>; +}; + +export type Forest<T> = Tree<T>[]; + +export function createLeaf<T>(node: T): Tree<T> { + return { node, children: [] }; +} + +export function createTree<T>(node: T, children: Forest<T>): Tree<T> { + return { node, children }; +} + +export function hasChildren<T>(t: Tree<T>): boolean { + return t.children.length !== 0; +} + +export function preorder<T>(t: Tree<T>): T[] { + return [t.node, ...preorderF(t.children)]; +} + +export function preorderF<T>(ts: Forest<T>): T[] { + return concat(ts.map(preorder)); +} + +export function countNodes<T>(t: Tree<T>): number { + return preorder(t).length; +} + +export function countNodesF<T>(ts: Forest<T>): number { + return sum(ts.map(countNodes)); +} |