MCPcopy Create free account
hub / github.com/apache/trafficserver / sort

Method sort

src/iocore/cache/Store.cc:82–160  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

80}
81
82void
83Store::sort()
84{
85 Span **vec = static_cast<Span **>(alloca(sizeof(Span *) * n_spans));
86 memset(vec, 0, sizeof(Span *) * n_spans);
87 for (unsigned i = 0; i < n_spans; i++) {
88 vec[i] = spans[i];
89 spans[i] = nullptr;
90 }
91
92 // sort by device
93
94 unsigned n = 0;
95 for (unsigned i = 0; i < n_spans; i++) {
96 for (Span *sd = vec[i]; sd; sd = vec[i]) {
97 vec[i] = vec[i]->link.next;
98 for (unsigned d = 0; d < n; d++) {
99 if (sd->disk_id == spans[d]->disk_id) {
100 sd->link.next = spans[d];
101 spans[d] = sd;
102 goto Ldone;
103 }
104 }
105 spans[n++] = sd;
106 Ldone:;
107 }
108 }
109 n_spans = n;
110
111 // sort by pathname x offset
112
113 for (unsigned i = 0; i < n_spans; i++) {
114 Lagain:
115 Span *prev = nullptr;
116 for (Span *sd = spans[i]; sd;) {
117 Span *next = sd->link.next;
118 if (next &&
119 ((strcmp(sd->pathname, next->pathname) < 0) || (!strcmp(sd->pathname, next->pathname) && sd->offset > next->offset))) {
120 if (!prev) {
121 spans[i] = next;
122 sd->link.next = next->link.next;
123 next->link.next = sd;
124 } else {
125 prev->link.next = next;
126 sd->link.next = next->link.next;
127 next->link.next = sd;
128 }
129 goto Lagain;
130 }
131 prev = sd;
132 sd = next;
133 }
134 }
135
136 // merge adjacent spans
137
138 for (unsigned i = 0; i < n_spans; i++) {
139 for (Span *sd = spans[i]; sd;) {

Callers 3

genconfig.pyFile · 0.45
dumpMethod · 0.45

Calls 3

memsetFunction · 0.85
strcmpFunction · 0.85
endMethod · 0.45

Tested by

no test coverage detected