static void verifyPayload(TokenStreamPtr ts)
{
    PayloadAttributePtr payloadAtt = ts->getAttribute<PayloadAttribute>();
    for (uint8_t b = 1; ; ++b)
    {
        bool hasNext = ts->incrementToken();
        if (!hasNext)
            break;
        BOOST_CHECK_EQUAL(b, payloadAtt->getPayload()->toByteArray()[0]);
    }
}
 virtual bool incrementToken() {
     bool hasNext = input->incrementToken();
     if (hasNext) {
         if (offset + length <= data.size()) {
             PayloadPtr p = newLucene<Payload>();
             payloadAtt->setPayload(p);
             p->setData(data, offset, length);
             offset += length;
         } else {
             payloadAtt->setPayload(PayloadPtr());
         }
     }
     return hasNext;
 }
 virtual bool incrementToken()
 {
     bool hasNext = input->incrementToken();
     if (!hasNext)
         return false;
     payloadAtt->setPayload(p); // reuse the payload / byte[]
     data[0]++;
     return true;
 }
 virtual bool incrementToken() {
     if (!first) {
         return false;
     }
     first = false;
     clearAttributes();
     termAtt->setTermBuffer(term);
     payloadAtt->setPayload(newLucene<Payload>(payload));
     return true;
 }
 virtual bool incrementToken()
 {
     if (input->incrementToken())
     {
         String payloadData = L"pos: " + StringUtils::toString(pos);
         ByteArray data = ByteArray::newInstance(payloadData.length() * sizeof(wchar_t));
         std::wcsncpy((wchar_t*)data.get(), payloadData.c_str(), payloadData.length());
         payloadAttr->setPayload(newLucene<Payload>(data));
         int32_t posIncr = i % 2 == 1 ? 1 : 0;
         posIncrAttr->setPositionIncrement(posIncr);
         pos += posIncr;
         ++i;
         return true;
     }
     else
         return false;
 }