// assign a repeated char to a string string &string :: assign (char ch, size_t n) { if (n == NPOS) _Xlen(); if (_Grow (n, 1)) { // copy non-empty string memset (m_pPtr, ch, n); m_pPtr[m_iLen = n] = '\0'; } return (*this); }
VOID ACLStr::_Concat ( IN size_t nStrLen, IN LPCTSTR pString ) { if (nStrLen > 0 && pString) { _Grow(nStrLen); STRNCAT_S(_string, _realLength, pString, nStrLen); } } // ::concat
bool istream::WriteBytes(const BYTE *pDataIn, int cCount) { bool fRet = true; if ((_iIndex + cCount) >= _cbSize) { fRet = _Grow((DWORD)cCount); } if (fRet) { CopyMemory(&_pData[_iIndex], pDataIn, (size_t)cCount); _iIndex += (DWORD)cCount; _cbSizeValid = _iIndex; } return fRet; }
bool istream::WriteByte(BYTE b) { bool fRet = TRUE; if (_iIndex >= _cbSize) { fRet = _Grow(1); } if (fRet) { _pData[_iIndex] = b; _iIndex++; _cbSizeValid = _iIndex; } return fRet; }
// insert a substring into a string string &string :: insert (size_t p0, const string &str, size_t pos, size_t ns) { if (m_iLen < p0 || str.length() < pos) _Xran(); size_t n = str.length() - pos; if ( n < ns) ns = n; if (NPOS - m_iLen <= ns) _Xlen(); if (0 < ns && _Grow (n = m_iLen + ns)) { // insert to make non-empty string memmove (m_pPtr + p0 + ns, m_pPtr + p0, m_iLen - p0); memcpy (m_pPtr + p0, &str.c_str()[pos], ns); m_pPtr[m_iLen = n] = '\0'; } return (*this); }
// replace with a repeated char in a string string &string :: replace (size_t p0, size_t n0, const string &str, size_t pos, size_t ns) { if (m_iLen < p0 || str.length() < pos) _Xran(); size_t n = str.length() - pos; if (n < ns) ns = n; if (NPOS - ns <= m_iLen - n0) _Xlen(); size_t nm = m_iLen - n0 - p0; if (ns < n0) memmove (m_pPtr + p0 + ns, m_pPtr + p0 + n0, nm); if ((0 < ns || 0 < n0) && _Grow (n = m_iLen + ns - n0)) { // replace to make non-empty string if (n0 < ns) memmove (m_pPtr + p0 + ns, m_pPtr + p0 + n0, nm); memcpy (m_pPtr + p0, &str.c_str()[pos], ns); m_pPtr[m_iLen = n] = '\0'; } return (*this); }