docs: public Object set(int index, Object element)
      {
          if ((index < m_iStartIndex) || (index >= m_iStartIndex + m_iMaxSize))
          { // Out of bounds, re-adjust bounds
              int iNewStart = index - m_iMaxSize / 2;   // index should be right in the middle
              if (iNewStart < 0)
                  iNewStart = 0;
              int iStart = 0;
              int iEnd = this.size() - 1;
              int iIncrement = +1;
              if (iNewStart < m_iStartIndex)
              {   // Go backwards to avoid overlaying values
                  iStart = iEnd;
                  iEnd = 0;
                  iIncrement = -1;
              }
              for (int i = iStart; i * iIncrement <= iEnd; i = i + iIncrement)
              {
                  Object obj = super.set(i, null);                // Get and clear value
                  int iShiftedIndex = i + m_iStartIndex - iNewStart;
                  if ((iShiftedIndex >= 0) && (iShiftedIndex < this.size()))
                      super.set(iShiftedIndex, obj);              // Move/set it!
                  else
                      this.freeObject(m_iStartIndex + i, obj);    // Notify obj
              }
              m_iStartIndex = iNewStart;
          }
          if (index >= m_iStartIndex + this.size())
          { // Need to add empty elements inbetween
              for (int i = m_iStartIndex + this.size(); i <= index; i++)
                  this.add(null);     // Add a placeholder
          }
          index = index - m_iStartIndex;
          return super.set(index, element);
      }