Inside the Engine: A Code-Level Look at ExSan CODE’s Processing Clusters
c++ |ExSan| ++ ↄ
Simply Raw Pointers
iX ilinkedIn exsan.plusplus@gmail.com Sat Apr 19 10:17:38 2025 x: R.J.Y JOB: xsnPtfli_1738xsnPtfli
OUTPUT Clusterig The Code itself
1 //-------------at the end of the data capture --here clustering-------//
2 frameClk[1] = pt::microsec_clock::local_time();
3 ++frameCounterDatum; //every time a datum into new db? it could be where data is captured¡¡¡¡????
4 for (i = 1; i <= net->get_rows_in_page(ppDataIn, 'f'); i++) { aryStockAux[i] = 0; } //those complete records
5 if (loadNtimeLapse && frameClk[1] - frameClk[0] > xClkFrame && frameCounterDatum) { //cluster
6 isTimeLapseOver = false; // reset to start a new time lapse
7
9 counter = 0; // counts the clusters that have valid input
10 unsigned short kth(0);
11 double spreadCenter(0);
12 /* Dummy Block
13 net->boundaries(net, ppDataIn, 'f', 1, arySAPrevious, pfR, plR);
14 cout << "\n\t\t:2083: BEGINS aryStockPREVIOUS firstRow: " << pfR << " lastRow: " << plR << "\t";
15 if (!pfR) { fout.flush() << "\t\tNo Previous"; pfR = ++plR; } //*to avoid nex for* to print only once
16 else { fout.flush() << "\tThere is a Previous AryStock "; }
17 for (i = pfR; i <= plR; ++i) {
18 cout << " " << i << ":->" << arySAPrevious[i];
19 }
20 //*/
21 //make a copy of the current and active stocks
22 for (i = 1; i <= net->get_rows_in_page(ppDataIn, 'f'); ++i) {
23 aryStActPrev[i] = 0;
24 if(aryStockActive[i])aryStActPrev[i] = 1;
25 if (arySAPrevious[i])aryStActPrev[i] = 1;
26 }
27
28 net->boundaries(net, ppDataIn, 'f', 1, aryStockActive, firstRow, lastRow);
29
30 if(firstRow) stockPtr = net->goto_row(net, ppDataIn, firstRow, 'f'); // point at the beggining
31
32 unsigned short counToPortfolio(0);
33 counter = countElementInAry(aryStockActive, true, firstRow, lastRow); //initial counter all are assumed as valid inputs
35 << "\t\tAryCurrent->\t"; for (i = 1; i <= lastRow; ++i) { fout.flush() << aryStockActive[i]; if (!(i % 5)) cout << " "
36 if (!counter) { fout.flush() << "\n\t\t:2101:*> counter = zero Force to clear db ";
37 ++counter; //fake value
38 firstRow = 1;
39 lastRow = net->get_rows_in_page(ppDataIn, 'f');
40 stockPtr = net->goto_row(net, ppDataIn, firstRow, 'f'); // point at the beggining
41 cout << " fake counter: " << counter << "\tfirstRow: " << firstRow << "\tlastRow: " << lastRow;
42 }
43 //-------------------------------------------------------------------------------------------------------- //stPtr
45 if (counter < minDB) {//fout.flush() << "\n\t\t:2110: counter < minDB";
46 for (i = firstRow; i <= lastRow; ++i) {//first/last from aryStockActive
47 if (!aryStockActive[i]) { stockPtr = stockPtr->get_down_ptr(); continue; }
48
49 stockPtr->get_ptrLasTick()->reset_ntCounter();//only resest data in cluster remains, previus was last input
50
51 if (loadNtimeLapse == 1) {
52 stockPtr->get_ptrLasTick()->set_bool(pp_bool, false); // next cluster is set not active
53 stockPtr->get_ptrLasTick()->Discard_nt_Tree(stockPtr->get_ptrLasTick(), stockPtr->get_ptrLasTick()->get_ntHead
54 }
55 else {
56 stockPtr->get_ptrLasTick()->set_ushort(pp_key_index, 0);
57 stockPtr->get_ptrLasTick()->set_bool(pp_bool, true); //before populating make it available
58
59 }
60 aryStockActive[i] = 0;
61 stockPtr = stockPtr->get_down_ptr();
62 }
63 }
64 else {//fout.flush() << "\n\t\t:2127:*> *0.1* Error Halt Initial Stage Enough Active Stocks " ;
65 for (i = firstRow; i <= lastRow; ++i) {// //first/last from aryStockActive
66 if (!aryStockActive[i]) { stockPtr = stockPtr->get_down_ptr(); continue; }
67 //check if cluster representative value is valid
68 if (loadNtimeLapse == 1) {
69 ptrAry[0] = stockPtr->get_backward_ptr(); //auxiliar tree
70 ptr = stockPtr->get_ptrLasTick(); //ptr to the current cluster
71 ndptrAry[0] = ndptrAry[1] = ptrAry[0]->get_ntHead();
72 while (ndptrAry[0]->get_nt_left_ptr()) ndptrAry[0] = ndptrAry[0]->get_nt_left_ptr(); //find min
73 while (ndptrAry[1]->get_nt_right_ptr()) ndptrAry[1] = ndptrAry[1]->get_nt_right_ptr(); //find mx
74 kth = 0;
75 spreadCenter = 0;
76 spreadCenter = (ndptrAry[0]->get_nt_data(ppnt_data) + ndptrAry[1]->get_nt_data(ppnt_data)) / 2.;
77 if (ptr->get_ntCounter() % 2) { //cout << "\n\t\t\t:2151:*> ODD ntCounter:-> " << ptr->get_ntCounter(); //impa
78 kth = 1 + ptr->get_ntCounter() / 2; //cout << "\tkth: " << kth;
79 ndptrAry[0] = net->InOrderFindKth_nt(net, stockPtr->get_backward_ptr()->get_ntHead(), kth); //OK auxilia
80 //ndptrAry[0] = net->InOrderFindKey_nt(net, ptr->get_ntHead(), kth); ///NO
81 ptr->set_data(ppDataIn, ndptrAry[0]->get_nt_data(ppnt_data));
82 }
83 else {
84 unsigned short kth = ptr->get_ntCounter() / 2; //left
85 ndptrAry[0] = net->InOrderFindKth_nt(net, stockPtr->get_backward_ptr()->get_ntHead(), kth); //OK
86 kth = 1 + ptr->get_ntCounter() / 2; // right
87 ndptrAry[1] = net->InOrderFindKth_nt(net, stockPtr->get_backward_ptr()->get_ntHead(), kth);
88
89 ptr->set_data(ppDataIn, (ndptrAry[0]->get_nt_data(ppnt_data) + ndptrAry[1]->get_nt_data(ppnt_data)) / 2.);
91
92 }
93 //auxiliar ntTree
94 stockPtr->get_backward_ptr()->Discard_nt_Tree(stockPtr->get_backward_ptr(), stockPtr->get_backward_ptr()->get_
95 if (stockPtr->get_backward_ptr()->get_ntHead()) cout << "\n\t\t:2173: Errror head of auxiliar Cluster not nil
96 if (checkThisRow == ptr->get_row())
98 }
99 else {cout << "\n\t\t:2180: New Version - ntNodes Not Deleted" ;
100 // much more simpler instruction from is omited
101 ndptrAry[0] = ndptrAry[1] = nullptr; // ! both initialized in null
103
104 spreadCenter = (ndptrAry[0]->get_nt_data(ppnt_data) + ndptrAry[1]->get_nt_data(ppnt_data)) / 2.;
105
106 if ((unsigned short)ptr->get_ushort(pp_key_index) % 2) {
108 ptr->set_data(ppDataIn, ndptrAry[0]->get_nt_data(ppnt_data));
109 ptr->set_data(ppTime, ndptrAry[0]->get_nt_data(ppnt_time)); ///very important
110 }
111 else {cout << "\n\t:2191: EVEN key_index:-> " << setprecision(0) << ptr->get_ushort(pp_key_index); // impar
112 ptr->get_ntHead()->rangeKeyFindPair_nt(ptr->get_ntHead(), ndptrAry[0], ndptrAry[1],
113 static_cast(aryUS_nt::key),
114 ptr->get_ushort(pp_key_index) / 2, 1 + ptr->get_ushort(pp_key_index) / 2);
115 ptr->set_data(ppDataIn, (ndptrAry[0]->get_nt_data(ppnt_data) + ndptrAry[1]->get_nt_data(ppnt_data)) / 2.);
117 }
118 }
119
122 /* Dummy block ok
126 ptr1 = net->go_to(net, ptr->get_row(), 1);
127 for (unsigned short i = 1; i <= net->get_cols_in_page(ppDataIn, 'f'); i++) {
128 cout << ptr1->get_bool(pp_bool);
129 ptr1 = ptr1->get_next_ptr();
130 }
131 //*/
132 --counter; // because of the discarded value
135 //for (i = pfR; i <= plR; ++i) {//error check for 1 and 2 they are different, take out of this loop
136 firstRowPtr = net->goto_row(net, ppDataIn, 1, 'f'); // point at the beggining
137 for (i = 1; i <= net->get_rows_in_page(ppDataIn, 'f'); ++i) {
138 if (!aryStockActive[i] && !arySAPrevious[i]) { firstRowPtr = firstRowPtr->get_down_ptr(); continue; }
142 ptr = firstRowPtr->get_forward_ptr(); //traverse the whole record
143 for (j = 1; j <= net->get_cols_in_page(ppDataIn, 'f'); ++j) {//traverse record
144 if (ptr->get_ntHead()) {
145 fout.flush() << " " << ptr->get_col();
146 ptr->reset_ntCounter();//only resest data in cluster remains, previus was last input
147 if (loadNtimeLapse == 1) {
148 //firstRowPtr->get_ptrLasTick()->set_bool(pp_bool, false); // next cluster is set not acti
149 ptr->set_bool(pp_bool, false); // next cluster is set not active
150 ptr->Discard_nt_Tree(firstRowPtr->get_ptrLasTick(), firstRowPtr->get_ptrLasTick()->get_ntH
151 }
152 else {
153 //rowPtr->set_status(1, true); // index 0 used index 1 to flag this stock activity
154 //firstRowPtr->get_ptrLasTick()->set_ushort(pp_key_index, 0);
155 // key_index keeps track of the total of ntNOdes every node has a sequential key, waste, u
157 //firstRowPtr->get_ptrLasTick()->set_bool(pp_bool, true); //before populating make it ava
158 ptr->set_bool(pp_bool, true); //before populating make it available
159 }
160 }
161 ptr = ptr->get_next_ptr();
162
163 }
164 arySAPrevious[i] = aryStockActive[i] = 0; // ok both ary are reset previous + current
165 firstRowPtr->tickInPoinTo(firstRowPtr->get_forward_ptr()); // ok re-start from the beginning of the r
166 firstRowPtr = firstRowPtr->get_down_ptr();
167 }
168 i = lastRow + 1; // no need to browse the whole set of active Stocks, reset all here
169 stockPtr = firstRowPtr; // points to the last one, for loop exits
170 }
172 //aryStockActive[i] = 0; //set to zero
173 arySAPrevious[i] = aryStockActive[i] = 0; // ok both ary are reset previous + current
174 stockPtr->get_ptrLasTick()->reset_ntCounter();//only resest data in cluster remains, previus was last inpu
176 if (loadNtimeLapse == 1) {
177 stockPtr->get_ptrLasTick()->set_bool(pp_bool, false); // next cluster is set not active
179 }
180 else {
181 //rowPtr->set_status(1, true); // index 0 used index 1 to flag this stock activity
183 stockPtr->get_ptrLasTick()->set_bool(pp_bool, true); //before populating make it available
185 }
186 }
187 }
189 stockPtr->get_ptrLasTick()->set_bool(pp_bool, true);
190 //ptr = stockPtr->get_ptrLasTick();
191 if (0 && ptr->get_col() == net->get_cols_in_page(ppDataIn, 'f')) { //end of the record not in this block
192 stockPtr->tickInPoinTo(stockPtr->get_forward_ptr()); //next cluster in col 1
193 cout << "\n\t\t:2280: Last Cluster is completed, Now it points to *stockPtr->get_ptrLasTick()->get_col()*
195 }
196 else {//cout << "\n\t\t:1890: Update Cluster ---> " << stockPtr->get_ptrLasTick()->get_col();
198 stockPtr->tickInToNextCluster(); //points the next cluster
199 //// reset cluster counter
200 //ptr->set_ushort(pp_key_index, 0); // Node is completed
201 //cout << "\n\t\tNext Cluster is in col *stockPtr->get_ptrLasTick()->get_col()* ---> "
202 // << stockPtr->get_ptrLasTick()->get_col() << " _ntCounter: " << stockPtr->get_ptrLasTick()->get_ntCount
203 //cout << "\n\t\t\t:1866: snapshot timing : : " << "(" << ptr->get_col() << ")"
205 /*
206 //
211 */
212 }
213
214 //stockPtr->get_ptrLasTick()->set_bool(pp_bool, false); // next cluster is set not active nooooo
215 //cout << "\n\t\t\t:2280: Entry " << stockPtr->get_ptrLasTick()->get_col()
216 //<< " Next Entry Status has been SET : " << stockPtr->get_ptrLasTick()->get_bool(pp_bool)
218 // << stockPtr->get_ptrLasTick()->get_bool(pp_bool);
219 /*Dummy block
220 ptr = net->go_to(net, stockPtr->get_n_row(), 1); //TRAVERSE THE WHOLE RECORD from the begining
221 fout.flush() << "\n\t\t\tRow: " << stockPtr->get_n_row() << "\t";
222 for (unsigned short ii = 1; ii <= net->get_cols_in_page(ppDataIn, 'f'); ii++) {
223 cout << " " << ptr->get_col() << ":" << ptr->get_bool(pp_bool);
224 ptr = ptr->get_next_ptr();
225 }
226 //*/
227 //} //closes this if (stockPtr->get_ptrLasTick()->get_ntHead()) {
228 /*
229 else{
231 if (stockPtr->get_ptrLasTick()->get_col() == 1) {
232 ptr1 = net->go_to(net, stockPtr->get_ptrLasTick()->get_row(), net->get_cols_in_page(ppDataIn, 'f'));
233 }
234 else ptr1 = stockPtr->get_ptrLasTick()->get_previous_ptr();
235 if (ptr1->get_bool(pp_bool)) {//cout << "\tIt was true";
236 ptr1->set_bool(pp_bool, false);
237 }
238 }
239 */
240 arySAPrevious[i] = aryStockActive[i]; //make a copy
242 }
243 stockPtr = stockPtr->get_down_ptr();
244 }
245 if(counter >= minDB) prevAry = 1; // there is a previous valid set of clusters
246 }
248 }
249 else {fout.flush() << "\n\t\t:2329:*> *1* -TRUE- prevAry ";
251 prevAry = 0; // ok previous round is reset,
254 //firstRow = min(firstRow, pfR); // A full traversal is not necessary, leading to an excess of machine cycles.
255 //lastRow = max(lastRow, plR); // A full traversal is not necessary, leading to an excess of machine cycles.
257 //stockPtr = net->goto_row(net, ppDataIn, firstRow, 'f'); // firstRow may have changed
258 stockPtr = net->goto_row(net, ppDataIn, 1, 'f'); // firstRow may have changed
261 if (!aryStockActive[i] && !arySAPrevious[i]) { stockPtr = stockPtr->get_down_ptr(); continue; }
262 ptr = stockPtr->get_forward_ptr(); //traverse the whole record
263 for (j = 1; j <= net->get_cols_in_page(ppDataIn, 'f');++j) {//traverse record
264 if (ptr->get_ntHead()) {
265 //fout.flush() << " " << ptr->get_col();
266 ptr->reset_ntCounter();//only resest data in cluster remains, previus was last input
267 if (loadNtimeLapse == 1) {
268 ptr->set_bool(pp_bool, false); // next cluster is set not active
271 }
272 else {
274 ptr->set_bool(pp_bool, true); //before populating make it available
276 }
277 }
278 ptr = ptr->get_next_ptr();
279 }
280 arySAPrevious[i] = aryStockActive[i] = 0; // ok both ary are reset previous + current
281 stockPtr->tickInPoinTo(stockPtr->get_forward_ptr()); //re-start from the beginning of the record
282 stockPtr = stockPtr->get_down_ptr();
283 }
284 }
285 else{
286 bool lastCol(0); //
288 firstRow = min(firstRow, pfR); //lets do a single traversal
289 lastRow = max(lastRow, plR);
291 stockPtr = net->goto_row(net, ppDataIn, firstRow, 'f'); // traverse the whole new set
292 for (i = firstRow; i <= lastRow; ++i) {// //first/last from aryStockActive
293 if (arySAPrevious[i] && !aryStockActive[i]) {
294 arySAPrevious[i] = 0; //
296 ptr = stockPtr->get_forward_ptr(); //traverse the whole record
298 for (j = 1; j <= net->get_cols_in_page(ppDataIn, 'f'); ++j) {//traverse record only one entry, previous is
299 if (ptr->get_ntHead()) {
300 ptr->reset_ntCounter();//only resest data in cluster remains, previus was last input
301 //fout.flush() << " " << ptr->get_col();
302 if (loadNtimeLapse == 1) {
303 ptr->set_bool(pp_bool, false); // next cluster is set not active
305 }
306 else {
307 //rowPtr->set_status(1, true); // index
308 // |0 used index 1 to flag this stock activity
310 ptr->set_bool(pp_bool, true); //before populating make it available
312 }
313 }
314 ptr = ptr->get_next_ptr();
315 }
316 stockPtr->tickInPoinTo(stockPtr->get_forward_ptr()); // ok re-start from the beginning of the record
317 stockPtr = stockPtr->get_down_ptr(); continue;
318 }
319 if (!aryStockActive[i]) {
320 stockPtr = stockPtr->get_down_ptr(); continue;
321 }
322 //check if cluster representative value is valid
323 if (loadNtimeLapse == 1) {
324 ptrAry[0] = stockPtr->get_backward_ptr(); //auxiliar tree
325 ptr = stockPtr->get_ptrLasTick(); //ptr to the current cluster
326
327 //*//use the auxiliar tree
328
329 ndptrAry[0] = ndptrAry[1] = ptrAry[0]->get_ntHead();
330 while (ndptrAry[0]->get_nt_left_ptr()) ndptrAry[0] = ndptrAry[0]->get_nt_left_ptr(); //find min
331 while (ndptrAry[1]->get_nt_right_ptr()) ndptrAry[1] = ndptrAry[1]->get_nt_right_ptr(); //find mx
333 // << " mean Val of Spread: " << (ndptrAry[0]->get_nt_data(ppnt_data) + ndptrAry[1]->get_nt_data(ppnt_data))
334 kth = 0;
335 spreadCenter = 0;
337 spreadCenter = (ndptrAry[0]->get_nt_data(ppnt_data) + ndptrAry[1]->get_nt_data(ppnt_data)) / 2.;
339 if (ptr->get_ntCounter() % 2) { //cout << "\n\t\t\t:2481:*> ODD ntCounter:-> " << ptr->get_ntCounter(); //impa
340 kth = 1 + ptr->get_ntCounter() / 2; //cout << "\tkth: " << kth;
341 ndptrAry[0] = net->InOrderFindKth_nt(net, stockPtr->get_backward_ptr()->get_ntHead(), kth); //OK auxilia
342 //ndptrAry[0] = net->InOrderFindKey_nt(net, ptr->get_ntHead(), kth); ///NO
344 ptr->set_data(ppDataIn, ndptrAry[0]->get_nt_data(ppnt_data));
345 //ptr->set_data(ppTime, ndptrAry[0]->get_nt_data(ppnt_time)); //already done during streming
346 }
347 else { //cout << "\n\t\t:2431:*> EVEN ntCounter:-> " << ptr->get_ntCounter(); // par
348 unsigned short kth = ptr->get_ntCounter() / 2; //left
349 ndptrAry[0] = net->InOrderFindKth_nt(net, stockPtr->get_backward_ptr()->get_ntHead(), kth); //OK
350 //ndptrAry[0] = net->InOrderFindKey_nt(net, ptr->get_ntHead(), kth); //NO
352 kth = 1 + ptr->get_ntCounter() / 2; // right
353 ndptrAry[1] = net->InOrderFindKth_nt(net, stockPtr->get_backward_ptr()->get_ntHead(), kth);
354 if (0) {
356 cout << "\n\t\t:2421: CENTRAL DATUM:-> " << (ndptrAry[0]->get_nt_data(ppnt_data) + ndptrAry[1]->get_nt
357 }
358 ptr->set_data(ppDataIn, (ndptrAry[0]->get_nt_data(ppnt_data) + ndptrAry[1]->get_nt_data(ppnt_data)) / 2.);
360 //cout << "\n\t\t:1893: To Cluster Spread - Center:-> " << ptr->get_data(ppDataIn);
361 }
362 //auxiliar ntTree
364 if (stockPtr->get_backward_ptr()->get_ntHead()) cout << "\n\t\t:2430: Errror head of auxiliar Cluster not nil
365 if (checkThisRow == ptr->get_row())
367 }
368 else {cout << "\n\t\t:2453: New Version - ntNodes Not Deleted" ;
369 // much more simpler instruction from is omited
370 ndptrAry[0] = ndptrAry[1] = nullptr; // ! both initialized in null
373 << (ndptrAry[0]->get_nt_data(ppnt_data) + ndptrAry[1]->get_nt_data(ppnt_data)) / 2.;
374 spreadCenter = (ndptrAry[0]->get_nt_data(ppnt_data) + ndptrAry[1]->get_nt_data(ppnt_data)) / 2.;
375
379 ptr->set_data(ppDataIn, ndptrAry[0]->get_nt_data(ppnt_data));
380 ptr->set_data(ppTime, ndptrAry[0]->get_nt_data(ppnt_time)); ///very important
381 }
382 else {cout << "\n\t:2446: EVEN key_index:-> " << setprecision(0) << ptr->get_ushort(pp_key_index); // impar
384 if (0) {
387 cout << "\n\t\t:2452: CENTRAL DATUM:-> " << (ndptrAry[0]->get_nt_data(ppnt_data) + ndptrAry[1]->get_nt_dat
388 }
389 ptr->set_data(ppDataIn, (ndptrAry[0]->get_nt_data(ppnt_data) + ndptrAry[1]->get_nt_data(ppnt_data)) / 2.);
391 }
392 }
393
396 /* Dummy block ok
400 ptr1 = net->go_to(net, ptr->get_row(), 1);
401 for (unsigned short i = 1; i <= net->get_cols_in_page(ppDataIn, 'f'); i++) {
402 cout << ptr1->get_bool(pp_bool);
403 ptr1 = ptr1->get_next_ptr();
404 }
405 //*/
406 --counter; // because of the discarded value
407
408 if (counter < minDB) { fout.flush() << "\n\t\t\t *1.1.0.0* Discard the whole entry";
409 //prevAry = 0; // previous round is reset ???? next loop resests all
410 //counter = 0; // DOES IT NEED TO BE RESET?
412 pfR = min(firstRow, pfR);
413 plR = max(lastRow, plR);
414 firstRowPtr = net->goto_row(net, ppDataIn, pfR, 'f'); // point at the beggining
415 for (i = pfR; i <= plR; ++i) {//error check for 1 and 2 they are different, take out of this loop
416 if (aryStockActive[i]) {
418
419 firstRowPtr->get_ptrLasTick()->reset_ntCounter();//only resest data in cluster remains, previus wa
421
422 if (loadNtimeLapse == 1) {
423 firstRowPtr->get_ptrLasTick()->set_bool(pp_bool, false); // next cluster is set not active
425 }
426 else {
427 //rowPtr->set_status(1, true); // index
428 // |0 used index 1 to flag this stock activity
430 firstRowPtr->get_ptrLasTick()->set_bool(pp_bool, true); //before populating make it available
432 }
433 }
434
435 if (arySAPrevious[i]) {
436 ptr = firstRowPtr->get_ptrLasTick(); //ok, previous round point to the last entry ?????
437 if (arySAPrevious[i] == aryStockActive[i]) {//stock has previous entry
438 if (ptr->get_col() == 1) ptr1 = net->go_to(net, firstRowPtr->get_n_row(), net->get_cols_in_pag
439 else ptr = ptr->get_previous_ptr();
440 }
441 //else {/*stock DOES NOT has previous entry -default- firstRow points to the last in aryPrevious
442
444
445 ptr->reset_ntCounter();//only resest data in cluster remains, previus was last input
446 fout.flush() << " bool/false counter/0 (" << ptr->get_row() << "," << ptr->get_col() << ")";
447
448 if (loadNtimeLapse == 1) {
449 ptr->set_bool(pp_bool, false); // next cluster is set not active
451 }
452 else {
453 //rowPtr->set_status(1, true); // index
454 // |0 used index 1 to flag this stock activity
456 ptr->set_bool(pp_bool, true); //before populating make it available
458 }
459 }
460 arySAPrevious[i] = aryStockActive[i] = 0; // both ary are reset previous + current
461 firstRowPtr = firstRowPtr->get_down_ptr();
462 }
463 i = lastRow + 1; // no need to browse the whole set of active Stocks, reset all here
464 stockPtr = firstRowPtr; // points to the last one, for loop exits
465 }
466 else { // *0.1.0.1* discard this stock only //ok
467 stockPtr->get_ptrLasTick()->reset_ntCounter();//only resest data in cluster remains, previus was last inpu
469 if (loadNtimeLapse == 1) {
470 stockPtr->get_ptrLasTick()->set_bool(pp_bool, false); // next cluster is set not active
472 }
473 else {
474 //rowPtr->set_status(1, true); // index 0 used index 1 to flag this stock activity
476 stockPtr->get_ptrLasTick()->set_bool(pp_bool, true); //before populating make it available
478 }
479
480 if (0 && arySAPrevious[i]) { ///error i DON'T THINK THIS IS NECCESARY
481 ptr = stockPtr->get_ptrLasTick(); //ok, previous round point to the last entry ?????
482 if (arySAPrevious[i] == aryStockActive[i]) {//stock has previous entry
483 if (ptr->get_col() == 1) ptr1 = net->go_to(net, stockPtr->get_n_row(), net->get_cols_in_page(ppDat
484 else ptr = ptr->get_previous_ptr();
485 }
486 //else {/*stock DOES NOT has previous entry -default- */ }
487
489
490 ptr->reset_ntCounter();//only resest data in cluster remains, previus was last input
491 fout.flush() << " bool/false counter/0 (" << ptr->get_row() << "," << ptr->get_col() << ")";
492
493 if (loadNtimeLapse == 1) {
494 ptr->set_bool(pp_bool, false); // next cluster is set not active
496 }
497 else {
498 //rowPtr->set_status(1, true); // index
499 // |0 used index 1 to flag this stock activity
501 ptr->set_bool(pp_bool, true); //before populating make it available
503 }
504 }
505 arySAPrevious[i] = aryStockActive[i] = 0; // both ary are reset previous + current
506 }
507 }
508 else {//fout.flush() << "\n\t\t\t:2650:*> *1.1.1* VALID CLUSTER - Move to new Col:";
509 stockPtr->get_ptrLasTick()->set_bool(pp_bool, true);
510
511 if (ptr->get_col() < net->get_cols_in_page(ppDataIn, 'f')) {
512 stockPtr->tickInToNextCluster(); //points the next cluster
514 // << stockPtr->get_ptrLasTick()->get_ntCounter() << " bool: " << stockPtr->get_ptrLasTick()->get_boo
515 arySAPrevious[i] = aryStockActive[i]; //make a copy
517 }
518 else{///* this block checks if there are enough complete clusters for minDB
519 /* nice code, useful tips, do not erase
520 stockPtr->set_status(0, true); // SET TRUE ALWAYS AT THE BEGGINING its assume completed
522 //ptr1 = net->go_to(net, stockPtr->get_n_row(), 1); //TRAVERSE THE WHOLE RECORD from the begining
523 ptr1 = stockPtr->get_forward_ptr();
524 fout.flush() << "\tTraverse Row " << stockPtr->get_n_row() << ": ";
525 for (unsigned short ii = 1; ii <= net->get_cols_in_page(ppDataIn, 'f'); ii++) {
526 //cout << ptr1->get_bool(pp_bool);
527 if (stockPtr->get_status(0) && !ptr1->get_bool(pp_bool)) {
528 //cout << ptr1->get_bool(pp_bool) << " this record is incomplete-> disable ";
529 cout << " this record is incomplete-> disable ";
530 stockPtr->set_status(0, false);
531 break;
532 }
533 //cout << ptr1->get_bool(pp_bool);
534 ptr1 = ptr1->get_next_ptr();
535 }
536 if (stockPtr->get_status(0)) { //true
537 aryStockAux[stockPtr->get_n_row()] = 1; //selected for possible portfolio
538 ++counToPortfolio;
539 fout.flush() << "\n\t\t\t:2697: Record Complete Cluster - Time counToPortfolio: " << counToPortfolio
540 }
542 */
543 if (!lastCol) { fout.flush() << "\n\t\t\t:2607:*> Last Cluster Reached ";
544 lastCol = !lastCol;
545 }
546 aryStockAux[stockPtr->get_n_row()] = 1; //selected for possible portfolio
547 ++counToPortfolio;
548 //fout.flush() << "\n\t\t\t:2688: Record Complete Cluster - Time counToPortfolio: " << counToPortfolio <<
549 }
550 }
551 if(0 && counToPortfolio > minDB/2)
554
555 stockPtr = stockPtr->get_down_ptr();
556 }
557 //fout.flush() << "\n\t\t:2642:*> end of *1.1*";
558 if (0) { //useless block?
559 //----this block after checking integrity of current set of clusters
560 //not sure, previously done !!!
561 bool goodCluster(true); //check if previous round has the same set of stocks //
562 for (i = firstRow; i <= lastRow; ++i) {//error check for 1 and 2 they are different, take out of this loop
563 if (!aryStockActive[i]) { //stockPtr = stockPtr->get_down_ptr();
564 continue;
565 }
566 if (goodCluster && !(arySAPrevious[i] == aryStockActive[i])) { //if ary are different
567 goodCluster = !goodCluster; // not a good cluster not previous activity
568 break; //exit the for loop
569 }
570 //stockPtr = stockPtr->get_down_ptr();
571 }
572 ///-----
573 if (!goodCluster) { fout.flush() << "\n\t\t:2664: *1.1.0* discard previous round of clusters " ;
574 net->boundaries(net, ppDataIn, 'f', 1, arySAPrevious, pfR, plR);
575 stPtr = net->goto_row(net, ppDataIn, pfR, 'f'); // point at the beggining
576 for (i = pfR; i <= plR; ++i) {//error check for 1 and 2 they are different, take out of this loop
577 if (!arySAPrevious[i]) { stockPtr = stockPtr->get_down_ptr(); continue; }
578 arySAPrevious[i] = 0;
579 ptr = stockPtr->get_ptrLasTick(); //ptr to the current cluster
580 if (ptr->get_col() == 1)
581 ptr = net->go_to(net, ptr->get_row(), net->get_cols_in_page(ppDataIn, 'f'));
582 else
583 ptr = ptr->get_previous_ptr();
584 cout << "\n\t\t:1890: ptr to previous Cluster ---> " << ptr->get_col();
585
586 ptr->reset_ntCounter();//only resest data in cluster remains, previus was last input
587 fout.flush() << " bool/false counter/0 (" << ptr->get_row() << "," << ptr->get_col() << ")";
588
589 if (loadNtimeLapse == 1) {
590 ptr->set_bool(pp_bool, false); // next cluster is set not active
592 }
593 else {
594 //rowPtr->set_status(1, true); // index
595 // |0 used index 1 to flag this stock activity
597 ptr->set_bool(pp_bool, true); //before populating make it available
599 }
600 stPtr = stPtr->get_down_ptr();
601 }
602 fout.flush() << "\n\t\t:2348: New Previous";
603 countElementInAry(aryStockActive, true, pfR, plR);
604 stPtr = net->goto_row(net, ppDataIn, pfR, 'f'); // point at the beggining
605 for (i = pfR; i <= plR; ++i) // previous is set for next round
606 arySAPrevious[i] = aryStockActive[i];
607 }
608 }
609 }//system("pause");
610 if (counToPortfolio ) {
612 prevAry = 0; //no previous
613 stockPtr = net->goto_row(net, ppDataIn, firstRow, 'f'); // traverse the whole new set
614 for (i = firstRow; i <= lastRow; ++i) {// //first/last from aryStockActive
615 arySAPrevious[i] = aryStockActive[i] = 0; //
616 //fout.flush() << "\n\t\t\t:2684: RESET bool/false/counter/0 stockPtr-> " << setw(3) << stockPtr->get_n_row()
617 // << setw(8) << stockPtr->get_stock_name() << " clusters: "; // point at the beggining
618 ptr = stockPtr->get_forward_ptr(); //traverse the whole record
619 for (j = 1; j <= net->get_cols_in_page(ppDataIn, 'f'); ++j) {//traverse record only one entry, previous is
620 if (ptr->get_ntHead()) {
621 ptr->reset_ntCounter();//only resest data in cluster remains, previus was last input
622 //fout.flush() << " " << ptr->get_col();
623 if (loadNtimeLapse == 1) {
624 ptr->set_bool(pp_bool, false); // next cluster is set not active
627 }
628 else {
629 //rowPtr->set_status(1, true); // index
630 // |0 used index 1 to flag this stock activity
632 ptr->set_bool(pp_bool, true); //before populating make it available
634 }
635 }
636 ptr = ptr->get_next_ptr();
637 }
638 stockPtr->tickInPoinTo(stockPtr->get_forward_ptr()); // ok re-start from the beginning of the record
639 stockPtr = stockPtr->get_down_ptr();
640 }
641 //LABEL reload exsan
642 //net->kill_exsan(net); return;
643 }
644 else{
647 //net->kill_exsan(net); return;
648 check = 1;
649
650 }
651 }
652 }
653 if(prevAry && dbfileID >= 4 ) {
654 net->boundaries(net, ppDataIn, 'f', 1, arySAPrevious, pfR, plR);
655 fout.flush() << "\n\t\t:2752: END aryStockPREVIOUS firstRow: " << pfR << " lastRow: " << plR << "\t";
656 for (i = 1; i <= plR; ++i) { fout.flush() << arySAPrevious[i]; if (!(i % 5)) cout << " "; }
658 }
659
660 if(0){
661 //--------------------------------------------------------------------------
663 }
666 net->boundaries(net, ppDataIn, 'f', 1, arySAPrevious, pfR, plR);
668 /*
669 ndptrAry[0] = ndptrAry[1] = nullptr;
670 //ptrAry[0]->inOrderSearch_nt_ptr_minmax(ptrAry[0], ptrAry[0]->get_ntHead(), ndptrAry[0], ndptrAry[1], 'f', ppnt_time)
673 */
674 //----------------------------------HERE-----------------------------------------------
675 if(0) {
678 }
681 //if(counter > minDB*4){ cout << "\n\t:2182: counter: " << counter; //
682 //if (counter >= 2) { cout << "\n\t:2302: Ready - Complete Recordscounter counter >= 4 -- RESET is skipped"; //sh
683 if(counter > minDB + 10){ cout << "\n\t:2773: counter: " << counter; //
684 net->set_work_sheet(net, ppRTime, rows, cols);
689 //all clusters start at j = 1
690 stockPtr = net->goto_row(net, ppTime, firstRow, 'f'); // point at the beggining
691 for (i = firstRow; i <= lastRow; ++i) {//error check for 1 and 2 they are different, take out of this loop
692 if (!aryStockAux[i]) { stockPtr = stockPtr->get_down_ptr(); continue; }
693 //ptrAry[0] = stockPtr->get_ptrLasTick(); //ptr to the current cluster
694 //ptr = net->net_point_to(net, net->get_net_rows(), 1);
695 ptr = stockPtr->get_forward_ptr()->get_next_ptr(); //on j = 2
696 for (j = 1; j < net->get_cols_in_page(ppTime, 'f'); j++) { // j - 1 clusters
697 if (ptr->get_data(ppTime) < ptr->get_previous_ptr()->get_data(ppTime) ||
698 ptr->get_data(ppRTime) < ptr->get_previous_ptr()->get_data(ppRTime) ) {
699 --counter;
700 cout << "\n\t\t\t:2320: Reset - Discard this record of clusters Time not consistent j: " << j << "
701
702 ptrAry[0] = stockPtr->get_forward_ptr()->get_next_ptr(); //
703 for (j = 1; j <= net->get_cols_in_page(ppTime, 'f'); j++) {
704
705 ptrAry[0]->set_bool(pp_bool, false); // next cluster is set not active
706 ptrAry[0]->reset_ntCounter();//only resest data in cluster remains, previus was last input
708 ptrAry[0] = ptrAry[0]->get_next_ptr();
709 }
710 //set auxary this index zero
711 }
712
713 /*
714 for (i = firstRow; i <= lastRow; ++i) {//error check for 1 and 2 they are different, take out of this loo
715 if(ptrAry[0]->get_data(ppTime) < (ptrAry[0]->get_data(ppRtime ){
716 }
717 }
718 */
719 ptr = ptr->get_next_ptr();
720 }
721 //cout << endl;
722 stockPtr = stockPtr->get_down_ptr();
723 }
725 //------------- new block
726 }
728
729 //*
730 if(1){
731 stockPtr = net->goto_row(net, ppDataIn, firstRow, 'f'); // point at the beggining
733 if (!aryStockActive[i]) { stockPtr = stockPtr->get_down_ptr(); continue; } //it was aryStock.... unneccesary
735 //if (stockPtr->get_ptrLasTick()->get_ntHead()) { //only if there is a nt tree
736 stockPtr->get_ptrLasTick()->set_bool(pp_bool, false); // next cluster is set not active
737 stockPtr->get_ptrLasTick()->reset_ntCounter();//only resest data in cluster remains, previus was last inpu
739
740 if (loadNtimeLapse == 1) {
742 }
743 else {
744 //rowPtr->set_status(1, true); // index 0 used index 1 to flag this stock activity
746 stockPtr->get_ptrLasTick()->set_bool(pp_bool, true); //before populating make it available
748 << ") reseted pp_key_index:-> " << stockPtr->get_ptrLasTick()->get_ushort(pp_key_index);
749 }
750 //}
751
752 stockPtr = stockPtr->get_down_ptr(); //OK browse all DB
753 }
754 }
755 //*/
756 //system("pause");
757 //} while (stockPtr);
758 }
759
760 }
761 }
762 }//closes if (loadNtimeLapse && frameClk[1] ....
763 }
764 //else cout << "\n\t\t\t\t:2470: Invalid datum -not a number- Stock: " << setw(7) << stockID[s] << " " << val.get_token();
765 //*
766 if(1 && inData){
768 cout << "\n\t:2881: (inData)TIME STAMP ppTime"; net->displayMKT(net, ppTime, aryStock, nullptr, 0, 5, widthCol, presCol - 2);
769 inData = 0; // to show only once¡????
770 }
771 //system("pause");
772 //*/
Comments
Post a Comment