Exemplo n.º 1
0
void SegmentedString::prepend(const SegmentedSubstring& s, PrependType type) {
  ASSERT(!s.numberOfCharactersConsumed());
  if (!s.length())
    return;

  // FIXME: We're also ASSERTing that s is a fresh SegmentedSubstring.
  //        The assumption is sufficient for our current use, but we might
  //        need to handle the more elaborate cases in the future.
  m_numberOfCharactersConsumedPriorToCurrentString +=
      m_currentString.numberOfCharactersConsumed();
  if (type == PrependType::Unconsume)
    m_numberOfCharactersConsumedPriorToCurrentString -= s.length();
  if (!m_currentString.length()) {
    m_currentString = s;
    updateAdvanceFunctionPointers();
  } else {
    // Shift our m_currentString into our list.
    m_substrings.prepend(m_currentString);
    m_currentString = s;
    updateAdvanceFunctionPointers();
  }
  m_empty = false;
}
Exemplo n.º 2
0
void SegmentedString::append(const SegmentedSubstring& s) {
  ASSERT(!m_closed);
  if (!s.length())
    return;

  if (!m_currentString.length()) {
    m_numberOfCharactersConsumedPriorToCurrentString +=
        m_currentString.numberOfCharactersConsumed();
    m_currentString = s;
    updateAdvanceFunctionPointers();
  } else {
    m_substrings.append(s);
  }
  m_empty = false;
}