ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/socket/image.C
(Generate patch)

Comparing deliantra/server/socket/image.C (file contents):
Revision 1.44 by root, Sun Jul 1 05:00:20 2007 UTC vs.
Revision 1.46 by root, Fri Jul 6 03:52:51 2007 UTC

211 211
212 ix.pri = pri; 212 ix.pri = pri;
213 ix.idx = idx; 213 ix.idx = idx;
214 ix.ofs = d->data.size (); 214 ix.ofs = d->data.size ();
215 215
216 auto (pos, ns->ixface.end ());
217
218 if (ns->fxix < 2)
219 {
220 // gcfclient does not support prioritising, older cfplus versions
221 // do not support interleaved transfers.
222 if (!ns->ixface.empty ())
223 pos = ns->ixface.end () - 1;
224 }
225 else
226 {
216 // the by far most common case will be to insert 227 // the by far most common case will be to insert
217 // right at the end, so no looping. 228 // near the end, so little looping.
218 auto (i, ns->ixface.end ()); 229 while (pos != ns->ixface.begin ())
219 for (; i != ns->ixface.begin (); ) 230 {
220 if (pri >= (--i)->pri) 231 --pos;
232
233 // sort within 2k bins, to slightly prefer smaller images
234 if (pri > pos->pri || (pri == pos->pri && (ix.ofs >> 11) <= (pos->ofs >> 11)))
235 {
236 ++pos;
221 break; 237 break;
238 }
239 }
240 }
222 241
223 ns->ixface.insert (i, ix); 242 ns->ixface.insert (pos, ix);
243
244#if 0
245 for (auto (i, ns->ixface.begin ()); i != ns->ixface.end (); ++i)
246 fprintf (stderr, "<%d,%d> ", i->pri, i->ofs);
247 fprintf (stderr, "\n");
248#endif
224} 249}
225 250
226/** 251/**
227 * Tells client the picture it has to use 252 * Tells client the picture it has to use
228 * to smooth a picture number given as argument. 253 * to smooth a picture number given as argument.

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines