本文整理汇总了C++中wyString类的典型用法代码示例。如果您正苦于以下问题:C++ wyString类的具体用法?C++ wyString怎么用?C++ wyString使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了wyString类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: Replace
wyInt32
FindAndReplace::ReplaceAll(wyString& replacewhat, wyString& replacewith, wyUInt32 wholeworld, wyUInt32 matchcase)
{
if (replacewhat.GetLength() == 0)
{
return -1;
}
wyInt32 startposition = 0;
wyInt32 endposition = SendMessage(m_hwndedit, SCI_GETLENGTH, 0, 0);
wyInt32 flags = 0;
if(wholeworld)flags = SCFIND_WHOLEWORD;
if(matchcase)flags = SCFIND_MATCHCASE;
::SendMessage(m_hwndedit, SCI_SETTARGETSTART, startposition, 0);
::SendMessage(m_hwndedit, SCI_SETTARGETEND, endposition, 0);
::SendMessage(m_hwndedit, SCI_SETSEARCHFLAGS, flags, 0);
wyInt32 posfind = SendMessage(m_hwndedit, SCI_SEARCHINTARGET, replacewhat.GetLength(), (LPARAM)replacewhat.GetString());
if((posfind != -1) && (posfind <= endposition))
{
::SendMessage(m_hwndedit, SCI_BEGINUNDOACTION, 0, 0);
return Replace(posfind, endposition,
replacewhat, replacewith,
wholeworld, matchcase);
}
return 0;
}
开发者ID:ArsalanYaqoob,项目名称:sqlyog-community,代码行数:34,代码来源:FindAndReplace.cpp
示例2: SendMessage
wyInt32
FindAndReplace::Replace(wyInt32 posfind, wyInt32 endposition,
wyString &replacewhat, wyString &replacewith,
wyUInt32 wholeworld, wyUInt32 matchcase)
{
wyInt32 lastmatch = posfind;
wyInt32 replacements = 0;
//Replacement loop
while(posfind != -1)
{
wyInt32 lentarget = SendMessage(m_hwndedit, SCI_GETTARGETEND, 0, 0) - SendMessage(m_hwndedit, SCI_GETTARGETSTART, 0, 0);
wyInt32 movepasteol = 0;
wyInt32 replacelen = replacewith.GetLength();
wyInt32 lenreplaced = replacelen;
::SendMessage(m_hwndedit, SCI_REPLACETARGET, replacelen, (LPARAM)replacewith.GetString());
//Modify for change caused by replacement
endposition += lenreplaced - lentarget;
// For the special cases of start of line and end of line
// something better could be done but there are too many special cases
lastmatch = posfind + lenreplaced + movepasteol;
if(lentarget == 0)
{
lastmatch = SendMessage(m_hwndedit, SCI_POSITIONAFTER, lastmatch, 0);
}
if(lastmatch >= endposition)
{
// Run off the end of the document/selection with an empty match
posfind = -1;
}
else
{
::SendMessage(m_hwndedit, SCI_SETTARGETSTART, lastmatch, 0);
::SendMessage(m_hwndedit, SCI_SETTARGETEND, endposition, 0);
posfind = SendMessage(m_hwndedit, SCI_SEARCHINTARGET, replacewhat.GetLength(), (LPARAM)replacewhat.GetString());
}
replacements++;
}
::SendMessage(m_hwndedit, SCI_SETSEL, lastmatch, lastmatch);
::SendMessage(m_hwndedit, SCI_ENDUNDOACTION, 0, 0);
return replacements;
}
开发者ID:ArsalanYaqoob,项目名称:sqlyog-community,代码行数:55,代码来源:FindAndReplace.cpp
示例3: OnError
// Function to get the path the selected item in a Treeview //
wyBool
FavoriteBase::SelItemPath(HWND htree, HTREEITEM item, wyString &fullpath, wyBool bFileFlag)
{
wyWChar data[MAX_PATH + 1] = {0};
wyWChar foldpath[MAX_PATH + 1] = {0};
TVITEM tvitem;
wyString path, temp, temp2, datastr, foldpathstr;
// application data path //
if(!pGlobals->m_configdirpath.GetLength())
{
if(!SUCCEEDED(::SHGetFolderPath(NULL, CSIDL_APPDATA, NULL, 0, foldpath)))
return OnError(_("Error in favorites"));
wcscat(foldpath ,L"\\SQLyog");
}
else
{
//wcscpy(foldpath, pGlobals->m_configdirpath.GetAsWideChar());
wcsncpy(foldpath, pGlobals->m_configdirpath.GetAsWideChar(), MAX_PATH);
foldpath[MAX_PATH] = '\0';
}
while(item)
{
tvitem.mask = TVIF_TEXT | TVIF_IMAGE;
tvitem.hItem = item;
tvitem.cchTextMax = MAX_PATH;
tvitem.pszText = data ;
TreeView_GetItem(htree, &tvitem);
datastr.SetAs(data);
if(tvitem.iImage != NFILE || !bFileFlag)
{
temp.Sprintf("\\%s", datastr.GetString());
if(path.GetLength() > 0)
{
temp2.SetAs(path);
path.Sprintf("\\%s%s", datastr.GetString(), temp2.GetString());
}
else
path.Sprintf("\\%s", datastr.GetString());
}
item = TreeView_GetParent(htree, item);
}
foldpathstr.SetAs(foldpath);
fullpath.SetAs(foldpathstr.GetString());
fullpath.Add(path.GetString());
return wyTrue;
}
开发者ID:Fale,项目名称:sqlyog,代码行数:55,代码来源:Favorite.cpp
示例4:
//function to get the banner text
void
TableView::GetBanner(wyString& bannertext)
{
bannertext.Clear();
//set the text
if(!m_mydata || !m_mydata->m_table.GetLength() || !m_mydata->m_db.GetLength())
{
bannertext.SetAs(_("Select a Table/View from the Object Browser"));
}
}
开发者ID:lindaconnolly,项目名称:sqlyog,代码行数:12,代码来源:TableView.cpp
示例5: SendMessage
void
EditorBase::GetCompleteTextByPost(wyString &query, MDIWindow *wnd)
{
wyUInt32 nstrlen;
wyChar *data;
THREAD_MSG_PARAM tmp = {0};
//set the lparam sent
if(GetWindowThreadProcessId(m_hwnd , NULL) == GetCurrentThreadId())
{
nstrlen = SendMessage(m_hwnd, SCI_GETTEXTLENGTH, 0, 0);
data = AllocateBuff(nstrlen + 1);
SendMessage(m_hwnd, SCI_GETTEXT, (WPARAM)nstrlen+1, (LPARAM)data);
query.SetAs(data);
free(data);
}
else
{
if(WaitForSingleObject(pGlobals->m_pcmainwin->m_sqlyogcloseevent, 0) != WAIT_OBJECT_0 )
{
query.SetAs("");
return;
}
tmp.m_lparam = (LPARAM)&query;
tmp.m_hevent = CreateEvent(NULL, TRUE, FALSE, NULL);
//now post the message to ui thread and wait for the event to be set
PostMessage(wnd->GetHwnd(), UM_GETEDITORTEXT, (WPARAM)this->GetHWND(), (LPARAM)&tmp);
if(WaitForSingleObject(tmp.m_hevent, 10000) == WAIT_TIMEOUT)
{
//CloseHandle(tmp.m_hevent);
query.SetAs("");
//return;
}
//WaitForSingleObject(tmp.m_hevent, INFINITE);
//close the event handle
CloseHandle(tmp.m_hevent);
tmp.m_hevent = NULL;
//data = (wyChar*)tmp.m_lparam;
}
return;
}
开发者ID:Fale,项目名称:sqlyog,代码行数:50,代码来源:EditorBase.cpp
示例6:
void
ExportAsSimpleSQL::AddColumnNames(ExportSQLData *data, wyString &value)
{
wyInt32 count;
value.Add("(");
for(count = 0; count < m_myres->field_count; count++)
{
if(data->m_selcol[count] == wyTrue)
value.AddSprintf("`%s`, ", m_myres->fields[count].name);
}
value.Strip(2); // Strip one for ',' and one for blank space
value.Add(") ");
}
开发者ID:AwkwardDev,项目名称:sqlyog-community,代码行数:16,代码来源:ExportAsSimpleSQL.cpp
示例7: WriteFile
wyBool
ExportAsSimpleSQL::WriteToFile(wyString &buffer)
{
DWORD dwbyteswritten;
wyInt32 ret;
wyString error;
m_buffer.Add(buffer.GetString());
//if size of filebuffer is more then write to file
if(m_buffer.GetLength() >= SIZE_8K)
{
ret = WriteFile(m_filename, m_buffer.GetString(), m_buffer.GetLength(), &dwbyteswritten, NULL);
m_buffer.Clear();
if(!ret)
{
error.Sprintf(_("Error no : %d"), GetLastError());
MessageBox(m_hwnd, error.GetAsWideChar(), pGlobals->m_appname.GetAsWideChar(), MB_OK | MB_ICONERROR);
return wyFalse;
}
}
return wyTrue;
}
开发者ID:AwkwardDev,项目名称:sqlyog-community,代码行数:26,代码来源:ExportAsSimpleSQL.cpp
示例8: SendMessage
//Function adds text in the edit box.
void
TabMessage::AddText(wyString& str)
{
SendMessage(m_hwnd, SCI_SETREADONLY, false, 0);
SendMessage(m_hwnd, SCI_SETTEXT, 0, (LPARAM)str.GetString());
SendMessage(m_hwnd, SCI_SETREADONLY, true, 0);
SendMessage(m_hwndcombo, CB_SETCURSEL, 0, 0);
}
开发者ID:Fale,项目名称:sqlyog,代码行数:9,代码来源:TabMessage.cpp
示例9: ShowMessage
void
FindAndReplace::NotFoundMsg(wyString tofind)
{
wyString msg;
msg.AddSprintf(_("Finished searching the document. Cannot find \"%s\""), tofind.GetString());
ShowMessage(msg.GetAsWideChar(), MB_OK | MB_ICONINFORMATION);
}
开发者ID:ArsalanYaqoob,项目名称:sqlyog-community,代码行数:10,代码来源:FindAndReplace.cpp
示例10: InitOpenFile
wyBool
InitOpenFile(HWND hwnd, wyString &filename, wyInt32 filter, wyInt32 bufsize)
{
wyWChar file[MAX_PATH] = {0};
wyBool ret;
ret = InitOpenFile(hwnd, file, filter, bufsize);
filename.SetAs(file);
return ret;
}
开发者ID:AwkwardDev,项目名称:sqlyog-community,代码行数:11,代码来源:FileHelper.cpp
示例11: wyString
wyInt32
EditorBase::ExecuteQueryThread(wyString query, wyInt32 *stop, MDIWindow *wnd, wyInt32& curline, wyBool isanalyze)
{
wyInt32 start=0, end=0, *err = 0;
QueryThread thd;
HANDLE evt;
QueryResultList *list = NULL;
wyString *str = new wyString;
wyString *querystr;
PMYSQL tmpmysql;
err = new wyInt32;
*err = 0;
querystr = new wyString();
querystr->SetAs(query.GetString());
wnd->m_stopmysql= wnd->m_mysql;
tmpmysql = &wnd->m_stopmysql;
QUERYTHREADPARAMS *param = new QUERYTHREADPARAMS;
list = new QueryResultList;
param->startpos = start;
param->endpos = end;
param->linenum = curline;
param->executestatus = EXECUTE_ALL;
param->query = querystr;
param->stop = stop;
param->list = list;
param->str = str;
param->tab = wnd->GetActiveTabEditor()->m_pctabmgmt;
param->tunnel = wnd->m_tunnel;
param->mysql = &wnd->m_mysql;
param->error = err;
param->isadvedit = m_isadvedit;
param->lpcs = &wnd->m_cs;
param->wnd = wnd;
param->isprofile = wyTrue;
param->m_highlimitvalue = -1;
param->m_lowlimitvalue = -1;
param->m_iseditor = isanalyze;
param->executeoption = ALL;
param->isedit = wyFalse;
param->tmpmysql = tmpmysql;
param->isexplain = wyFalse;
InitializeExecution(param);
evt = thd.Execute(param);
return 1;
}
开发者ID:Fale,项目名称:sqlyog,代码行数:52,代码来源:EditorBase.cpp
示例12: AllocateBuff
// function to process file type Favorite//
wyBool
FavoriteBase::AddFile(HMENU hmenu, wyString &parentpath, wyWChar *filename)
{
wyInt32 i , j=0;
wyUInt32 lengthwchar = 1;
wyWChar ext[_MAX_EXT] = {0} , *data = {0};
wyChar *path = {0};
MENUITEMINFO lpmii={0};
parentpath.GetAsWideChar(&lengthwchar);
path = AllocateBuff(parentpath.GetLength() + 2);
data = AllocateBuffWChar(wcslen(filename) + 2);
wcscpy(data, (wyWChar*)filename);
strcpy(path, (wyChar*)parentpath.GetString());
for(i = wcslen(data) - 1; i && data[i]!='.'; i--, j++)
ext[j] = data[i];
if(wcsnicmp(ext, L"lqs", 3) != 0)
return wyFalse;
ext[j] = 0;
data[i] = 0;
lpmii.cbSize = sizeof(MENUITEMINFO);
lpmii.fMask = MIIM_STRING|MIIM_ID|MIIM_DATA;
lpmii.wID = m_menuid++;
lpmii.dwItemData = (ULONG_PTR)path;
lpmii.cch = wcslen(data);
lpmii.dwTypeData = data;
VERIFY(::InsertMenuItem(hmenu, -1, TRUE, &lpmii));
free(data);
return wyTrue;
}
开发者ID:Fale,项目名称:sqlyog,代码行数:40,代码来源:Favorite.cpp
示例13: row
void
EditorBase::AddResultMsg(Tunnel * tunnel, MYSQL_RES * myres, wyString& errorormsg, wyUInt32 timetaken)
{
wyUInt32 rowsret;
wyString newmsg;
rowsret = (wyUInt32)tunnel->mysql_num_rows(myres);
VERIFY(newmsg.Sprintf(_("(%lu row(s) returned)\n(%d ms taken)\n\n"), rowsret, timetaken ) < SIZE_128);
errorormsg.SetAs(newmsg);
return;
}
开发者ID:Fale,项目名称:sqlyog,代码行数:14,代码来源:EditorBase.cpp
示例14: VERIFY
// Function to add the given item to the treeview control //
HTREEITEM
FavoriteBase::AddItem(HWND htree, HTREEITEM parent, wyString name, wyInt32 pos)
{
TV_INSERTSTRUCT str ;
str.hParent = parent ;
str.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE ;
str.hInsertAfter = TVI_SORT;
str.item.pszText = (LPWSTR)name.GetAsWideChar();
str.item.iImage = pos ;
str.item.iSelectedImage = pos;
HTREEITEM htreeitem;
VERIFY(htreeitem = (HTREEITEM)SendMessage(htree, TVM_INSERTITEM, NULL, (wyInt32)&str));
return(htreeitem);
}
开发者ID:Fale,项目名称:sqlyog,代码行数:16,代码来源:Favorite.cpp
示例15:
void
EditorBase::AddErrorMsg(Tunnel * tunnel, PMYSQL mysql, wyString& errorormsg, wyUInt32 timetaken)
{
wyUInt32 errnum;
wyString newerror;
errnum = tunnel->mysql_errno(*mysql);
/* it may happen that due to http error the errornumber is 0 so we return */
if(0 == errnum)
return;
VERIFY(newerror.Sprintf(_("Error Code: %d\n%s\n(%lu ms taken)\n\n"), errnum, tunnel->mysql_error(*mysql), timetaken) < SIZE_1024);
errorormsg.Add(newerror.GetString());
return;
}
开发者ID:Fale,项目名称:sqlyog,代码行数:18,代码来源:EditorBase.cpp
示例16: AllocateBuff
wyBool
ExportAsSimpleSQL::AddValues(ExportSQLData *data, wyString &value)
{
wyInt32 count, last, lenrow;
wyString temp, resrow, buffer;
wyInt32 *lengths = NULL;
wyInt32 escapeddatalen;
wyBool startflag = wyFalse;
if(WriteToFile(value) == wyFalse)
return wyFalse;
//this condition is true if export from from result tab if result set is not edited
if(!data->m_tabrec->m_rowarray)
{
if(m_isdatafromquery == wyTrue)
{
lengths = (wyInt32 *)sja_mysql_fetch_lengths(m_tunnel, m_myres);
}
else
{
lengths = (wyInt32 *)m_rowlength;
}
}
for(count = 0; count < data->m_result->field_count; count++)
{
if(data->m_selcol[count] == wyFalse)
continue;
if(startflag == wyTrue)
buffer.Add(",");
/// Check for NULL value or not
if(!m_myrow[count])
{
buffer.Add("NULL");
startflag = wyTrue;
continue;
}
if(m_escapeddata)
free(m_escapeddata);
//This condion true if the result tab in table tab or edit mode or result set is edited
if(!lengths)
{
resrow.SetAs(m_myrow[count]);
lenrow = resrow.GetLength();
}
else
{
lenrow = lengths[count];
}
//It requires double buffer bcs the real_escape_string returns 2 char for special chars like '\'
escapeddatalen = (lenrow * 2) + 1;
m_escapeddata = AllocateBuff(escapeddatalen);
last = sja_mysql_real_escape_string(m_tunnel, *m_mysql, m_escapeddata, m_myrow[count], lenrow);
m_escapeddata[last] = 0;
buffer.Add("'");
startflag = wyTrue;
buffer.Add(m_escapeddata);
buffer.Add("'");
}
//Write to file
WriteToFile(buffer);
buffer.SetAs("");
value.SetAs("");
return wyTrue;
}
开发者ID:AwkwardDev,项目名称:sqlyog-community,代码行数:79,代码来源:ExportAsSimpleSQL.cpp
示例17: if
void
BlobMgmt::ProcessComboSelection(wyString& comboselparam)
{
wyChar *ansistr = NULL;
wyChar *utf8str = NULL;
wyWChar *ucs2str = NULL;
wyInt32 lenucs2 = 0, i;
if(comboselparam.CompareI("US-ascii/Ansi ") == 0 && m_isutf8 == wyTrue)
{
ansistr = Utf8toAnsi(m_blobdata.GetString(), m_blobdata.GetLength());
m_piub->m_data = ansistr;
m_piub->m_datasize = strlen(ansistr);
m_piub->m_isnull = wyFalse;
m_piub->m_ischanged = wyTrue;
}
else if(comboselparam.CompareI("UTF-8") == 0 && m_isansi == wyTrue)
{
utf8str = AnsitoUtf8(m_blobdata.GetString(), m_blobdata.GetLength());
m_piub->m_data = utf8str;
m_piub->m_datasize = strlen(utf8str);
m_piub->m_isnull = wyFalse;
m_piub->m_ischanged = wyTrue;
}
else if(comboselparam.CompareI("ucs2") == 0 && m_isutf8 == wyTrue)
{
ucs2str = Utf8toUcs2(m_blobdata.GetString(), m_blobdata.GetLength());
lenucs2 = wcslen(ucs2str);
memset(m_piub->m_data, 0, strlen(m_piub->m_data));
for(i=0; i < lenucs2; i++)
memcpy(m_piub->m_data + i, ucs2str + i, 1);
m_piub->m_datasize = lenucs2;
m_piub->m_isnull = wyFalse;
m_piub->m_ischanged = wyTrue;
}
else if(comboselparam.CompareI("US-ascii/Ansi ") == 0 && m_isucs2 == wyTrue)
{
ansistr = Ucs2toAnsi(m_blobdata.GetString(), m_blobdata.GetLength());
m_piub->m_data = ansistr;
m_piub->m_datasize = strlen(ansistr);
m_piub->m_isnull = wyFalse;
m_piub->m_ischanged = wyTrue;
}
else if(comboselparam.CompareI("UTF-8") == 0 && m_isucs2 == wyTrue)
{
utf8str = Ucs2toUtf8(m_blobdata.GetString(), m_blobdata.GetLength());
m_piub->m_data = utf8str;
m_piub->m_datasize = strlen(utf8str);
m_piub->m_isnull = wyFalse;
m_piub->m_ischanged = wyTrue;
}
else if(comboselparam.CompareI("ucs2") == 0 && m_isansi == wyTrue)
{
ucs2str = AnsitoUcs2(m_blobdata.GetString(), m_blobdata.GetLength());
lenucs2 = wcslen(ucs2str);
memcpy(m_piub->m_data, ucs2str, lenucs2);
for(i=0; i < lenucs2; i++)
memcpy(m_piub->m_data + i, ucs2str + i, 1);
m_piub->m_datasize = lenucs2;
m_piub->m_isnull = wyFalse;
m_piub->m_ischanged = wyTrue;
}
}
开发者ID:sylarhl,项目名称:sqlgoy,代码行数:64,代码来源:BlobMgmt.cpp
示例18: DisplayErrorText
wyBool
FavoriteBase::OnError(wyString errmsg)
{
DisplayErrorText(::GetLastError(), errmsg.GetString());
return wyFalse;
}
开发者ID:Fale,项目名称:sqlyog,代码行数:6,代码来源:Favorite.cpp
示例19:
void
EditorFont::SetLexerWords(HWND hwndedit, wyString &keys, wyString &funcs)
{
SendMessage(hwndedit, SCI_SETKEYWORDS, (WPARAM)0, (LPARAM)keys.GetString());
SendMessage(hwndedit, SCI_SETKEYWORDS, (WPARAM)3, (LPARAM)funcs.GetString());
}
开发者ID:Fale,项目名称:sqlyog,代码行数:6,代码来源:EditorFont.cpp
示例20:
// Function creates a text buffer with all the properties and sends newly allocated buffer.
wyBool
TableMakerAdvProperties::GetAdvPropString( Tunnel *tunnel, PMYSQL mysql,
TableAdvPropValues* ptav, wyString& str)
{
wyBool ismysql41 = IsMySQL41(tunnel, mysql);
if(ptav->m_changed == wyFalse)
return wyFalse;
/* nCount += sprintf( szQuery+nCount, " ,type=%s ", ptav->szType );
This comma is not required, this is required in the alter stmt when this
stmt is not the first one. So we are checking it in the query builder
In the latest versions we need 'Engine' in place of 'Type'
*/
if(ptav->m_type.GetLength())
{
if(ismysql41 == wyTrue)
str.AddSprintf(" Engine=%s ", ptav->m_type.GetString());
else
str.AddSprintf(" Type=%s ", ptav->m_type.GetString());
}
if(ptav->m_checksum.CompareI(STR_DEFAULT) != 0)
str.AddSprintf("checksum=%s ", ptav->m_checksum.GetString());
if(ptav->m_auto_incr.GetLength())
str.AddSprintf("auto_increment=%s ", ptav->m_auto_incr.GetString());
if(ptav->m_avg_row.GetLength())
str.AddSprintf("avg_row_length=%s ", ptav->m_avg_row.GetString());
if(ptav->m_comment.GetLength())
str.AddSprintf("comment='%s' ", ptav->m_comment.GetString());
else
str.Add("comment='' ");
if(ptav->m_max_rows.GetLength())
str.AddSprintf("max_rows=%s ", ptav->m_max_rows.GetString());
if(ptav->m_min_rows.GetLength())
str.AddSprintf("min_rows=%s ", ptav->m_min_rows.GetString());
if(ptav->m_delay.CompareI(STR_DEFAULT) != 0)
str.AddSprintf("delay_key_write=%s ", ptav->m_delay.GetString());
if(ptav->m_rowformat.GetLength())
str.AddSprintf("row_format=%s ", ptav->m_rowformat.GetString());
if(ptav->m_chunks.GetLength())
str.AddSprintf("raid_chunks=%s ", ptav->m_chunks.GetString());
if(ptav->m_chunksize.GetLength())
str.AddSprintf("raid_chunksize=%s ", ptav->m_chunksize.GetString());
if(ismysql41 == wyTrue)
{
if(ptav->m_charset.GetLength() && ptav->m_charset.Compare(STR_DEFAULT) != 0)
str.AddSprintf("charset=%s ", ptav->m_charset.GetString());
if(ptav->m_collation.GetLength() && ptav->m_collation.Compare(STR_DEFAULT) != 0)
str.AddSprintf("collate=%s ", ptav->m_collation.GetString());
}
return wyTrue;
}
开发者ID:VPtvfy,项目名称:sqlyog-community,代码行数:66,代码来源:TableMakerAdvProperties.cpp
注:本文中的wyString类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论