Subversion Repository Public Repository

WOX2

1
2
3
4
5
6
7
8
9
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
using System;

/// <header>
/// <wox>
///     <version>1.0</version>
///     <author>Carlos R. Jaimez Gonzalez</author>
///     <author>Simon M. Lucas</author>
///     <site>http://woxserializer.sourceforge.net/</site>
/// </wox>
/// <wox>
///     <version>1.5</version>
///     <author>Steven M Lewis</author>
/// </wox>
/// <wox>
///     <version>2.0</version>
///     <author>George A Smith</author>
///     <svn>http://woxserializer.sourceforge.net/</svn>
///     <note>XML form for vs 2 is more compact and therefor incompatible with vs 1</note>
/// </wox>
/// </header>

namespace wox.serial
{
    public class CharSource
    {
        private readonly string mSource;
        private int mFrom;
        private readonly int mTo;

        public CharSource(string pSource, int pFrom)
        {
            mSource = pSource ?? "";
            if ((mFrom = pFrom) < 0)
            {
                throw new ArgumentException("'From' not allowed to be negative");
            }
            mTo = mSource.Length;
        }

        public CharSource(string pSource)
            : this(pSource, 0)
        {
        }

        public CharSource(string pSource, int pFrom, int pTo)
            : this(pSource, pFrom)
        {
            if (pTo > mTo)
            {
                throw new ArgumentException("'To' not allowed to be greater than the length of the 'Source' string");
            }
            if (pTo < 0)
            {
                mTo += pTo;
            }
            else
            {
                mTo = pTo;
            }
        }

        public bool AnyRemaining()
        {
            return (mFrom < mTo);
        }

        public int Peek()
        {
            return AnyRemaining() ? mSource[mFrom] : -1;
        }

        public int Get()
        {
            return AnyRemaining() ? mSource[mFrom++] : -1;
        }

        public string GetUpTo(char c)
        {
            int at = mSource.IndexOf(c, mFrom);
            if (at == -1)
            {
                return "";
            }
            string rv = mSource.Substring(mFrom, at);
            mFrom = at;
            return rv;
        }

        public bool ConsumeSpaces()
        {
            while (Peek() == ' ')
            {
                mFrom++;
            }
            return AnyRemaining();
        }

        public string GetUpToNonVisible7BitAscii()
        {
            if (!AnyRemaining())
            {
                return "";
            }
            int zFrom = mFrom;
            for (int c = Peek(); (c != -1) && ((' ' < c) && (c <= 126)); c = Peek())
            {
                mFrom++;
            }
            return mSource.Substring(zFrom, mFrom);
        }

        public bool ConsumeNonVisible7BitAscii()
        {
            for (int c = Peek(); (c != -1) && ((c <= ' ') || (126 < c)); c = Peek())
            {
                mFrom++;
            }
            return AnyRemaining();
        }

        public int GetFrom()
        {
            return mFrom;
        }

        public int GetLastFrom()
        {
            return mFrom - 1;
        }

        public override string ToString()
        {
            return mSource.Substring(mFrom, mTo);
        }
    }
}

Commits for WOX2/trunk/CSharp/src/wox/serial/CharSource.cs

Diff revisions: vs.
Revision Author Commited Message
14 Diff Diff GeorgeS picture GeorgeS Fri 19 Feb, 2010 19:15:03 +0000
3 GeorgeS picture GeorgeS Thu 04 Feb, 2010 23:53:47 +0000