… | |
… | |
1785 | while (hi >= fmap.size ()) |
1785 | while (hi >= fmap.size ()) |
1786 | fmap.push_back (0); |
1786 | fmap.push_back (0); |
1787 | |
1787 | |
1788 | if (!fmap[hi]) |
1788 | if (!fmap[hi]) |
1789 | { |
1789 | { |
1790 | // we use [1] here because C++ has no separate new and new [] forms, |
|
|
1791 | // and pagemap is char[256], so new incorrectly assumes we want to |
|
|
1792 | // allocate an array of chars instead of a single pagemap. |
|
|
1793 | // we can either cast the resulting pointer to (pagemap *) or |
|
|
1794 | // allocate an array of pagemaps, returning a pointer to the first member |
|
|
1795 | // this is no extra overhead, as new even allocates an array for |
|
|
1796 | // "new pagemap" |
|
|
1797 | fmap[hi] = new pagemap[1]; |
1790 | fmap[hi] = new pagemap; |
1798 | memset (fmap[hi], 0xff, sizeof (pagemap)); |
1791 | memset (fmap[hi], 0xff, sizeof (pagemap)); |
1799 | } |
1792 | } |
1800 | |
1793 | |
1801 | (*fmap[hi])[unicode & 0xff] = i; |
1794 | (*fmap[hi])[unicode & 0xff] = i; |
1802 | } |
1795 | } |