blob: f7a7e41096ad53b1acec5777796b7a1275b5b435 (
plain)
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
|
/****************************************************************************
**
** Copyright (C) 1999-2001 NVIDIA Corporation.
** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt 3D Studio.
**
** $QT_BEGIN_LICENSE:GPL-EXCEPT$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/
#include "Qt3DSCommonPrecompile.h"
#include "StringTokenizer.h"
using namespace Q3DStudio;
//==============================================================================
/**
* formats inString so it is a correct delimited string using inToken
* @param inToken the token that delimets the string
* @param inString theString containing the delimited items yo
*/
CStringTokenizer::CStringTokenizer(Q3DStudio::CString inString, Q3DStudio::CString inToken)
{
// If the first of the string is a token extract it off until there is no token at the first of
// the string
Q3DStudio::CString theTempString = inString.Extract(0, inToken.Length());
while (inToken.Length() && theTempString == inToken) {
inString = inString.Extract(inToken.Length());
theTempString = inString.Extract(0, inToken.Length());
}
// Do the same thing for the end part of the string
theTempString = inString.Extract(inString.Length() - 1 - inToken.Length());
while (theTempString == inToken) {
inString = inString.Extract(0, inString.Length() - inToken.Length());
theTempString = inString.Extract(inString.Length() - 1 - inToken.Length());
}
m_OriginalString = inString;
m_Token = inToken;
m_Index = 0;
}
//==============================================================================
/**
* DTOR
*/
CStringTokenizer::~CStringTokenizer()
{
}
void CStringTokenizer::operator++()
{
if (m_Index != Q3DStudio::CString::ENDOFSTRING) {
long theCurrentTokenIndex = m_OriginalString.Find(m_Token, m_Index);
// Case last partition after last token
if (theCurrentTokenIndex == Q3DStudio::CString::ENDOFSTRING) {
m_Index = Q3DStudio::CString::ENDOFSTRING;
}
// Somewhere in the middle or beginnign for the string
else {
m_Index = theCurrentTokenIndex + m_Token.Length();
if (m_Index > m_OriginalString.Length())
m_Index = Q3DStudio::CString::ENDOFSTRING;
}
}
}
//==============================================================================
/**
* Gets the next delimeted partition
*/
Q3DStudio::CString CStringTokenizer::GetCurrentPartition()
{
Q3DStudio::CString theReturnString = "";
if (m_Index != Q3DStudio::CString::ENDOFSTRING) {
long theCurrentTokenIndex = m_OriginalString.Find(m_Token, m_Index);
// Case last partition after last token
if (theCurrentTokenIndex == Q3DStudio::CString::ENDOFSTRING) {
theReturnString = m_OriginalString.Extract(m_Index);
}
// Somewhere in the middle or beginnign for the string
else {
theReturnString = m_OriginalString.Extract(m_Index, theCurrentTokenIndex - m_Index);
}
}
return theReturnString;
}
//==============================================================================
/**
* return true if there is more data to be extracted
*/
bool CStringTokenizer::HasNextPartition()
{
return (m_Index != Q3DStudio::CString::ENDOFSTRING);
}
|