annotate foosdk/sdk/pfc/bsearch_inline.h @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1 #pragma once
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3 namespace pfc {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5 //deprecated
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 template<typename t_callback>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8 inline bool bsearch_inline_t(t_size p_count, t_callback && p_callback,t_size & p_result)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 t_size max = p_count;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11 t_size min = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12 t_size ptr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13 while(min<max)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 ptr = min + ( (max-min) >> 1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 int result = p_callback.test(ptr);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17 if (result<0) min = ptr + 1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18 else if (result>0) max = ptr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21 p_result = ptr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25 p_result = min;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 template<typename t_buffer, typename t_value, typename pred_t>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30 inline bool bsearch_simple_inline_t(t_buffer&& p_buffer, t_size p_count, t_value const& p_value, pred_t && pred, t_size& p_result)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 t_size max = p_count;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33 t_size min = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34 t_size ptr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35 while (min < max)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 ptr = min + ((max - min) >> 1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 int test = pred(p_value, p_buffer[ptr]);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39 if ( test > 0 ) min = ptr + 1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40 else if ( test < 0 ) max = ptr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43 p_result = ptr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47 p_result = min;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
50
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
51 template<typename t_buffer,typename t_value>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
52 inline bool bsearch_simple_inline_t(t_buffer && p_buffer,t_size p_count,t_value && p_value,t_size & p_result)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
53 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
54 t_size max = p_count;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
55 t_size min = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
56 t_size ptr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
57 while(min<max)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
58 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
59 ptr = min + ( (max-min) >> 1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
60 if (p_value > p_buffer[ptr]) min = ptr + 1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
61 else if (p_value < p_buffer[ptr]) max = ptr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
62 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
63 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
64 p_result = ptr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
65 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
66 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
67 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
68 p_result = min;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
69 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
70 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
71
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
72 }