示例#1
0
 private void ResetCh(SLock_t slock)
 {
     ch      = slock.ch;
     chBytes = slock.chBytes;
     pos     = slock.pos;
     line    = slock.line;
     buffer.LockReset();
 }
示例#2
0
    private SLock_t LockCh()
    {
        SLock_t slock = new SLock_t();

        slock.ch      = ch;
        slock.chBytes = chBytes;
        slock.pos     = pos;
        slock.line    = line;
        slock.col     = col;
        buffer.Lock();
        return(slock);
    }
示例#3
0
文件: Scanner.cs 项目: snowyu/cocoxml
 private void UnlockCh(SLock_t slock)
 {
     buffer.Unlock();
 }
示例#4
0
文件: Scanner.cs 项目: snowyu/cocoxml
 private void ResetCh(SLock_t slock)
 {
     ch = slock.ch;
     chBytes = slock.chBytes;
     pos = slock.pos;
     line = slock.line;
     buffer.LockReset();
 }
示例#5
0
文件: Scanner.cs 项目: snowyu/cocoxml
 private SLock_t LockCh()
 {
     SLock_t slock = new SLock_t();
     slock.ch = ch;
     slock.chBytes = chBytes;
     slock.pos = pos;
     slock.line = line;
     slock.col = col;
     buffer.Lock();
     return slock;
 }
示例#6
0
    private bool Comment(CcsComment_t c)
    {
        SLock_t slock = null;
        int     level = 1, line0 = line;

        if (c.start[1] != 0)
        {
            slock = LockCh(); GetCh();
            if (ch != c.start[1])
            {
                ResetCh(slock);
                return(false);
            }
            UnlockCh(slock);
        }
        GetCh();
        for (;;)
        {
            if (ch == c.end[0])
            {
                if (c.end[1] == 0)
                {
                    if (--level == 0)
                    {
                        break;
                    }
                }
                else
                {
                    slock = LockCh(); GetCh();
                    if (ch == c.end[1])
                    {
                        UnlockCh(slock);
                        if (--level == 0)
                        {
                            break;
                        }
                    }
                    else
                    {
                        ResetCh(slock);
                    }
                }
            }
            else if (c.nested && ch == c.start[0])
            {
                if (c.start[1] == 0)
                {
                    ++level;
                }
                else
                {
                    slock = LockCh(); GetCh();
                    if (ch == c.start[1])
                    {
                        UnlockCh(slock);
                        ++level;
                    }
                    else
                    {
                        ResetCh(slock);
                    }
                }
            }
            else if (ch == CcsBuffer_t.EoF)
            {
                return(true);
            }
            GetCh();
        }
        oldEols = line - line0;
        GetCh();
        return(true);
    }
示例#7
0
 private void UnlockCh(SLock_t slock)
 {
     buffer.Unlock();
 }