Exemplo n.º 1
0
void SegmentedString::prepend(const SegmentedSubstring& s)
{
    ASSERT(!escaped());
    ASSERT(!s.numberOfCharactersConsumed());
    if (!s.m_length)
        return;

    // FIXME: We're assuming that the prepend were originally consumed by
    //        this SegmentedString.  We're also ASSERTing that s is a fresh
    //        SegmentedSubstring.  These assumptions are sufficient for our
    //        current use, but we might need to handle the more elaborate
    //        cases in the future.
    m_numberOfCharactersConsumedPriorToCurrentString += m_currentString.numberOfCharactersConsumed();
    m_numberOfCharactersConsumedPriorToCurrentString -= s.m_length;
    if (!m_currentString.m_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::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.º 3
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;
}