 |
Changeset 3838
- Timestamp:
- 08/03/08 13:47:38
(4 months ago)
- Author:
- kris
- Message:
fixes #1188 :: "Token is too large to fit within buffer" while using GrowBuffer?
Added an expand() method to take care of this. Kudos to fvbommel
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| r3598 |
r3838 |
|
| 710 | 710 | else |
|---|
| 711 | 711 | // no more space in the buffer? |
|---|
| 712 | | if (writable is 0) |
|---|
| | 712 | if (writable is 0 && expand(0) is 0) |
|---|
| 713 | 713 | error ("Token is too large to fit within buffer"); |
|---|
| 714 | 714 | |
|---|
| … | … | |
| 1112 | 1112 | extent += size; |
|---|
| 1113 | 1113 | } |
|---|
| | 1114 | } |
|---|
| | 1115 | |
|---|
| | 1116 | /*********************************************************************** |
|---|
| | 1117 | |
|---|
| | 1118 | Expand existing buffer space |
|---|
| | 1119 | |
|---|
| | 1120 | Returns: |
|---|
| | 1121 | Available space, without any expansion |
|---|
| | 1122 | |
|---|
| | 1123 | Remarks: |
|---|
| | 1124 | Make some additional room in the buffer, of at least the |
|---|
| | 1125 | given size. This can be used by subclasses as appropriate |
|---|
| | 1126 | |
|---|
| | 1127 | ***********************************************************************/ |
|---|
| | 1128 | |
|---|
| | 1129 | protected uint expand (uint size) |
|---|
| | 1130 | { |
|---|
| | 1131 | return writable; |
|---|
| 1114 | 1132 | } |
|---|
| 1115 | 1133 | |
|---|
| … | … | |
| 1518 | 1536 | |
|---|
| 1519 | 1537 | if (size + index > dimension) |
|---|
| 1520 | | makeRoom (size); |
|---|
| | 1538 | expand (size); |
|---|
| 1521 | 1539 | |
|---|
| 1522 | 1540 | // populate tail of buffer with new content |
|---|
| … | … | |
| 1543 | 1561 | { |
|---|
| 1544 | 1562 | if (length > writable) |
|---|
| 1545 | | makeRoom (length); |
|---|
| | 1563 | expand (length); |
|---|
| 1546 | 1564 | |
|---|
| 1547 | 1565 | copy (src, length); |
|---|
| … | … | |
| 1561 | 1579 | { |
|---|
| 1562 | 1580 | if (writable <= increment/8) |
|---|
| 1563 | | makeRoom (increment); |
|---|
| | 1581 | expand (increment); |
|---|
| 1564 | 1582 | |
|---|
| 1565 | 1583 | return write (&src.read); |
|---|
| … | … | |
| 1585 | 1603 | /*********************************************************************** |
|---|
| 1586 | 1604 | |
|---|
| 1587 | | make some room in the buffer |
|---|
| 1588 | | |
|---|
| 1589 | | ***********************************************************************/ |
|---|
| 1590 | | |
|---|
| 1591 | | private uint makeRoom (uint size) |
|---|
| | 1605 | Expand existing buffer space |
|---|
| | 1606 | |
|---|
| | 1607 | Returns: |
|---|
| | 1608 | Available space after adjustment |
|---|
| | 1609 | |
|---|
| | 1610 | Remarks: |
|---|
| | 1611 | Make some additional room in the buffer, of at least the |
|---|
| | 1612 | given size. This can be used by subclasses as appropriate |
|---|
| | 1613 | |
|---|
| | 1614 | ***********************************************************************/ |
|---|
| | 1615 | |
|---|
| | 1616 | override uint expand (uint size) |
|---|
| 1592 | 1617 | { |
|---|
| 1593 | 1618 | if (size < increment) |
|---|
| … | … | |
| 1596 | 1621 | dimension += size; |
|---|
| 1597 | 1622 | data.length = dimension; |
|---|
| 1598 | | return writable(); |
|---|
| | 1623 | return writable; |
|---|
| 1599 | 1624 | } |
|---|
| 1600 | 1625 | } |
|---|
Download in other formats:
|
 |
 |
|
 |
Copyright © 2006-2008 Tango. All Rights Reserved. | Page Width:
Static or
Dynamic