Open main menu

CDOT Wiki β

Changes

User:Minooz/OSD600/FF/patch565031

2,456 bytes added, 16:54, 17 April 2011
Apr16
=== Apr16 ===
<source lang="java">
void Area::ParseCoords(const nsAString& aSpec)
{
char* cp = ToNewCString(aSpec);
if (!&aSpec) {
return;
}
char *tptr;
char *n_str;
PRInt32 i, cnt;
PRInt32 *value_list;
PRBool negated = false;
PRBool started = false;
PRBool gotNumber = false;
PRBool finished = false;
PRBool bogus = false;
 
/*
* Nothing in an empty list
*/
mNumCoords = 0;
mCoords = nsnull;
 
/*
* Skip beginning whitespace, all whitespace is empty list.
*/
n_str = cp;
while (is_separator(*n_str))
{
n_str++;
}
if (*n_str == '\0')
{
return;
}
 
/*
* Make a pass where any two numbers separated by just whitespace
* are given a comma separator. Count entries while passing.
*/
cnt = 0;
while (*n_str != '\0')
{
tptr = n_str;
if (*n_str == '-')
{
if (gotNumber)
{
finished = true;
break;
}
if (started)
negated = false;
else
{
if (!bogus)
negated = true;
}
started = true;
tptr++;
cnt++;
}
else if (*n_str >= '0' && *n_str <= '9')
{
if (finished)
break;
*tptr += *tptr * 10;
started = gotNumber = true;
tptr++;
cnt++;
}
else if (is_separator(*n_str))
{
if (!gotNumber)
break;
if (!negated)
*tptr += *tptr;
}
else
{
}
}
/*
* count the last entry in the list.
*/
cnt++;
 
/*
* Allocate space for the coordinate array.
*/
value_list = new nscoord[cnt];
if (!value_list)
{
return;
}
 
/*
* Second pass to copy integer values into list.
*/
tptr = cp;
for (i=0; i<cnt; i++)
{
char *ptr;
 
ptr = strchr(tptr, ',');
if (ptr)
{
*ptr = '\0';
}
/*
* Strip whitespace in front of number because I don't
* trust atoi to do it on all platforms.
*/
while (*tptr == ' ')
{
tptr++;
}
if (*tptr == '\0')
{
value_list[i] = 0;
}
else
{
value_list[i] = (nscoord) ::atoi(tptr);
}
if (ptr)
{
*ptr = ',';
tptr = ptr + 1;
}
}
 
mNumCoords = cnt;
mCoords = value_list;
 
NS_Free(cp);
</source></div>
------
<div id="Apr6">
 
=== Apr6 ===
<source lang="java">
1
edit