/* giveString - returns a pointer to the string from a token. If token is not T_STRING, it generates new string, converts token to it, then returns its pointer. Use to prevent copying of long strings, when read-only access is needed. Usage note: when string is small (regex, filename, ...), use: string value = *giveString(token); When string MAY be large and we don't change it (pos, substr, fwrite, writefile, ...), use: StringPtr value = giveString(token); */ StringPtr giveString(const Token& token) { Token newToken; switch (token.tokenType) { case T_VARIABLE: newToken = token; recurseVariables(newToken); return giveString(newToken); break; case T_STRING: return token.asString; break; case T_EMPTY: return StringPtr(new string("")); break; case T_INTEGER: { StringPtr result = StringPtr(new string); toString(token.data.asInteger, *result); return result; } break; case T_FLOAT: { StringPtr result = StringPtr(new string); toString(token.data.asFloat, *result); return result; } break; case T_BOOL: return StringPtr(new string(token.data.asBool ? "TRUE" : "FALSE")); break; default: stringstream ExceptionText; ExceptionText << "Cannot convert token to string"; throw StutskException(ET_ERROR, ExceptionText.str()); } }
StringPtr String::insert(StringParam substr, size_t beforeIndex) { const size_t myLength= length(); if(beforeIndex == 0) { return JoinString::create(substr, StringPtr(this)); } else if(myLength == beforeIndex) { return JoinString::create(StringPtr(this), substr); } return JoinString::create(JoinString::create(substring(0, beforeIndex), substr), substring(beforeIndex)); }
StringPtr String::remove(size_t offset, size_t removalLength) { if(0 == offset) { return SubString::create(StringPtr(this), removalLength); } else if(offset + removalLength == length()) { return SubString::create(StringPtr(this), 0, offset); } return JoinString::create( SubString::create(StringPtr(this), 0, offset), SubString::create(StringPtr(this), offset + removalLength) ); }
static StringPtr get_string(const std::string* sp) { static bool s_defined = false; static std::string last_s; static StringPtr last_ptr; if (sp) { if (!s_defined || *sp != last_s) { last_ptr = std::make_shared<std::string>(*sp); last_s = *sp; s_defined = true; } return last_ptr; } else { return StringPtr(nullptr); } }
PSDash::_void CLoginDlg::OnConnectIS( _bool bConnect, const PSUID is_id, _dword Reason, const _char *desp /*= _null*/ ) { GetDlgItem(IDC_BUTTON4).EnableWindow(TRUE); GetDlgItem(IDC_USERNAME).SetFocus(); if(bConnect) { GetDlgItem(IDC_BUTTON4).SetWindowText(L"Disconnect"); if(StringPtr(desp).Length()>0) AtlMessageBox(m_hWnd, desp); GetDlgItem(IDC_APPID).EnableWindow(FALSE); GetDlgItem(IDC_SUBID).EnableWindow(FALSE); GetDlgItem(IDC_COMBO1).EnableWindow(FALSE); } else { GetDlgItem(IDC_BUTTON4).SetWindowText(L"Connect"); AtlMessageBox(m_hWnd, (LPCTSTR)GetFramework()->GetError(Reason)); } }
/* getNth - returns n-th value of the array/string */ void getNth(Token &newToken, stutskInteger i) { Token tempToken = newToken; if (tempToken.tokenType == T_VARIABLE) recurseVariables(tempToken); if ((tempToken.tokenType == T_STRING) && (i >= 0)) { newToken.tokenType = T_STRING; if (i < 0) throw StutskException(ET_ERROR, "String index underflow"); if (i >= (signed)tempToken.asString->length()) throw StutskException(ET_ERROR, "String index overflow"); newToken.asString = StringPtr(new string); *newToken.asString = (*tempToken.asString)[i]; } else if ((tempToken.tokenType == T_ARRAY) && (i >= 0)) { if (i < 0) throw StutskException(ET_ERROR, "Array index underflow"); if (i >= (signed)tempToken.asTokenList->size()) throw StutskException(ET_ERROR, "Array index overflow"); newToken = (*tempToken.asTokenList)[i]; } else throw StutskException(ET_ERROR, "Cannot index an object"); }
StringPtr Integer::ToString() const { return StringPtr(new String(boost::lexical_cast<std::string>(GetValue()))); }
StringPtr UUID::ToString() const { return StringPtr(new String(ToString(*this))); }
void DebugTool::PushLogString(CL_String * rString){ logStack.push_front(StringPtr(rString)); if(logStack.size() > 10){ logStack.pop_back(); } }
StringPtr Arena::copyString(StringPtr content) { char* data = reinterpret_cast<char*>(allocateBytes(content.size() + 1, 1, false)); memcpy(data, content.cStr(), content.size() + 1); return StringPtr(data, content.size()); }
StringPtr String::remove(size_t offset) { return SubString::create(StringPtr(this), 0, offset); }
StringPtr String::append(StringParam other) { return JoinString::create(StringPtr(this), other); }
StringPtr String::substring(size_t offset, size_t subLength) { return SubString::create(StringPtr(this), offset, subLength); }
StringPtr String::substring(size_t offset) { return SubString::create(StringPtr(this), offset); }