else if ( aRequest == kLastFragment ) { aPosition = mStartPos + mLength; aRequest = kFragmentAt; } else if ( aRequest == kFragmentAt ) aPosition += mStartPos;    const CharT* position_ptr = mString.GetReadableFragment(aFragment, aRequest, aPosition);      if ( position_ptr ) {  size_t logical_size_backward = aPosition - mStartPos; if ( position_ptr - aFragment.mStart > logical_size_backward ) aFragment.mStart = position_ptr - logical_size_backward;  size_t logical_size_forward = mLength - logical_size_backward; if ( aFragment.mEnd - position_ptr > logical_size_forward ) aFragment.mEnd = position_ptr + logical_size_forward; }  return position_ptr;
basic_nsLiteralString<CharT>::GetReadableFragment( nsReadableFragment<CharT>& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset ) const  {    switch ( aRequest )      {        case kFirstFragment:        case kLastFragment:        case kFragmentAt:          aFragment.mStart = mStart;          aFragment.mEnd = mEnd;          return mStart + aOffset;                case kPrevFragment:        case kNextFragment:        default:          return 0;      }  }