亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? lstrlib.cpp

?? 這個是symbian下的一個蠻龐大的3D游戲源代碼!對于學習3D開發的人有很大的幫助!
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/*
** $Id: lstrlib.cpp,v 1.1.1.1 2006/02/20 15:43:38 kajala Exp $
** Standard library for string operations and pattern-matching
** See Copyright Notice in lua.h
*/


#include <ctype.h>
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define lstrlib_c

#include "lua.h"

#include "lauxlib.h"
#include "lualib.h"


/* macro to `unsign' a character */
#ifndef uchar
#define uchar(c)        ((unsigned char)(c))
#endif


typedef long sint32;	/* a signed version for size_t */


static int str_len (lua_State *L) {
  size_t l;
  luaL_checklstring(L, 1, &l);
  lua_pushnumber(L, (lua_Number)l);
  return 1;
}


static sint32 posrelat (sint32 pos, size_t len) {
  /* relative string position: negative means back from end */
  return (pos>=0) ? pos : (sint32)len+pos+1;
}


static int str_sub (lua_State *L) {
  size_t l;
  const char *s = luaL_checklstring(L, 1, &l);
  sint32 start = posrelat(luaL_checklong(L, 2), l);
  sint32 end = posrelat(luaL_optlong(L, 3, -1), l);
  if (start < 1) start = 1;
  if (end > (sint32)l) end = (sint32)l;
  if (start <= end)
    lua_pushlstring(L, s+start-1, end-start+1);
  else lua_pushliteral(L, "");
  return 1;
}


static int str_lower (lua_State *L) {
  size_t l;
  size_t i;
  luaL_Buffer b;
  const char *s = luaL_checklstring(L, 1, &l);
  luaL_buffinit(L, &b);
  for (i=0; i<l; i++)
    luaL_putchar(&b, tolower(uchar(s[i])));
  luaL_pushresult(&b);
  return 1;
}


static int str_upper (lua_State *L) {
  size_t l;
  size_t i;
  luaL_Buffer b;
  const char *s = luaL_checklstring(L, 1, &l);
  luaL_buffinit(L, &b);
  for (i=0; i<l; i++)
    luaL_putchar(&b, toupper(uchar(s[i])));
  luaL_pushresult(&b);
  return 1;
}

static int str_rep (lua_State *L) {
  size_t l;
  luaL_Buffer b;
  const char *s = luaL_checklstring(L, 1, &l);
  int n = luaL_checkint(L, 2);
  luaL_buffinit(L, &b);
  while (n-- > 0)
    luaL_addlstring(&b, s, l);
  luaL_pushresult(&b);
  return 1;
}


static int str_byte (lua_State *L) {
  size_t l;
  const char *s = luaL_checklstring(L, 1, &l);
  sint32 pos = posrelat(luaL_optlong(L, 2, 1), l);
  if (pos <= 0 || (size_t)(pos) > l)  /* index out of range? */
    return 0;  /* no answer */
  lua_pushnumber(L, uchar(s[pos-1]));
  return 1;
}


static int str_char (lua_State *L) {
  int n = lua_gettop(L);  /* number of arguments */
  int i;
  luaL_Buffer b;
  luaL_buffinit(L, &b);
  for (i=1; i<=n; i++) {
    int c = luaL_checkint(L, i);
    luaL_argcheck(L, uchar(c) == c, i, "invalid value");
    luaL_putchar(&b, uchar(c));
  }
  luaL_pushresult(&b);
  return 1;
}


static int writer (lua_State *L, const void* b, size_t size, void* B) {
  (void)L;
  luaL_addlstring((luaL_Buffer*) B, (const char *)b, size);
  return 1;
}


static int str_dump (lua_State *L) {
  luaL_Buffer b;
  luaL_checktype(L, 1, LUA_TFUNCTION);
  luaL_buffinit(L,&b);
  if (!lua_dump(L, writer, &b))
    luaL_error(L, "unable to dump given function");
  luaL_pushresult(&b);
  return 1;
}



/*
** {======================================================
** PATTERN MATCHING
** =======================================================
*/

#ifndef MAX_CAPTURES
#define MAX_CAPTURES 32  /* arbitrary limit */
#endif


#define CAP_UNFINISHED	(-1)
#define CAP_POSITION	(-2)

typedef struct MatchState {
  const char *src_init;  /* init of source string */
  const char *src_end;  /* end (`\0') of source string */
  lua_State *L;
  int level;  /* total number of captures (finished or unfinished) */
  struct {
    const char *init;
    sint32 len;
  } capture[MAX_CAPTURES];
} MatchState;


#define ESC		'%'
#define SPECIALS	"^$*+?.([%-"


static int check_capture (MatchState *ms, int l) {
  l -= '1';
  if (l < 0 || l >= ms->level || ms->capture[l].len == CAP_UNFINISHED)
    return luaL_error(ms->L, "invalid capture index");
  return l;
}


static int capture_to_close (MatchState *ms) {
  int level = ms->level;
  for (level--; level>=0; level--)
    if (ms->capture[level].len == CAP_UNFINISHED) return level;
  return luaL_error(ms->L, "invalid pattern capture");
}


static const char *luaI_classend (MatchState *ms, const char *p) {
  switch (*p++) {
    case ESC: {
      if (*p == '\0')
        luaL_error(ms->L, "malformed pattern (ends with `%')");
      return p+1;
    }
    case '[': {
      if (*p == '^') p++;
      do {  /* look for a `]' */
        if (*p == '\0')
          luaL_error(ms->L, "malformed pattern (missing `]')");
        if (*(p++) == ESC && *p != '\0')
          p++;  /* skip escapes (e.g. `%]') */
      } while (*p != ']');
      return p+1;
    }
    default: {
      return p;
    }
  }
}


static int match_class (int c, int cl) {
  int res;
  switch (tolower(cl)) {
    case 'a' : res = isalpha(c); break;
    case 'c' : res = iscntrl(c); break;
    case 'd' : res = isdigit(c); break;
    case 'l' : res = islower(c); break;
    case 'p' : res = ispunct(c); break;
    case 's' : res = isspace(c); break;
    case 'u' : res = isupper(c); break;
    case 'w' : res = isalnum(c); break;
    case 'x' : res = isxdigit(c); break;
    case 'z' : res = (c == 0); break;
    default: return (cl == c);
  }
  return (islower(cl) ? res : !res);
}


static int matchbracketclass (int c, const char *p, const char *ec) {
  int sig = 1;
  if (*(p+1) == '^') {
    sig = 0;
    p++;  /* skip the `^' */
  }
  while (++p < ec) {
    if (*p == ESC) {
      p++;
      if (match_class(c, *p))
        return sig;
    }
    else if ((*(p+1) == '-') && (p+2 < ec)) {
      p+=2;
      if (uchar(*(p-2)) <= c && c <= uchar(*p))
        return sig;
    }
    else if (uchar(*p) == c) return sig;
  }
  return !sig;
}


static int luaI_singlematch (int c, const char *p, const char *ep) {
  switch (*p) {
    case '.': return 1;  /* matches any char */
    case ESC: return match_class(c, *(p+1));
    case '[': return matchbracketclass(c, p, ep-1);
    default:  return (uchar(*p) == c);
  }
}


static const char *match (MatchState *ms, const char *s, const char *p);


static const char *matchbalance (MatchState *ms, const char *s,
                                   const char *p) {
  if (*p == 0 || *(p+1) == 0)
    luaL_error(ms->L, "unbalanced pattern");
  if (*s != *p) return 0;
  else {
    int b = *p;
    int e = *(p+1);
    int cont = 1;
    while (++s < ms->src_end) {
      if (*s == e) {
        if (--cont == 0) return s+1;
      }
      else if (*s == b) cont++;
    }
  }
  return 0;  /* string ends out of balance */
}


static const char *max_expand (MatchState *ms, const char *s,
                                 const char *p, const char *ep) {
  sint32 i = 0;  /* counts maximum expand for item */
  while ((s+i)<ms->src_end && luaI_singlematch(uchar(*(s+i)), p, ep))
    i++;
  /* keeps trying to match with the maximum repetitions */
  while (i>=0) {
    const char *res = match(ms, (s+i), ep+1);
    if (res) return res;
    i--;  /* else didn't match; reduce 1 repetition to try again */
  }
  return 0;
}


static const char *min_expand (MatchState *ms, const char *s,
                                 const char *p, const char *ep) {
  for (;;) {
    const char *res = match(ms, s, ep+1);
    if (res != 0)
      return res;
    else if (s<ms->src_end && luaI_singlematch(uchar(*s), p, ep))
      s++;  /* try with one more repetition */
    else return 0;
  }
}


static const char *start_capture (MatchState *ms, const char *s,
                                    const char *p, int what) {
  const char *res;
  int level = ms->level;
  if (level >= MAX_CAPTURES) luaL_error(ms->L, "too many captures");
  ms->capture[level].init = s;
  ms->capture[level].len = what;
  ms->level = level+1;
  if ((res=match(ms, s, p)) == 0)  /* match failed? */
    ms->level--;  /* undo capture */
  return res;
}


static const char *end_capture (MatchState *ms, const char *s,
                                  const char *p) {
  int l = capture_to_close(ms);
  const char *res;
  ms->capture[l].len = s - ms->capture[l].init;  /* close capture */
  if ((res = match(ms, s, p)) == 0)  /* match failed? */
    ms->capture[l].len = CAP_UNFINISHED;  /* undo capture */
  return res;
}


static const char *match_capture (MatchState *ms, const char *s, int l) {
  size_t len;
  l = check_capture(ms, l);
  len = ms->capture[l].len;
  if ((size_t)(ms->src_end-s) >= len &&
      memcmp(ms->capture[l].init, s, len) == 0)
    return s+len;
  else return 0;
}


static const char *match (MatchState *ms, const char *s, const char *p) {
  init: /* using goto's to optimize tail recursion */
  switch (*p) {
    case '(': {  /* start capture */
      if (*(p+1) == ')')  /* position capture? */
        return start_capture(ms, s, p+2, CAP_POSITION);
      else
        return start_capture(ms, s, p+1, CAP_UNFINISHED);
    }
    case ')': {  /* end capture */
      return end_capture(ms, s, p+1);
    }
    case ESC: {
      switch (*(p+1)) {
        case 'b': {  /* balanced string? */
          s = matchbalance(ms, s, p+2);
          if (s == 0) return 0;
          p+=4; goto init;  /* else return match(ms, s, p+4); */
        }
        case 'f': {  /* frontier? */
          const char *ep; char previous;
          p += 2;
          if (*p != '[')
            luaL_error(ms->L, "missing `[' after `%%f' in pattern");
          ep = luaI_classend(ms, p);  /* points to what is next */
          previous = (s == ms->src_init) ? '\0' : *(s-1);
          if (matchbracketclass(uchar(previous), p, ep-1) ||
             !matchbracketclass(uchar(*s), p, ep-1)) return 0;
          p=ep; goto init;  /* else return match(ms, s, ep); */
        }
        default: {
          if (isdigit(uchar(*(p+1)))) {  /* capture results (%0-%9)? */
            s = match_capture(ms, s, *(p+1));
            if (s == 0) return 0;
            p+=2; goto init;  /* else return match(ms, s, p+2) */
          }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美r级在线观看| 免费看日韩精品| 看电影不卡的网站| 精品动漫一区二区三区在线观看 | 悠悠色在线精品| 奇米精品一区二区三区在线观看| 欧美无砖专区一中文字| 亚洲精品免费在线| 欧美亚洲国产一区二区三区va| 欧美国产精品久久| 高清国产午夜精品久久久久久| 精品国产区一区| 国产精品66部| 亚洲国产经典视频| www.在线欧美| 一区二区三区中文字幕在线观看| 成人黄色电影在线 | 国产精品伦一区二区三级视频| 国产精品996| 中文字幕av一区二区三区| 国产一区二区三区四区五区美女| 久久久久久99久久久精品网站| 91蝌蚪porny九色| 国产精品国产三级国产普通话99| 91在线码无精品| 日韩av午夜在线观看| 欧美电视剧在线看免费| 91小视频免费观看| 国模大尺度一区二区三区| 亚洲精品国产一区二区三区四区在线 | 欧美影视一区在线| 日本成人中文字幕| 1024亚洲合集| 欧美高清dvd| 懂色av中文字幕一区二区三区| 一区二区视频免费在线观看| 91小宝寻花一区二区三区| 日本成人中文字幕在线视频| 亚洲色图制服丝袜| 2024国产精品| 欧美一级爆毛片| 欧洲视频一区二区| 成人精品一区二区三区四区| 激情图片小说一区| 日韩中文字幕区一区有砖一区| 国产精品人成在线观看免费| 日韩欧美亚洲一区二区| 69久久夜色精品国产69蝌蚪网| 91啪九色porn原创视频在线观看| 国产a区久久久| 国产成人综合网站| 成人精品电影在线观看| 国产aⅴ综合色| zzijzzij亚洲日本少妇熟睡| 懂色av一区二区在线播放| 成人妖精视频yjsp地址| 91视频com| 亚洲日本免费电影| 亚洲成人av电影| 成人激情文学综合网| 在线观看日韩一区| 欧美精品一区二区不卡| 国产网红主播福利一区二区| 亚洲日本青草视频在线怡红院| 日本伊人色综合网| 97国产一区二区| 国产日产精品一区| 亚洲第一福利一区| 粉嫩在线一区二区三区视频| 欧美自拍丝袜亚洲| 26uuu国产电影一区二区| 亚洲伦理在线免费看| 日韩一区二区高清| 国产精品国产三级国产三级人妇| 亚洲午夜成aⅴ人片| 国产精品18久久久| 亚洲精品一二三四区| 久久国产乱子精品免费女| www.99精品| 国产精品福利电影一区二区三区四区| 亚洲激情自拍视频| 成人av电影在线观看| 日韩一区二区三区免费观看| 国产精品国产三级国产aⅴ中文| 性久久久久久久久久久久| 日本韩国精品一区二区在线观看| 国产精品久线观看视频| 国产成人av一区二区三区在线| 日韩欧美综合在线| 精品一区二区三区免费毛片爱| 欧美日韩免费不卡视频一区二区三区| 亚洲夂夂婷婷色拍ww47| 92精品国产成人观看免费| 中文字幕中文字幕在线一区| 91欧美一区二区| 亚洲女子a中天字幕| 99riav一区二区三区| 亚洲人123区| 国产91丝袜在线18| 欧美日韩国产成人在线91| 午夜精品一区在线观看| 欧美电影免费观看高清完整版在 | 欧美国产一区二区| 97se狠狠狠综合亚洲狠狠| 亚洲欧洲av在线| 欧美日韩综合色| 国产美女一区二区| 国产丝袜欧美中文另类| 国产精品亚洲一区二区三区妖精| 国产日本一区二区| 91亚洲精品久久久蜜桃网站| 亚洲一区二区成人在线观看| 欧美一卡二卡三卡| 色呦呦国产精品| 国产精品亚洲а∨天堂免在线| 欧美日韩国产综合草草| 日韩福利电影在线| 国产视频一区二区在线| 一本一道久久a久久精品| 日韩av一级电影| 亚洲免费观看高清完整版在线观看 | 综合激情网...| 精品美女一区二区| 欧洲生活片亚洲生活在线观看| 国产九色sp调教91| 亚洲在线视频网站| 久久蜜桃一区二区| 欧美一区二区三区白人| 色婷婷国产精品久久包臀| 蜜臀久久久久久久| 亚洲午夜久久久| 日韩毛片在线免费观看| 久久综合一区二区| 日韩一区二区三区视频在线| 欧美群妇大交群中文字幕| 波多野洁衣一区| 成人黄色一级视频| 成人h版在线观看| 黑人精品欧美一区二区蜜桃| 亚洲天天做日日做天天谢日日欢| 中文字幕一区二区不卡| 欧美激情一区三区| 国产精品国产三级国产三级人妇| 国产精品传媒视频| 日韩精品一二三四| 久久国产尿小便嘘嘘| 97se亚洲国产综合自在线观| 欧美日本免费一区二区三区| 精品久久久久久综合日本欧美| 国产欧美日韩在线视频| 亚洲午夜三级在线| 日韩精品一卡二卡三卡四卡无卡| 制服丝袜在线91| 91丨porny丨中文| 欧美大胆一级视频| 精品国产网站在线观看| 91超碰这里只有精品国产| 欧美日韩你懂的| 国产精品色噜噜| 精品一区二区三区的国产在线播放| 91蜜桃视频在线| 亚洲欧美怡红院| 国产一区二区三区四区五区入口| 91在线国产福利| 欧美xfplay| 亚洲成人中文在线| 成人性生交大合| 日韩欧美一级二级| 亚洲国产精品影院| 国产 欧美在线| 日韩欧美中文字幕公布| 伊人一区二区三区| www.亚洲国产| 精品国产乱码久久久久久闺蜜 | 视频一区二区三区入口| 成人黄色在线看| 中文字幕欧美日韩一区| 久久99国产精品麻豆| 欧美美女网站色| 日本不卡高清视频| 日韩欧美黄色影院| 国产一区二区三区精品欧美日韩一区二区三区 | 粉嫩在线一区二区三区视频| 日韩精品一区在线观看| 天使萌一区二区三区免费观看| 色狠狠av一区二区三区| 日韩一区有码在线| 在线观看中文字幕不卡| 亚洲一区二区三区四区在线免费观看 | 97se狠狠狠综合亚洲狠狠| 亚洲人成网站影音先锋播放| 91丨九色丨蝌蚪丨老版| 亚洲一区二区成人在线观看| 日韩欧美在线1卡| 一本久道中文字幕精品亚洲嫩| 亚洲在线免费播放| 久久免费看少妇高潮| 欧美日韩亚洲国产综合| 国产高清不卡二三区| 午夜精品久久久久久久99水蜜桃|