Handling Large Lists, and the Buffer Limit

Handling Large Lists, and the Buffer Limit Mercutio Fri, 2011-05-06 10:48

Let's assume you have a large player base, with say... ~255 players that actively get used. And let's assume they are all in an attribute, except for the staffers. This way, during this exercise, there will be a stable amount of output.

Now, let's assume we wanna display information about these players, and stick them into an align()ed area. Most new coders would use iter() or map() to show them all. But they run into a problem! Due to the way align() works, one reaches the buffer limit extremely fast, and one will be cut off around #118 or so.

Sure, one can increase the buffer length to twice its size by altering mushtype.h, but that is nowhere near ideal, and will crash your game over a 2x increase. So... how do you handle this?

The Attribute

&masterlist OBJ=#10 #11 #12 #13 #14 #15 #16 #17 #18 #19 #20 #21 #22 #23 #24 #25 #26 #27 #28 #29 #30 #31
 #32 #33 #34 #35 #36 #37 #38 #39 #40 #41 #42 #43 #44 #45 #46 #47 #48 #49 #50 #51 #52 #53 #54 #55 #56 #57
 #58 #59 #60 #61 #62 #63 #64 #65 #66 #67 #68 #69 #70 #71 #72 #73 #74 #75 #76 #77 #78 #79 #80 #81 #82 #83
 #84 #85 #86 #87 #88 #89 #90 #91 #92 #93 #94 #95 #96 #97 #98 #99 #100 #101 #102 #103 #104 #105 #106 #107
 #108 #109 #110 #111 #112 #113 #114 #115 #116 #117 #118 #119 #120 #121 #122 #123 #124 #125 #126 #127
 #128 #129 #130 #131 #132 #133 #134 #135 #136 #137 #138 #139 #140 #141 #142 #143 #144 #145 #146 #147
 #148 #149 #150 #151 #152 #153 #154 #155 #156 #157 #158 #159 #160 #161 #162 #163 #164 #165 #166 #167
 #168 #169 #170 #171 #172 #173 #174 #175 #176 #177 #178 #179 #180 #181 #182 #183 #184 #185 #186 #187
 #188 #189 #190 #191 #192 #193 #194 #195 #196 #197 #198 #199 #200 #201 #202 #203 #204 #205 #206 #207
 #208 #209 #210 #211 #212 #213 #214 #215 #216 #217 #218 #219 #220 #221 #222 #223 #224 #225 #226 #227
 #228 #229 #230 #231 #232 #233 #234 #235 #236 #237 #238 #239 #240 #241 #242 #243 #244 #245 #246 #247
 #248 #249 #250 #251 #252 #253 #254 #255

You can easily output this with:

@fo me=&masterlist OBJ=[iter(lnum(10,255),#%i0)]

The Align Code

&align OBJ=align(30 47,name(%0),%0)

One way to get around this, is to use an @command instead of using just functions. Because of the way @dolist works, each time you make it run its command list, it's a new queue buffer. So the solution is as follows:

@dolist get(OBJ/masterlist)=@pemit target=u(OBJ/align,%iL)

How would you do this?