diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2014-05-14 11:20:17 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2014-05-14 11:20:17 -0300 |
commit | 965993da071ff38f14ec49f42ef989d66d717c64 (patch) | |
tree | ac32a96cff9d95cfce8fb22b1cf8861a85a73944 /lapi.c | |
parent | 5a5a834975d135054e803b90711fcb9deb6511b8 (diff) | |
download | lua-965993da071ff38f14ec49f42ef989d66d717c64.tar.gz lua-965993da071ff38f14ec49f42ef989d66d717c64.tar.bz2 lua-965993da071ff38f14ec49f42ef989d66d717c64.zip |
comments added to 'lua_rotate'
Diffstat (limited to 'lapi.c')
-rw-r--r-- | lapi.c | 18 |
1 files changed, 11 insertions, 7 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: lapi.c,v 2.209 2014/05/01 18:21:32 roberto Exp roberto $ | 2 | ** $Id: lapi.c,v 2.210 2014/05/13 19:40:28 roberto Exp roberto $ |
3 | ** Lua API | 3 | ** Lua API |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -195,17 +195,21 @@ static void reverse (lua_State *L, StkId from, StkId to) { | |||
195 | } | 195 | } |
196 | 196 | ||
197 | 197 | ||
198 | /* | ||
199 | ** Let x = AB, where A is a prefix of length 'n'. Then, | ||
200 | ** rotate x n == BA. But BA == (A^r . B^r)^r. | ||
201 | */ | ||
198 | LUA_API void lua_rotate (lua_State *L, int idx, int n) { | 202 | LUA_API void lua_rotate (lua_State *L, int idx, int n) { |
199 | StkId p, t, m; | 203 | StkId p, t, m; |
200 | lua_lock(L); | 204 | lua_lock(L); |
201 | t = L->top - 1; | 205 | t = L->top - 1; /* end of stack segment being rotated */ |
202 | p = index2addr(L, idx); | 206 | p = index2addr(L, idx); /* start of segment */ |
203 | m = (n >= 0 ? t - n : p - n - 1); | 207 | m = (n >= 0 ? t - n : p - n - 1); /* end of prefix */ |
204 | api_checkstackindex(L, idx, p); | 208 | api_checkstackindex(L, idx, p); |
205 | api_check(L, p <= m + 1 && m <= t, "invalid 'n'"); | 209 | api_check(L, p <= m + 1 && m <= t, "invalid 'n'"); |
206 | reverse(L, p, m); | 210 | reverse(L, p, m); /* reverse the prefix with length 'n' */ |
207 | reverse(L, m + 1, t); | 211 | reverse(L, m + 1, t); /* reverse the suffix */ |
208 | reverse(L, p, t); | 212 | reverse(L, p, t); /* reverse the entire segment */ |
209 | lua_unlock(L); | 213 | lua_unlock(L); |
210 | } | 214 | } |
211 | 215 | ||