@lexho111/plainblog 0.6.4 → 0.6.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Article.js +1 -1
- package/Blog.js +249 -138
- package/Formatter.js +5 -7
- package/model/DataModel.js +6 -2
- package/model/datastructures/BinarySearchTree.js +27 -0
- package/model/datastructures/BinarySearchTreeHashMap.js +14 -5
- package/package.json +1 -1
- package/public/favicon.ico +0 -0
- package/public/index.html +17 -0
- package/public/main-LAI5FAZI.js +7 -0
- package/public/main-SKL6R4NB.js +7 -0
- package/public/scripts.min.js +2 -2
- package/public/styles-I55BTQOK.css +1 -0
- package/public/styles.min.css +2 -2
- package/src/fetchData.js +53 -29
- package/src/styles.css +152 -42
- package/.vscode/settings.json +0 -2
- package/blog_test_empty.db +0 -0
- package/blog_test_load.db +0 -0
- package/coverage/clover.xml +0 -1051
- package/coverage/coverage-final.json +0 -20
- package/coverage/lcov-report/base.css +0 -224
- package/coverage/lcov-report/block-navigation.js +0 -87
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +0 -161
- package/coverage/lcov-report/package/Article.js.html +0 -406
- package/coverage/lcov-report/package/Blog.js.html +0 -2674
- package/coverage/lcov-report/package/Formatter.js.html +0 -379
- package/coverage/lcov-report/package/build-scripts.js.html +0 -247
- package/coverage/lcov-report/package/build-styles.js.html +0 -367
- package/coverage/lcov-report/package/index.html +0 -191
- package/coverage/lcov-report/package/model/APIModel.js.html +0 -190
- package/coverage/lcov-report/package/model/ArrayList.js.html +0 -382
- package/coverage/lcov-report/package/model/ArrayListHashMap.js.html +0 -379
- package/coverage/lcov-report/package/model/BinarySearchTree.js.html +0 -856
- package/coverage/lcov-report/package/model/BinarySearchTreeHashMap.js.html +0 -346
- package/coverage/lcov-report/package/model/DataModel.js.html +0 -325
- package/coverage/lcov-report/package/model/DatabaseModel.js.html +0 -235
- package/coverage/lcov-report/package/model/FileAdapter.js.html +0 -397
- package/coverage/lcov-report/package/model/FileList.js.html +0 -244
- package/coverage/lcov-report/package/model/FileModel.js.html +0 -361
- package/coverage/lcov-report/package/model/SequelizeAdapter.js.html +0 -538
- package/coverage/lcov-report/package/model/SqliteAdapter.js.html +0 -247
- package/coverage/lcov-report/package/model/datastructures/ArrayList.js.html +0 -439
- package/coverage/lcov-report/package/model/datastructures/ArrayListHashMap.js.html +0 -196
- package/coverage/lcov-report/package/model/datastructures/BinarySearchTree.js.html +0 -916
- package/coverage/lcov-report/package/model/datastructures/BinarySearchTreeHashMap.js.html +0 -355
- package/coverage/lcov-report/package/model/datastructures/FileList.js.html +0 -244
- package/coverage/lcov-report/package/model/datastructures/index.html +0 -176
- package/coverage/lcov-report/package/model/index.html +0 -206
- package/coverage/lcov-report/package/utilities.js.html +0 -511
- package/coverage/lcov-report/prettify.css +0 -1
- package/coverage/lcov-report/prettify.js +0 -2
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +0 -210
- package/coverage/lcov.info +0 -2078
- package/eslint.config.js +0 -27
- package/plainblog - Verkn/303/274pfung.lnk +0 -0
|
@@ -1,856 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
<!doctype html>
|
|
3
|
-
<html lang="en">
|
|
4
|
-
|
|
5
|
-
<head>
|
|
6
|
-
<title>Code coverage report for package/model/BinarySearchTree.js</title>
|
|
7
|
-
<meta charset="utf-8" />
|
|
8
|
-
<link rel="stylesheet" href="../../prettify.css" />
|
|
9
|
-
<link rel="stylesheet" href="../../base.css" />
|
|
10
|
-
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
|
|
11
|
-
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
12
|
-
<style type='text/css'>
|
|
13
|
-
.coverage-summary .sorter {
|
|
14
|
-
background-image: url(../../sort-arrow-sprite.png);
|
|
15
|
-
}
|
|
16
|
-
</style>
|
|
17
|
-
</head>
|
|
18
|
-
|
|
19
|
-
<body>
|
|
20
|
-
<div class='wrapper'>
|
|
21
|
-
<div class='pad1'>
|
|
22
|
-
<h1><a href="../../index.html">All files</a> / <a href="index.html">package/model</a> BinarySearchTree.js</h1>
|
|
23
|
-
<div class='clearfix'>
|
|
24
|
-
|
|
25
|
-
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">70.37% </span>
|
|
27
|
-
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>95/135</span>
|
|
29
|
-
</div>
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">65.3% </span>
|
|
34
|
-
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>64/98</span>
|
|
36
|
-
</div>
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">93.75% </span>
|
|
41
|
-
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>15/16</span>
|
|
43
|
-
</div>
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">73.94% </span>
|
|
48
|
-
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>88/119</span>
|
|
50
|
-
</div>
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
</div>
|
|
54
|
-
<p class="quiet">
|
|
55
|
-
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
|
|
56
|
-
</p>
|
|
57
|
-
<template id="filterTemplate">
|
|
58
|
-
<div class="quiet">
|
|
59
|
-
Filter:
|
|
60
|
-
<input type="search" id="fileSearch">
|
|
61
|
-
</div>
|
|
62
|
-
</template>
|
|
63
|
-
</div>
|
|
64
|
-
<div class='status-line medium'></div>
|
|
65
|
-
<pre><table class="coverage">
|
|
66
|
-
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
67
|
-
<a name='L2'></a><a href='#L2'>2</a>
|
|
68
|
-
<a name='L3'></a><a href='#L3'>3</a>
|
|
69
|
-
<a name='L4'></a><a href='#L4'>4</a>
|
|
70
|
-
<a name='L5'></a><a href='#L5'>5</a>
|
|
71
|
-
<a name='L6'></a><a href='#L6'>6</a>
|
|
72
|
-
<a name='L7'></a><a href='#L7'>7</a>
|
|
73
|
-
<a name='L8'></a><a href='#L8'>8</a>
|
|
74
|
-
<a name='L9'></a><a href='#L9'>9</a>
|
|
75
|
-
<a name='L10'></a><a href='#L10'>10</a>
|
|
76
|
-
<a name='L11'></a><a href='#L11'>11</a>
|
|
77
|
-
<a name='L12'></a><a href='#L12'>12</a>
|
|
78
|
-
<a name='L13'></a><a href='#L13'>13</a>
|
|
79
|
-
<a name='L14'></a><a href='#L14'>14</a>
|
|
80
|
-
<a name='L15'></a><a href='#L15'>15</a>
|
|
81
|
-
<a name='L16'></a><a href='#L16'>16</a>
|
|
82
|
-
<a name='L17'></a><a href='#L17'>17</a>
|
|
83
|
-
<a name='L18'></a><a href='#L18'>18</a>
|
|
84
|
-
<a name='L19'></a><a href='#L19'>19</a>
|
|
85
|
-
<a name='L20'></a><a href='#L20'>20</a>
|
|
86
|
-
<a name='L21'></a><a href='#L21'>21</a>
|
|
87
|
-
<a name='L22'></a><a href='#L22'>22</a>
|
|
88
|
-
<a name='L23'></a><a href='#L23'>23</a>
|
|
89
|
-
<a name='L24'></a><a href='#L24'>24</a>
|
|
90
|
-
<a name='L25'></a><a href='#L25'>25</a>
|
|
91
|
-
<a name='L26'></a><a href='#L26'>26</a>
|
|
92
|
-
<a name='L27'></a><a href='#L27'>27</a>
|
|
93
|
-
<a name='L28'></a><a href='#L28'>28</a>
|
|
94
|
-
<a name='L29'></a><a href='#L29'>29</a>
|
|
95
|
-
<a name='L30'></a><a href='#L30'>30</a>
|
|
96
|
-
<a name='L31'></a><a href='#L31'>31</a>
|
|
97
|
-
<a name='L32'></a><a href='#L32'>32</a>
|
|
98
|
-
<a name='L33'></a><a href='#L33'>33</a>
|
|
99
|
-
<a name='L34'></a><a href='#L34'>34</a>
|
|
100
|
-
<a name='L35'></a><a href='#L35'>35</a>
|
|
101
|
-
<a name='L36'></a><a href='#L36'>36</a>
|
|
102
|
-
<a name='L37'></a><a href='#L37'>37</a>
|
|
103
|
-
<a name='L38'></a><a href='#L38'>38</a>
|
|
104
|
-
<a name='L39'></a><a href='#L39'>39</a>
|
|
105
|
-
<a name='L40'></a><a href='#L40'>40</a>
|
|
106
|
-
<a name='L41'></a><a href='#L41'>41</a>
|
|
107
|
-
<a name='L42'></a><a href='#L42'>42</a>
|
|
108
|
-
<a name='L43'></a><a href='#L43'>43</a>
|
|
109
|
-
<a name='L44'></a><a href='#L44'>44</a>
|
|
110
|
-
<a name='L45'></a><a href='#L45'>45</a>
|
|
111
|
-
<a name='L46'></a><a href='#L46'>46</a>
|
|
112
|
-
<a name='L47'></a><a href='#L47'>47</a>
|
|
113
|
-
<a name='L48'></a><a href='#L48'>48</a>
|
|
114
|
-
<a name='L49'></a><a href='#L49'>49</a>
|
|
115
|
-
<a name='L50'></a><a href='#L50'>50</a>
|
|
116
|
-
<a name='L51'></a><a href='#L51'>51</a>
|
|
117
|
-
<a name='L52'></a><a href='#L52'>52</a>
|
|
118
|
-
<a name='L53'></a><a href='#L53'>53</a>
|
|
119
|
-
<a name='L54'></a><a href='#L54'>54</a>
|
|
120
|
-
<a name='L55'></a><a href='#L55'>55</a>
|
|
121
|
-
<a name='L56'></a><a href='#L56'>56</a>
|
|
122
|
-
<a name='L57'></a><a href='#L57'>57</a>
|
|
123
|
-
<a name='L58'></a><a href='#L58'>58</a>
|
|
124
|
-
<a name='L59'></a><a href='#L59'>59</a>
|
|
125
|
-
<a name='L60'></a><a href='#L60'>60</a>
|
|
126
|
-
<a name='L61'></a><a href='#L61'>61</a>
|
|
127
|
-
<a name='L62'></a><a href='#L62'>62</a>
|
|
128
|
-
<a name='L63'></a><a href='#L63'>63</a>
|
|
129
|
-
<a name='L64'></a><a href='#L64'>64</a>
|
|
130
|
-
<a name='L65'></a><a href='#L65'>65</a>
|
|
131
|
-
<a name='L66'></a><a href='#L66'>66</a>
|
|
132
|
-
<a name='L67'></a><a href='#L67'>67</a>
|
|
133
|
-
<a name='L68'></a><a href='#L68'>68</a>
|
|
134
|
-
<a name='L69'></a><a href='#L69'>69</a>
|
|
135
|
-
<a name='L70'></a><a href='#L70'>70</a>
|
|
136
|
-
<a name='L71'></a><a href='#L71'>71</a>
|
|
137
|
-
<a name='L72'></a><a href='#L72'>72</a>
|
|
138
|
-
<a name='L73'></a><a href='#L73'>73</a>
|
|
139
|
-
<a name='L74'></a><a href='#L74'>74</a>
|
|
140
|
-
<a name='L75'></a><a href='#L75'>75</a>
|
|
141
|
-
<a name='L76'></a><a href='#L76'>76</a>
|
|
142
|
-
<a name='L77'></a><a href='#L77'>77</a>
|
|
143
|
-
<a name='L78'></a><a href='#L78'>78</a>
|
|
144
|
-
<a name='L79'></a><a href='#L79'>79</a>
|
|
145
|
-
<a name='L80'></a><a href='#L80'>80</a>
|
|
146
|
-
<a name='L81'></a><a href='#L81'>81</a>
|
|
147
|
-
<a name='L82'></a><a href='#L82'>82</a>
|
|
148
|
-
<a name='L83'></a><a href='#L83'>83</a>
|
|
149
|
-
<a name='L84'></a><a href='#L84'>84</a>
|
|
150
|
-
<a name='L85'></a><a href='#L85'>85</a>
|
|
151
|
-
<a name='L86'></a><a href='#L86'>86</a>
|
|
152
|
-
<a name='L87'></a><a href='#L87'>87</a>
|
|
153
|
-
<a name='L88'></a><a href='#L88'>88</a>
|
|
154
|
-
<a name='L89'></a><a href='#L89'>89</a>
|
|
155
|
-
<a name='L90'></a><a href='#L90'>90</a>
|
|
156
|
-
<a name='L91'></a><a href='#L91'>91</a>
|
|
157
|
-
<a name='L92'></a><a href='#L92'>92</a>
|
|
158
|
-
<a name='L93'></a><a href='#L93'>93</a>
|
|
159
|
-
<a name='L94'></a><a href='#L94'>94</a>
|
|
160
|
-
<a name='L95'></a><a href='#L95'>95</a>
|
|
161
|
-
<a name='L96'></a><a href='#L96'>96</a>
|
|
162
|
-
<a name='L97'></a><a href='#L97'>97</a>
|
|
163
|
-
<a name='L98'></a><a href='#L98'>98</a>
|
|
164
|
-
<a name='L99'></a><a href='#L99'>99</a>
|
|
165
|
-
<a name='L100'></a><a href='#L100'>100</a>
|
|
166
|
-
<a name='L101'></a><a href='#L101'>101</a>
|
|
167
|
-
<a name='L102'></a><a href='#L102'>102</a>
|
|
168
|
-
<a name='L103'></a><a href='#L103'>103</a>
|
|
169
|
-
<a name='L104'></a><a href='#L104'>104</a>
|
|
170
|
-
<a name='L105'></a><a href='#L105'>105</a>
|
|
171
|
-
<a name='L106'></a><a href='#L106'>106</a>
|
|
172
|
-
<a name='L107'></a><a href='#L107'>107</a>
|
|
173
|
-
<a name='L108'></a><a href='#L108'>108</a>
|
|
174
|
-
<a name='L109'></a><a href='#L109'>109</a>
|
|
175
|
-
<a name='L110'></a><a href='#L110'>110</a>
|
|
176
|
-
<a name='L111'></a><a href='#L111'>111</a>
|
|
177
|
-
<a name='L112'></a><a href='#L112'>112</a>
|
|
178
|
-
<a name='L113'></a><a href='#L113'>113</a>
|
|
179
|
-
<a name='L114'></a><a href='#L114'>114</a>
|
|
180
|
-
<a name='L115'></a><a href='#L115'>115</a>
|
|
181
|
-
<a name='L116'></a><a href='#L116'>116</a>
|
|
182
|
-
<a name='L117'></a><a href='#L117'>117</a>
|
|
183
|
-
<a name='L118'></a><a href='#L118'>118</a>
|
|
184
|
-
<a name='L119'></a><a href='#L119'>119</a>
|
|
185
|
-
<a name='L120'></a><a href='#L120'>120</a>
|
|
186
|
-
<a name='L121'></a><a href='#L121'>121</a>
|
|
187
|
-
<a name='L122'></a><a href='#L122'>122</a>
|
|
188
|
-
<a name='L123'></a><a href='#L123'>123</a>
|
|
189
|
-
<a name='L124'></a><a href='#L124'>124</a>
|
|
190
|
-
<a name='L125'></a><a href='#L125'>125</a>
|
|
191
|
-
<a name='L126'></a><a href='#L126'>126</a>
|
|
192
|
-
<a name='L127'></a><a href='#L127'>127</a>
|
|
193
|
-
<a name='L128'></a><a href='#L128'>128</a>
|
|
194
|
-
<a name='L129'></a><a href='#L129'>129</a>
|
|
195
|
-
<a name='L130'></a><a href='#L130'>130</a>
|
|
196
|
-
<a name='L131'></a><a href='#L131'>131</a>
|
|
197
|
-
<a name='L132'></a><a href='#L132'>132</a>
|
|
198
|
-
<a name='L133'></a><a href='#L133'>133</a>
|
|
199
|
-
<a name='L134'></a><a href='#L134'>134</a>
|
|
200
|
-
<a name='L135'></a><a href='#L135'>135</a>
|
|
201
|
-
<a name='L136'></a><a href='#L136'>136</a>
|
|
202
|
-
<a name='L137'></a><a href='#L137'>137</a>
|
|
203
|
-
<a name='L138'></a><a href='#L138'>138</a>
|
|
204
|
-
<a name='L139'></a><a href='#L139'>139</a>
|
|
205
|
-
<a name='L140'></a><a href='#L140'>140</a>
|
|
206
|
-
<a name='L141'></a><a href='#L141'>141</a>
|
|
207
|
-
<a name='L142'></a><a href='#L142'>142</a>
|
|
208
|
-
<a name='L143'></a><a href='#L143'>143</a>
|
|
209
|
-
<a name='L144'></a><a href='#L144'>144</a>
|
|
210
|
-
<a name='L145'></a><a href='#L145'>145</a>
|
|
211
|
-
<a name='L146'></a><a href='#L146'>146</a>
|
|
212
|
-
<a name='L147'></a><a href='#L147'>147</a>
|
|
213
|
-
<a name='L148'></a><a href='#L148'>148</a>
|
|
214
|
-
<a name='L149'></a><a href='#L149'>149</a>
|
|
215
|
-
<a name='L150'></a><a href='#L150'>150</a>
|
|
216
|
-
<a name='L151'></a><a href='#L151'>151</a>
|
|
217
|
-
<a name='L152'></a><a href='#L152'>152</a>
|
|
218
|
-
<a name='L153'></a><a href='#L153'>153</a>
|
|
219
|
-
<a name='L154'></a><a href='#L154'>154</a>
|
|
220
|
-
<a name='L155'></a><a href='#L155'>155</a>
|
|
221
|
-
<a name='L156'></a><a href='#L156'>156</a>
|
|
222
|
-
<a name='L157'></a><a href='#L157'>157</a>
|
|
223
|
-
<a name='L158'></a><a href='#L158'>158</a>
|
|
224
|
-
<a name='L159'></a><a href='#L159'>159</a>
|
|
225
|
-
<a name='L160'></a><a href='#L160'>160</a>
|
|
226
|
-
<a name='L161'></a><a href='#L161'>161</a>
|
|
227
|
-
<a name='L162'></a><a href='#L162'>162</a>
|
|
228
|
-
<a name='L163'></a><a href='#L163'>163</a>
|
|
229
|
-
<a name='L164'></a><a href='#L164'>164</a>
|
|
230
|
-
<a name='L165'></a><a href='#L165'>165</a>
|
|
231
|
-
<a name='L166'></a><a href='#L166'>166</a>
|
|
232
|
-
<a name='L167'></a><a href='#L167'>167</a>
|
|
233
|
-
<a name='L168'></a><a href='#L168'>168</a>
|
|
234
|
-
<a name='L169'></a><a href='#L169'>169</a>
|
|
235
|
-
<a name='L170'></a><a href='#L170'>170</a>
|
|
236
|
-
<a name='L171'></a><a href='#L171'>171</a>
|
|
237
|
-
<a name='L172'></a><a href='#L172'>172</a>
|
|
238
|
-
<a name='L173'></a><a href='#L173'>173</a>
|
|
239
|
-
<a name='L174'></a><a href='#L174'>174</a>
|
|
240
|
-
<a name='L175'></a><a href='#L175'>175</a>
|
|
241
|
-
<a name='L176'></a><a href='#L176'>176</a>
|
|
242
|
-
<a name='L177'></a><a href='#L177'>177</a>
|
|
243
|
-
<a name='L178'></a><a href='#L178'>178</a>
|
|
244
|
-
<a name='L179'></a><a href='#L179'>179</a>
|
|
245
|
-
<a name='L180'></a><a href='#L180'>180</a>
|
|
246
|
-
<a name='L181'></a><a href='#L181'>181</a>
|
|
247
|
-
<a name='L182'></a><a href='#L182'>182</a>
|
|
248
|
-
<a name='L183'></a><a href='#L183'>183</a>
|
|
249
|
-
<a name='L184'></a><a href='#L184'>184</a>
|
|
250
|
-
<a name='L185'></a><a href='#L185'>185</a>
|
|
251
|
-
<a name='L186'></a><a href='#L186'>186</a>
|
|
252
|
-
<a name='L187'></a><a href='#L187'>187</a>
|
|
253
|
-
<a name='L188'></a><a href='#L188'>188</a>
|
|
254
|
-
<a name='L189'></a><a href='#L189'>189</a>
|
|
255
|
-
<a name='L190'></a><a href='#L190'>190</a>
|
|
256
|
-
<a name='L191'></a><a href='#L191'>191</a>
|
|
257
|
-
<a name='L192'></a><a href='#L192'>192</a>
|
|
258
|
-
<a name='L193'></a><a href='#L193'>193</a>
|
|
259
|
-
<a name='L194'></a><a href='#L194'>194</a>
|
|
260
|
-
<a name='L195'></a><a href='#L195'>195</a>
|
|
261
|
-
<a name='L196'></a><a href='#L196'>196</a>
|
|
262
|
-
<a name='L197'></a><a href='#L197'>197</a>
|
|
263
|
-
<a name='L198'></a><a href='#L198'>198</a>
|
|
264
|
-
<a name='L199'></a><a href='#L199'>199</a>
|
|
265
|
-
<a name='L200'></a><a href='#L200'>200</a>
|
|
266
|
-
<a name='L201'></a><a href='#L201'>201</a>
|
|
267
|
-
<a name='L202'></a><a href='#L202'>202</a>
|
|
268
|
-
<a name='L203'></a><a href='#L203'>203</a>
|
|
269
|
-
<a name='L204'></a><a href='#L204'>204</a>
|
|
270
|
-
<a name='L205'></a><a href='#L205'>205</a>
|
|
271
|
-
<a name='L206'></a><a href='#L206'>206</a>
|
|
272
|
-
<a name='L207'></a><a href='#L207'>207</a>
|
|
273
|
-
<a name='L208'></a><a href='#L208'>208</a>
|
|
274
|
-
<a name='L209'></a><a href='#L209'>209</a>
|
|
275
|
-
<a name='L210'></a><a href='#L210'>210</a>
|
|
276
|
-
<a name='L211'></a><a href='#L211'>211</a>
|
|
277
|
-
<a name='L212'></a><a href='#L212'>212</a>
|
|
278
|
-
<a name='L213'></a><a href='#L213'>213</a>
|
|
279
|
-
<a name='L214'></a><a href='#L214'>214</a>
|
|
280
|
-
<a name='L215'></a><a href='#L215'>215</a>
|
|
281
|
-
<a name='L216'></a><a href='#L216'>216</a>
|
|
282
|
-
<a name='L217'></a><a href='#L217'>217</a>
|
|
283
|
-
<a name='L218'></a><a href='#L218'>218</a>
|
|
284
|
-
<a name='L219'></a><a href='#L219'>219</a>
|
|
285
|
-
<a name='L220'></a><a href='#L220'>220</a>
|
|
286
|
-
<a name='L221'></a><a href='#L221'>221</a>
|
|
287
|
-
<a name='L222'></a><a href='#L222'>222</a>
|
|
288
|
-
<a name='L223'></a><a href='#L223'>223</a>
|
|
289
|
-
<a name='L224'></a><a href='#L224'>224</a>
|
|
290
|
-
<a name='L225'></a><a href='#L225'>225</a>
|
|
291
|
-
<a name='L226'></a><a href='#L226'>226</a>
|
|
292
|
-
<a name='L227'></a><a href='#L227'>227</a>
|
|
293
|
-
<a name='L228'></a><a href='#L228'>228</a>
|
|
294
|
-
<a name='L229'></a><a href='#L229'>229</a>
|
|
295
|
-
<a name='L230'></a><a href='#L230'>230</a>
|
|
296
|
-
<a name='L231'></a><a href='#L231'>231</a>
|
|
297
|
-
<a name='L232'></a><a href='#L232'>232</a>
|
|
298
|
-
<a name='L233'></a><a href='#L233'>233</a>
|
|
299
|
-
<a name='L234'></a><a href='#L234'>234</a>
|
|
300
|
-
<a name='L235'></a><a href='#L235'>235</a>
|
|
301
|
-
<a name='L236'></a><a href='#L236'>236</a>
|
|
302
|
-
<a name='L237'></a><a href='#L237'>237</a>
|
|
303
|
-
<a name='L238'></a><a href='#L238'>238</a>
|
|
304
|
-
<a name='L239'></a><a href='#L239'>239</a>
|
|
305
|
-
<a name='L240'></a><a href='#L240'>240</a>
|
|
306
|
-
<a name='L241'></a><a href='#L241'>241</a>
|
|
307
|
-
<a name='L242'></a><a href='#L242'>242</a>
|
|
308
|
-
<a name='L243'></a><a href='#L243'>243</a>
|
|
309
|
-
<a name='L244'></a><a href='#L244'>244</a>
|
|
310
|
-
<a name='L245'></a><a href='#L245'>245</a>
|
|
311
|
-
<a name='L246'></a><a href='#L246'>246</a>
|
|
312
|
-
<a name='L247'></a><a href='#L247'>247</a>
|
|
313
|
-
<a name='L248'></a><a href='#L248'>248</a>
|
|
314
|
-
<a name='L249'></a><a href='#L249'>249</a>
|
|
315
|
-
<a name='L250'></a><a href='#L250'>250</a>
|
|
316
|
-
<a name='L251'></a><a href='#L251'>251</a>
|
|
317
|
-
<a name='L252'></a><a href='#L252'>252</a>
|
|
318
|
-
<a name='L253'></a><a href='#L253'>253</a>
|
|
319
|
-
<a name='L254'></a><a href='#L254'>254</a>
|
|
320
|
-
<a name='L255'></a><a href='#L255'>255</a>
|
|
321
|
-
<a name='L256'></a><a href='#L256'>256</a>
|
|
322
|
-
<a name='L257'></a><a href='#L257'>257</a>
|
|
323
|
-
<a name='L258'></a><a href='#L258'>258</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
324
|
-
<span class="cline-any cline-neutral"> </span>
|
|
325
|
-
<span class="cline-any cline-neutral"> </span>
|
|
326
|
-
<span class="cline-any cline-neutral"> </span>
|
|
327
|
-
<span class="cline-any cline-yes">567092x</span>
|
|
328
|
-
<span class="cline-any cline-yes">567092x</span>
|
|
329
|
-
<span class="cline-any cline-yes">567092x</span>
|
|
330
|
-
<span class="cline-any cline-neutral"> </span>
|
|
331
|
-
<span class="cline-any cline-neutral"> </span>
|
|
332
|
-
<span class="cline-any cline-neutral"> </span>
|
|
333
|
-
<span class="cline-any cline-neutral"> </span>
|
|
334
|
-
<span class="cline-any cline-neutral"> </span>
|
|
335
|
-
<span class="cline-any cline-yes">38x</span>
|
|
336
|
-
<span class="cline-any cline-neutral"> </span>
|
|
337
|
-
<span class="cline-any cline-neutral"> </span>
|
|
338
|
-
<span class="cline-any cline-neutral"> </span>
|
|
339
|
-
<span class="cline-any cline-neutral"> </span>
|
|
340
|
-
<span class="cline-any cline-yes">5000x</span>
|
|
341
|
-
<span class="cline-any cline-neutral"> </span>
|
|
342
|
-
<span class="cline-any cline-neutral"> </span>
|
|
343
|
-
<span class="cline-any cline-neutral"> </span>
|
|
344
|
-
<span class="cline-any cline-neutral"> </span>
|
|
345
|
-
<span class="cline-any cline-neutral"> </span>
|
|
346
|
-
<span class="cline-any cline-neutral"> </span>
|
|
347
|
-
<span class="cline-any cline-neutral"> </span>
|
|
348
|
-
<span class="cline-any cline-yes">567092x</span>
|
|
349
|
-
<span class="cline-any cline-yes">567092x</span>
|
|
350
|
-
<span class="cline-any cline-yes">33x</span>
|
|
351
|
-
<span class="cline-any cline-yes">33x</span>
|
|
352
|
-
<span class="cline-any cline-neutral"> </span>
|
|
353
|
-
<span class="cline-any cline-yes">567059x</span>
|
|
354
|
-
<span class="cline-any cline-yes">567059x</span>
|
|
355
|
-
<span class="cline-any cline-yes">567059x</span>
|
|
356
|
-
<span class="cline-any cline-neutral"> </span>
|
|
357
|
-
<span class="cline-any cline-yes">477162921x</span>
|
|
358
|
-
<span class="cline-any cline-yes">422300966x</span>
|
|
359
|
-
<span class="cline-any cline-yes">319001x</span>
|
|
360
|
-
<span class="cline-any cline-yes">319001x</span>
|
|
361
|
-
<span class="cline-any cline-neutral"> </span>
|
|
362
|
-
<span class="cline-any cline-yes">421981965x</span>
|
|
363
|
-
<span class="cline-any cline-neutral"> </span>
|
|
364
|
-
<span class="cline-any cline-yes">54861955x</span>
|
|
365
|
-
<span class="cline-any cline-yes">248058x</span>
|
|
366
|
-
<span class="cline-any cline-yes">248058x</span>
|
|
367
|
-
<span class="cline-any cline-neutral"> </span>
|
|
368
|
-
<span class="cline-any cline-yes">54613897x</span>
|
|
369
|
-
<span class="cline-any cline-neutral"> </span>
|
|
370
|
-
<span class="cline-any cline-neutral"> </span>
|
|
371
|
-
<span class="cline-any cline-neutral"> </span>
|
|
372
|
-
<span class="cline-any cline-neutral"> </span>
|
|
373
|
-
<span class="cline-any cline-neutral"> </span>
|
|
374
|
-
<span class="cline-any cline-no"> </span>
|
|
375
|
-
<span class="cline-any cline-no"> </span>
|
|
376
|
-
<span class="cline-any cline-neutral"> </span>
|
|
377
|
-
<span class="cline-any cline-neutral"> </span>
|
|
378
|
-
<span class="cline-any cline-neutral"> </span>
|
|
379
|
-
<span class="cline-any cline-neutral"> </span>
|
|
380
|
-
<span class="cline-any cline-neutral"> </span>
|
|
381
|
-
<span class="cline-any cline-yes">10000x</span>
|
|
382
|
-
<span class="cline-any cline-neutral"> </span>
|
|
383
|
-
<span class="cline-any cline-neutral"> </span>
|
|
384
|
-
<span class="cline-any cline-neutral"> </span>
|
|
385
|
-
<span class="cline-any cline-yes">50000000x</span>
|
|
386
|
-
<span class="cline-any cline-yes">25005000x</span>
|
|
387
|
-
<span class="cline-any cline-yes">24995000x</span>
|
|
388
|
-
<span class="cline-any cline-yes">24995000x</span>
|
|
389
|
-
<span class="cline-any cline-yes">24995000x</span>
|
|
390
|
-
<span class="cline-any cline-neutral"> </span>
|
|
391
|
-
<span class="cline-any cline-neutral"> </span>
|
|
392
|
-
<span class="cline-any cline-neutral"> </span>
|
|
393
|
-
<span class="cline-any cline-neutral"> </span>
|
|
394
|
-
<span class="cline-any cline-yes">34x</span>
|
|
395
|
-
<span class="cline-any cline-yes">34x</span>
|
|
396
|
-
<span class="cline-any cline-yes">32x</span>
|
|
397
|
-
<span class="cline-any cline-neutral"> </span>
|
|
398
|
-
<span class="cline-any cline-yes">34x</span>
|
|
399
|
-
<span class="cline-any cline-neutral"> </span>
|
|
400
|
-
<span class="cline-any cline-neutral"> </span>
|
|
401
|
-
<span class="cline-any cline-neutral"> </span>
|
|
402
|
-
<span class="cline-any cline-yes">32x</span>
|
|
403
|
-
<span class="cline-any cline-yes">32x</span>
|
|
404
|
-
<span class="cline-any cline-neutral"> </span>
|
|
405
|
-
<span class="cline-any cline-yes">32x</span>
|
|
406
|
-
<span class="cline-any cline-yes">32x</span>
|
|
407
|
-
<span class="cline-any cline-yes">91673x</span>
|
|
408
|
-
<span class="cline-any cline-yes">91673x</span>
|
|
409
|
-
<span class="cline-any cline-yes">91673x</span>
|
|
410
|
-
<span class="cline-any cline-neutral"> </span>
|
|
411
|
-
<span class="cline-any cline-yes">91673x</span>
|
|
412
|
-
<span class="cline-any cline-yes">91673x</span>
|
|
413
|
-
<span class="cline-any cline-yes">91673x</span>
|
|
414
|
-
<span class="cline-any cline-neutral"> </span>
|
|
415
|
-
<span class="cline-any cline-neutral"> </span>
|
|
416
|
-
<span class="cline-any cline-no"> </span>
|
|
417
|
-
<span class="cline-any cline-no"> </span>
|
|
418
|
-
<span class="cline-any cline-no"> </span>
|
|
419
|
-
<span class="cline-any cline-no"> </span>
|
|
420
|
-
<span class="cline-any cline-neutral"> </span>
|
|
421
|
-
<span class="cline-any cline-no"> </span>
|
|
422
|
-
<span class="cline-any cline-no"> </span>
|
|
423
|
-
<span class="cline-any cline-no"> </span>
|
|
424
|
-
<span class="cline-any cline-neutral"> </span>
|
|
425
|
-
<span class="cline-any cline-neutral"> </span>
|
|
426
|
-
<span class="cline-any cline-neutral"> </span>
|
|
427
|
-
<span class="cline-any cline-neutral"> </span>
|
|
428
|
-
<span class="cline-any cline-neutral"> </span>
|
|
429
|
-
<span class="cline-any cline-yes">3x</span>
|
|
430
|
-
<span class="cline-any cline-neutral"> </span>
|
|
431
|
-
<span class="cline-any cline-yes">3x</span>
|
|
432
|
-
<span class="cline-any cline-neutral"> </span>
|
|
433
|
-
<span class="cline-any cline-neutral"> </span>
|
|
434
|
-
<span class="cline-any cline-neutral"> </span>
|
|
435
|
-
<span class="cline-any cline-neutral"> </span>
|
|
436
|
-
<span class="cline-any cline-neutral"> </span>
|
|
437
|
-
<span class="cline-any cline-neutral"> </span>
|
|
438
|
-
<span class="cline-any cline-neutral"> </span>
|
|
439
|
-
<span class="cline-any cline-neutral"> </span>
|
|
440
|
-
<span class="cline-any cline-yes">3x</span>
|
|
441
|
-
<span class="cline-any cline-neutral"> </span>
|
|
442
|
-
<span class="cline-any cline-neutral"> </span>
|
|
443
|
-
<span class="cline-any cline-neutral"> </span>
|
|
444
|
-
<span class="cline-any cline-neutral"> </span>
|
|
445
|
-
<span class="cline-any cline-neutral"> </span>
|
|
446
|
-
<span class="cline-any cline-neutral"> </span>
|
|
447
|
-
<span class="cline-any cline-neutral"> </span>
|
|
448
|
-
<span class="cline-any cline-neutral"> </span>
|
|
449
|
-
<span class="cline-any cline-yes">3x</span>
|
|
450
|
-
<span class="cline-any cline-yes">3x</span>
|
|
451
|
-
<span class="cline-any cline-neutral"> </span>
|
|
452
|
-
<span class="cline-any cline-neutral"> </span>
|
|
453
|
-
<span class="cline-any cline-neutral"> </span>
|
|
454
|
-
<span class="cline-any cline-neutral"> </span>
|
|
455
|
-
<span class="cline-any cline-yes">2987x</span>
|
|
456
|
-
<span class="cline-any cline-neutral"> </span>
|
|
457
|
-
<span class="cline-any cline-neutral"> </span>
|
|
458
|
-
<span class="cline-any cline-neutral"> </span>
|
|
459
|
-
<span class="cline-any cline-neutral"> </span>
|
|
460
|
-
<span class="cline-any cline-neutral"> </span>
|
|
461
|
-
<span class="cline-any cline-yes">1512x</span>
|
|
462
|
-
<span class="cline-any cline-yes">1486x</span>
|
|
463
|
-
<span class="cline-any cline-neutral"> </span>
|
|
464
|
-
<span class="cline-any cline-neutral"> </span>
|
|
465
|
-
<span class="cline-any cline-yes">1512x</span>
|
|
466
|
-
<span class="cline-any cline-neutral"> </span>
|
|
467
|
-
<span class="cline-any cline-neutral"> </span>
|
|
468
|
-
<span class="cline-any cline-yes">1512x</span>
|
|
469
|
-
<span class="cline-any cline-yes">1474x</span>
|
|
470
|
-
<span class="cline-any cline-neutral"> </span>
|
|
471
|
-
<span class="cline-any cline-neutral"> </span>
|
|
472
|
-
<span class="cline-any cline-yes">1512x</span>
|
|
473
|
-
<span class="cline-any cline-neutral"> </span>
|
|
474
|
-
<span class="cline-any cline-neutral"> </span>
|
|
475
|
-
<span class="cline-any cline-yes">1512x</span>
|
|
476
|
-
<span class="cline-any cline-yes">1498x</span>
|
|
477
|
-
<span class="cline-any cline-neutral"> </span>
|
|
478
|
-
<span class="cline-any cline-neutral"> </span>
|
|
479
|
-
<span class="cline-any cline-neutral"> </span>
|
|
480
|
-
<span class="cline-any cline-neutral"> </span>
|
|
481
|
-
<span class="cline-any cline-neutral"> </span>
|
|
482
|
-
<span class="cline-any cline-neutral"> </span>
|
|
483
|
-
<span class="cline-any cline-yes">12x</span>
|
|
484
|
-
<span class="cline-any cline-yes">8x</span>
|
|
485
|
-
<span class="cline-any cline-neutral"> </span>
|
|
486
|
-
<span class="cline-any cline-neutral"> </span>
|
|
487
|
-
<span class="cline-any cline-neutral"> </span>
|
|
488
|
-
<span class="cline-any cline-neutral"> </span>
|
|
489
|
-
<span class="cline-any cline-neutral"> </span>
|
|
490
|
-
<span class="cline-any cline-neutral"> </span>
|
|
491
|
-
<span class="cline-any cline-yes">4x</span>
|
|
492
|
-
<span class="cline-any cline-neutral"> </span>
|
|
493
|
-
<span class="cline-any cline-neutral"> </span>
|
|
494
|
-
<span class="cline-any cline-neutral"> </span>
|
|
495
|
-
<span class="cline-any cline-yes">6x</span>
|
|
496
|
-
<span class="cline-any cline-yes">6x</span>
|
|
497
|
-
<span class="cline-any cline-yes">6x</span>
|
|
498
|
-
<span class="cline-any cline-neutral"> </span>
|
|
499
|
-
<span class="cline-any cline-neutral"> </span>
|
|
500
|
-
<span class="cline-any cline-neutral"> </span>
|
|
501
|
-
<span class="cline-any cline-yes">6x</span>
|
|
502
|
-
<span class="cline-any cline-yes">6x</span>
|
|
503
|
-
<span class="cline-any cline-yes">6x</span>
|
|
504
|
-
<span class="cline-any cline-neutral"> </span>
|
|
505
|
-
<span class="cline-any cline-neutral"> </span>
|
|
506
|
-
<span class="cline-any cline-yes">6x</span>
|
|
507
|
-
<span class="cline-any cline-neutral"> </span>
|
|
508
|
-
<span class="cline-any cline-yes">2x</span>
|
|
509
|
-
<span class="cline-any cline-yes">2x</span>
|
|
510
|
-
<span class="cline-any cline-no"> </span>
|
|
511
|
-
<span class="cline-any cline-no"> </span>
|
|
512
|
-
<span class="cline-any cline-no"> </span>
|
|
513
|
-
<span class="cline-any cline-no"> </span>
|
|
514
|
-
<span class="cline-any cline-neutral"> </span>
|
|
515
|
-
<span class="cline-any cline-no"> </span>
|
|
516
|
-
<span class="cline-any cline-no"> </span>
|
|
517
|
-
<span class="cline-any cline-neutral"> </span>
|
|
518
|
-
<span class="cline-any cline-neutral"> </span>
|
|
519
|
-
<span class="cline-any cline-neutral"> </span>
|
|
520
|
-
<span class="cline-any cline-neutral"> </span>
|
|
521
|
-
<span class="cline-any cline-yes">4x</span>
|
|
522
|
-
<span class="cline-any cline-yes">4x</span>
|
|
523
|
-
<span class="cline-any cline-yes">4x</span>
|
|
524
|
-
<span class="cline-any cline-yes">12x</span>
|
|
525
|
-
<span class="cline-any cline-yes">12x</span>
|
|
526
|
-
<span class="cline-any cline-yes">2x</span>
|
|
527
|
-
<span class="cline-any cline-yes">2x</span>
|
|
528
|
-
<span class="cline-any cline-yes">2x</span>
|
|
529
|
-
<span class="cline-any cline-yes">2x</span>
|
|
530
|
-
<span class="cline-any cline-neutral"> </span>
|
|
531
|
-
<span class="cline-any cline-yes">10x</span>
|
|
532
|
-
<span class="cline-any cline-yes">2x</span>
|
|
533
|
-
<span class="cline-any cline-neutral"> </span>
|
|
534
|
-
<span class="cline-any cline-neutral"> </span>
|
|
535
|
-
<span class="cline-any cline-neutral"> </span>
|
|
536
|
-
<span class="cline-any cline-neutral"> </span>
|
|
537
|
-
<span class="cline-any cline-yes">10x</span>
|
|
538
|
-
<span class="cline-any cline-yes">6x</span>
|
|
539
|
-
<span class="cline-any cline-neutral"> </span>
|
|
540
|
-
<span class="cline-any cline-neutral"> </span>
|
|
541
|
-
<span class="cline-any cline-neutral"> </span>
|
|
542
|
-
<span class="cline-any cline-yes">6x</span>
|
|
543
|
-
<span class="cline-any cline-neutral"> </span>
|
|
544
|
-
<span class="cline-any cline-neutral"> </span>
|
|
545
|
-
<span class="cline-any cline-yes">4x</span>
|
|
546
|
-
<span class="cline-any cline-yes">2x</span>
|
|
547
|
-
<span class="cline-any cline-no"> </span>
|
|
548
|
-
<span class="cline-any cline-no"> </span>
|
|
549
|
-
<span class="cline-any cline-yes">2x</span>
|
|
550
|
-
<span class="cline-any cline-no"> </span>
|
|
551
|
-
<span class="cline-any cline-no"> </span>
|
|
552
|
-
<span class="cline-any cline-no"> </span>
|
|
553
|
-
<span class="cline-any cline-yes">2x</span>
|
|
554
|
-
<span class="cline-any cline-yes">2x</span>
|
|
555
|
-
<span class="cline-any cline-no"> </span>
|
|
556
|
-
<span class="cline-any cline-no"> </span>
|
|
557
|
-
<span class="cline-any cline-neutral"> </span>
|
|
558
|
-
<span class="cline-any cline-neutral"> </span>
|
|
559
|
-
<span class="cline-any cline-no"> </span>
|
|
560
|
-
<span class="cline-any cline-no"> </span>
|
|
561
|
-
<span class="cline-any cline-no"> </span>
|
|
562
|
-
<span class="cline-any cline-no"> </span>
|
|
563
|
-
<span class="cline-any cline-no"> </span>
|
|
564
|
-
<span class="cline-any cline-neutral"> </span>
|
|
565
|
-
<span class="cline-any cline-no"> </span>
|
|
566
|
-
<span class="cline-any cline-no"> </span>
|
|
567
|
-
<span class="cline-any cline-no"> </span>
|
|
568
|
-
<span class="cline-any cline-neutral"> </span>
|
|
569
|
-
<span class="cline-any cline-no"> </span>
|
|
570
|
-
<span class="cline-any cline-neutral"> </span>
|
|
571
|
-
<span class="cline-any cline-neutral"> </span>
|
|
572
|
-
<span class="cline-any cline-neutral"> </span>
|
|
573
|
-
<span class="cline-any cline-yes">14x</span>
|
|
574
|
-
<span class="cline-any cline-neutral"> </span>
|
|
575
|
-
<span class="cline-any cline-neutral"> </span>
|
|
576
|
-
<span class="cline-any cline-neutral"> </span>
|
|
577
|
-
<span class="cline-any cline-yes">4x</span>
|
|
578
|
-
<span class="cline-any cline-neutral"> </span>
|
|
579
|
-
<span class="cline-any cline-neutral"> </span>
|
|
580
|
-
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import Article from "../Article.js";
|
|
581
|
-
|
|
582
|
-
class BlogNode {
|
|
583
|
-
constructor(article) {
|
|
584
|
-
this.article = article;
|
|
585
|
-
this.left = null;
|
|
586
|
-
this.right = null;
|
|
587
|
-
}
|
|
588
|
-
}
|
|
589
|
-
|
|
590
|
-
export class BinarySearchTree {
|
|
591
|
-
constructor() {
|
|
592
|
-
this.root = null;
|
|
593
|
-
}
|
|
594
|
-
|
|
595
|
-
// O(n) - Linear search (Base class has no HashMap)
|
|
596
|
-
contains(id) {
|
|
597
|
-
return this.find(id) !== null;
|
|
598
|
-
}
|
|
599
|
-
|
|
600
|
-
// Insert a new article
|
|
601
|
-
insert(article) {
|
|
602
|
-
// Note: The tree is now sorted by date. ID-based methods will not work correctly.
|
|
603
|
-
// if (!article.id) article.id = this.getNextID();
|
|
604
|
-
// Add to the Set
|
|
605
|
-
const newNode = new BlogNode(article);
|
|
606
|
-
if (!this.root) {
|
|
607
|
-
this.root = newNode;
|
|
608
|
-
return;
|
|
609
|
-
}
|
|
610
|
-
let current = this.root;
|
|
611
|
-
const newTime = newNode.article.createdAt;
|
|
612
|
-
while (true) {
|
|
613
|
-
// Using getTime() for numeric comparison. Duplicates go to the right.
|
|
614
|
-
if (newTime < current.article.createdAt) {
|
|
615
|
-
if (!current.left) {
|
|
616
|
-
current.left = newNode;
|
|
617
|
-
break;
|
|
618
|
-
}
|
|
619
|
-
current = current.left;
|
|
620
|
-
} else {
|
|
621
|
-
if (!current.right) {
|
|
622
|
-
current.right = newNode;
|
|
623
|
-
break;
|
|
624
|
-
}
|
|
625
|
-
current = current.right;
|
|
626
|
-
}
|
|
627
|
-
}
|
|
628
|
-
}
|
|
629
|
-
|
|
630
|
-
<span class="fstat-no" title="function not covered" > _f</span>indMinNode(node) {
|
|
631
|
-
<span class="cstat-no" title="statement not covered" > while (node.left) <span class="cstat-no" title="statement not covered" >node = node.left;</span></span>
|
|
632
|
-
<span class="cstat-no" title="statement not covered" > return node;</span>
|
|
633
|
-
}
|
|
634
|
-
|
|
635
|
-
// Search for a specific article by ID
|
|
636
|
-
find(id) {
|
|
637
|
-
// Tree is sorted by Date, so we must traverse all nodes to find by ID (O(n))
|
|
638
|
-
return this._findNodeDFS(this.root, id);
|
|
639
|
-
}
|
|
640
|
-
|
|
641
|
-
_findNodeDFS(node, id) {
|
|
642
|
-
if (!node) return null;
|
|
643
|
-
if (id === node.article.id) return node.article;
|
|
644
|
-
const leftResult = this._findNodeDFS(node.left, id);
|
|
645
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (leftResult) <span class="cstat-no" title="statement not covered" >return leftResult;</span>
|
|
646
|
-
return this._findNodeDFS(node.right, id);
|
|
647
|
-
}
|
|
648
|
-
|
|
649
|
-
// Get all articles in order (Sorted by ID)
|
|
650
|
-
getAllArticles(order = "newest") {
|
|
651
|
-
const articles = [];
|
|
652
|
-
if (this.root) {
|
|
653
|
-
this._inOrder(this.root, articles, order);
|
|
654
|
-
}
|
|
655
|
-
return articles;
|
|
656
|
-
}
|
|
657
|
-
|
|
658
|
-
_inOrder(node, articles, order) {
|
|
659
|
-
const stack = [];
|
|
660
|
-
let current = node;
|
|
661
|
-
|
|
662
|
-
if (order === "newest") {
|
|
663
|
-
while (current || stack.length > 0) {
|
|
664
|
-
while (current) {
|
|
665
|
-
stack.push(current);
|
|
666
|
-
current = current.right;
|
|
667
|
-
}
|
|
668
|
-
current = stack.pop();
|
|
669
|
-
articles.push(current.article);
|
|
670
|
-
current = current.left;
|
|
671
|
-
}
|
|
672
|
-
} else <span class="missing-if-branch" title="else path not taken" >E</span>{
|
|
673
|
-
<span class="cstat-no" title="statement not covered" > while (current || stack.length > 0) {</span>
|
|
674
|
-
<span class="cstat-no" title="statement not covered" > while (current) {</span>
|
|
675
|
-
<span class="cstat-no" title="statement not covered" > stack.push(current);</span>
|
|
676
|
-
<span class="cstat-no" title="statement not covered" > current = current.left;</span>
|
|
677
|
-
}
|
|
678
|
-
<span class="cstat-no" title="statement not covered" > current = stack.pop();</span>
|
|
679
|
-
<span class="cstat-no" title="statement not covered" > articles.push(current.article);</span>
|
|
680
|
-
<span class="cstat-no" title="statement not covered" > current = current.right;</span>
|
|
681
|
-
}
|
|
682
|
-
}
|
|
683
|
-
}
|
|
684
|
-
|
|
685
|
-
getRange(startdate, enddate, limit) {
|
|
686
|
-
const results = [];
|
|
687
|
-
// Optimization: Convert to timestamps once to avoid Date object creation/coercion in recursion
|
|
688
|
-
const start = startdate
|
|
689
|
-
? new Date(
|
|
690
|
-
startdate instanceof Date
|
|
691
|
-
? startdate
|
|
692
|
-
: <span class="branch-1 cbranch-no" title="branch not covered" >isNaN(startdate)</span>
|
|
693
|
-
? startdate
|
|
694
|
-
: parseInt(startdate),
|
|
695
|
-
).getTime()
|
|
696
|
-
: <span class="branch-1 cbranch-no" title="branch not covered" >0;</span>
|
|
697
|
-
const end = enddate
|
|
698
|
-
? new Date(
|
|
699
|
-
enddate instanceof Date
|
|
700
|
-
? enddate
|
|
701
|
-
: <span class="branch-1 cbranch-no" title="branch not covered" >isNaN(enddate)</span>
|
|
702
|
-
? enddate
|
|
703
|
-
: parseInt(enddate),
|
|
704
|
-
).getTime()
|
|
705
|
-
: <span class="branch-1 cbranch-no" title="branch not covered" >Infinity;</span>
|
|
706
|
-
this._rangeSearch(this.root, start, end, limit, results);
|
|
707
|
-
return results;
|
|
708
|
-
}
|
|
709
|
-
|
|
710
|
-
_rangeSearch(node, start, end, limit, results) {
|
|
711
|
-
// Stop if node is null or we have reached the limit
|
|
712
|
-
if (!node || (limit !== null && <span class="branch-2 cbranch-no" title="branch not covered" >results.length >= limit)</span>) return;
|
|
713
|
-
|
|
714
|
-
// This is an efficient reverse in-order traversal for a date-sorted tree.
|
|
715
|
-
// It prunes branches that are outside the specified date range.
|
|
716
|
-
|
|
717
|
-
// 1. Traverse right (newer posts) if there's a possibility of finding matches.
|
|
718
|
-
if (node.article.createdAt <= end) {
|
|
719
|
-
this._rangeSearch(node.right, start, end, limit, results);
|
|
720
|
-
}
|
|
721
|
-
|
|
722
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (limit !== null && <span class="branch-1 cbranch-no" title="branch not covered" >results.length >= limit)</span> <span class="cstat-no" title="statement not covered" >return;</span>
|
|
723
|
-
|
|
724
|
-
// 2. Check if the current node is within the range.
|
|
725
|
-
if (node.article.createdAt >= start && node.article.createdAt <= end) {
|
|
726
|
-
results.push(node.article);
|
|
727
|
-
}
|
|
728
|
-
|
|
729
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (limit !== null && <span class="branch-1 cbranch-no" title="branch not covered" >results.length >= limit)</span> <span class="cstat-no" title="statement not covered" >return;</span>
|
|
730
|
-
|
|
731
|
-
// 3. Traverse left (older posts) if there's a possibility of finding matches.
|
|
732
|
-
if (node.article.createdAt > start) {
|
|
733
|
-
this._rangeSearch(node.left, start, end, limit, results);
|
|
734
|
-
}
|
|
735
|
-
}
|
|
736
|
-
|
|
737
|
-
// Private recursive helper
|
|
738
|
-
_countNodes(node) {
|
|
739
|
-
// 1. Base Case: If the branch is empty, return 0
|
|
740
|
-
if (!node) {
|
|
741
|
-
return 0;
|
|
742
|
-
}
|
|
743
|
-
|
|
744
|
-
// 2. Recursive Step:
|
|
745
|
-
// Count the current node (1)
|
|
746
|
-
// PLUS whatever the left side has
|
|
747
|
-
// PLUS whatever the right side has
|
|
748
|
-
return 1 + this._countNodes(node.left) + this._countNodes(node.right);
|
|
749
|
-
}
|
|
750
|
-
|
|
751
|
-
remove(data) {
|
|
752
|
-
const id = data instanceof Article ? data.id : data;
|
|
753
|
-
const date = data instanceof Article ? data.createdAt : null;
|
|
754
|
-
this.root = this._removeIterative(this.root, id, date);
|
|
755
|
-
}
|
|
756
|
-
|
|
757
|
-
_removeIterative(root, id, date) {
|
|
758
|
-
let parent = null;
|
|
759
|
-
let current = root;
|
|
760
|
-
let isLeftChild = false;
|
|
761
|
-
|
|
762
|
-
// 1. Find the node
|
|
763
|
-
if (date !== null) {
|
|
764
|
-
// Optimized search using BST property (Date)
|
|
765
|
-
while (current) {
|
|
766
|
-
<span class="missing-if-branch" title="else path not taken" >E</span>if (current.article.id == id) break;
|
|
767
|
-
<span class="cstat-no" title="statement not covered" > parent = current;</span>
|
|
768
|
-
<span class="cstat-no" title="statement not covered" > if (date < current.article.createdAt) {</span>
|
|
769
|
-
<span class="cstat-no" title="statement not covered" > current = current.left;</span>
|
|
770
|
-
<span class="cstat-no" title="statement not covered" > isLeftChild = true;</span>
|
|
771
|
-
} else {
|
|
772
|
-
<span class="cstat-no" title="statement not covered" > current = current.right;</span>
|
|
773
|
-
<span class="cstat-no" title="statement not covered" > isLeftChild = false;</span>
|
|
774
|
-
}
|
|
775
|
-
}
|
|
776
|
-
} else {
|
|
777
|
-
// Full scan required (Iterative DFS) if we don't have the date
|
|
778
|
-
const stack = [{ node: root, parent: null, isLeft: false }];
|
|
779
|
-
current = null;
|
|
780
|
-
while (stack.length > 0) {
|
|
781
|
-
const item = stack.pop();
|
|
782
|
-
if (item.node.article.id == id) {
|
|
783
|
-
current = item.node;
|
|
784
|
-
parent = item.parent;
|
|
785
|
-
isLeftChild = item.isLeft;
|
|
786
|
-
break;
|
|
787
|
-
}
|
|
788
|
-
if (item.node.right)
|
|
789
|
-
stack.push({
|
|
790
|
-
node: item.node.right,
|
|
791
|
-
parent: item.node,
|
|
792
|
-
isLeft: false,
|
|
793
|
-
});
|
|
794
|
-
if (item.node.left)
|
|
795
|
-
stack.push({ node: item.node.left, parent: item.node, isLeft: true });
|
|
796
|
-
}
|
|
797
|
-
}
|
|
798
|
-
|
|
799
|
-
if (!current) return root; // Not found
|
|
800
|
-
|
|
801
|
-
// 2. Delete node
|
|
802
|
-
if (!current.left && !current.right) {
|
|
803
|
-
<span class="missing-if-branch" title="else path not taken" >E</span>if (!parent) return null; // Root was deleted
|
|
804
|
-
<span class="cstat-no" title="statement not covered" > if (isLeftChild) <span class="cstat-no" title="statement not covered" >parent.left = null;</span></span>
|
|
805
|
-
else <span class="cstat-no" title="statement not covered" >parent.right = null;</span>
|
|
806
|
-
} else <span class="missing-if-branch" title="if path not taken" >I</span>if (!current.right) {
|
|
807
|
-
<span class="cstat-no" title="statement not covered" > if (!parent) <span class="cstat-no" title="statement not covered" >return current.left;</span></span>
|
|
808
|
-
<span class="cstat-no" title="statement not covered" > if (isLeftChild) <span class="cstat-no" title="statement not covered" >parent.left = current.left;</span></span>
|
|
809
|
-
else <span class="cstat-no" title="statement not covered" >parent.right = current.left;</span>
|
|
810
|
-
} else if (!current.left) {
|
|
811
|
-
<span class="missing-if-branch" title="else path not taken" >E</span>if (!parent) return current.right;
|
|
812
|
-
<span class="cstat-no" title="statement not covered" > if (isLeftChild) <span class="cstat-no" title="statement not covered" >parent.left = current.right;</span></span>
|
|
813
|
-
else <span class="cstat-no" title="statement not covered" >parent.right = current.right;</span>
|
|
814
|
-
} else <span class="missing-if-branch" title="else path not taken" >E</span>{
|
|
815
|
-
// Two children: Find successor (min in right subtree)
|
|
816
|
-
let successorParent = <span class="cstat-no" title="statement not covered" >current;</span>
|
|
817
|
-
let successor = <span class="cstat-no" title="statement not covered" >current.right;</span>
|
|
818
|
-
<span class="cstat-no" title="statement not covered" > while (successor.left) {</span>
|
|
819
|
-
<span class="cstat-no" title="statement not covered" > successorParent = successor;</span>
|
|
820
|
-
<span class="cstat-no" title="statement not covered" > successor = successor.left;</span>
|
|
821
|
-
}
|
|
822
|
-
<span class="cstat-no" title="statement not covered" > current.article = successor.article;</span>
|
|
823
|
-
<span class="cstat-no" title="statement not covered" > if (successorParent === current) <span class="cstat-no" title="statement not covered" >successorParent.right = successor.right;</span></span>
|
|
824
|
-
else <span class="cstat-no" title="statement not covered" >successorParent.left = successor.right;</span>
|
|
825
|
-
}
|
|
826
|
-
<span class="cstat-no" title="statement not covered" > return root;</span>
|
|
827
|
-
}
|
|
828
|
-
|
|
829
|
-
clear() {
|
|
830
|
-
this.root = null;
|
|
831
|
-
}
|
|
832
|
-
|
|
833
|
-
size() {
|
|
834
|
-
return this._countNodes(this.root);
|
|
835
|
-
}
|
|
836
|
-
}
|
|
837
|
-
</pre></td></tr></table></pre>
|
|
838
|
-
|
|
839
|
-
<div class='push'></div><!-- for sticky footer -->
|
|
840
|
-
</div><!-- /wrapper -->
|
|
841
|
-
<div class='footer quiet pad2 space-top1 center small'>
|
|
842
|
-
Code coverage generated by
|
|
843
|
-
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
844
|
-
at 2026-01-17T13:49:55.807Z
|
|
845
|
-
</div>
|
|
846
|
-
<script src="../../prettify.js"></script>
|
|
847
|
-
<script>
|
|
848
|
-
window.onload = function () {
|
|
849
|
-
prettyPrint();
|
|
850
|
-
};
|
|
851
|
-
</script>
|
|
852
|
-
<script src="../../sorter.js"></script>
|
|
853
|
-
<script src="../../block-navigation.js"></script>
|
|
854
|
-
</body>
|
|
855
|
-
</html>
|
|
856
|
-
|