blob: d1aa06104f80db577b16e4c1e7cc6802879bf670 [file] [log] [blame]
Chris Craik44c28202015-05-12 17:25:16 -07001<!DOCTYPE html>
2<!--
3Copyright (c) 2015 The Chromium Authors. All rights reserved.
4Use of this source code is governed by a BSD-style license that can be
5found in the LICENSE file.
6-->
7<link rel="import" href="/core/selection.html">
8
9
10<script>
11'use strict';
12
13tv.exportTo('tv.c.analysis', function() {
14 var FLOW_IN = 0x1;
15 var FLOW_OUT = 0x2;
16 var FLOW_IN_OUT = FLOW_IN | FLOW_OUT;
17
18 function FlowClassifier() {
19 this.numEvents_ = 0;
20 this.eventsByGUID_ = {};
21 }
22
23 FlowClassifier.prototype = {
24 getFS_: function(event) {
25 var fs = this.eventsByGUID_[event.guid];
26 if (fs === undefined) {
27 this.numEvents_++;
28 fs = {
29 state: 0,
30 event: event
31 };
32 this.eventsByGUID_[event.guid] = fs;
33 }
34 return fs;
35 },
36
37 addInFlow: function(event) {
38 var fs = this.getFS_(event);
39 fs.state |= FLOW_IN;
40 return event;
41 },
42
43 addOutFlow: function(event) {
44 var fs = this.getFS_(event);
45 fs.state |= FLOW_OUT;
46 return event;
47 },
48
49 get hasEvents() {
50 return this.numEvents_ > 0;
51 },
52
53 get inFlowEvents() {
54 var selection = new tv.c.Selection();
55 for (var guid in this.eventsByGUID_) {
56 var fs = this.eventsByGUID_[guid];
57 if (fs.state === FLOW_IN)
58 selection.push(fs.event);
59 }
60 return selection;
61 },
62
63 get outFlowEvents() {
64 var selection = new tv.c.Selection();
65 for (var guid in this.eventsByGUID_) {
66 var fs = this.eventsByGUID_[guid];
67 if (fs.state === FLOW_OUT)
68 selection.push(fs.event);
69 }
70 return selection;
71 },
72
73 get internalFlowEvents() {
74 var selection = new tv.c.Selection();
75 for (var guid in this.eventsByGUID_) {
76 var fs = this.eventsByGUID_[guid];
77 if (fs.state === FLOW_IN_OUT)
78 selection.push(fs.event);
79 }
80 return selection;
81 }
82 };
83
84 return {
85 FlowClassifier: FlowClassifier
86 };
87});
88</script>
89