FluSimpleString.cpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:4k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: FluSimpleString.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 21:05:27  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.3
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*
  10.  * These files were imported into NCBI's CVS directly from FLU version 2.9.1.
  11.  * Modifications to the source are listed below.
  12.  *
  13.  * ==========================================================================
  14.  * $Log: FluSimpleString.cpp,v $
  15.  * Revision 1000.1  2004/06/01 21:05:27  gouriano
  16.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.3
  17.  *
  18.  * Revision 1.3  2004/05/21 22:27:51  gorelenk
  19.  * Added PCH ncbi_pch.hpp
  20.  *
  21.  * Revision 1.2  2004/03/11 14:10:10  dicuccio
  22.  * Fixes for 64-bit compilation.  Cast away const from strchr() where needed
  23.  *
  24.  * Revision 1.1  2004/03/11 13:51:39  dicuccio
  25.  * Imported FLU version 2.9.1.  Altered export specifiers to match NCBI layout.
  26.  * Altered include paths to match NCBI toolkit layout.
  27.  *
  28.  * ==========================================================================
  29.  */
  30. // $Id: FluSimpleString.cpp,v 1000.1 2004/06/01 21:05:27 gouriano Exp $
  31. /***************************************************************
  32.  *                FLU - FLTK Utility Widgets 
  33.  *  Copyright (C) 2002 Ohio Supercomputer Center, Ohio State University
  34.  *
  35.  * This file and its content is protected by a software license.
  36.  * You should have received a copy of this license with this file.
  37.  * If not, please contact the Ohio Supercomputer Center immediately:
  38.  * Attn: Jason Bryan Re: FLU 1224 Kinnear Rd, Columbus, Ohio 43212
  39.  * 
  40.  ***************************************************************/
  41. #include <ncbi_pch.hpp>
  42. #include <gui/widgets/FLU/FluSimpleString.h>
  43. FluSimpleString :: FluSimpleString()
  44. {
  45.   str = strdup("");
  46. }
  47. FluSimpleString :: FluSimpleString( unsigned int len )
  48. {
  49.   if( len > 0 )
  50.     str = (char*)malloc( len );
  51.   else
  52.     str = strdup("");
  53. }
  54. FluSimpleString :: FluSimpleString( const char *s )
  55. {
  56.   str = strdup("");
  57.   *this = s;
  58. }
  59. FluSimpleString :: FluSimpleString( const FluSimpleString& s )
  60. {
  61.   str = strdup("");
  62.   *this = s.str;
  63. }
  64. FluSimpleString :: ~FluSimpleString()
  65. {
  66.   if(str)
  67.     free(str);
  68. }
  69. void FluSimpleString :: copy( const char *s, unsigned int start, unsigned int len )
  70. {
  71.   if( len == 0 ) return;
  72.   if( s == 0 ) return;
  73.   if( start+len > strlen(s) ) return;
  74.   if(str) free(str);
  75.   str = (char*)malloc( len+1 );
  76.   strncpy( str, s+start, len );
  77.   str[len] = '';
  78. }
  79. int FluSimpleString :: compare( const FluSimpleString &s ) const
  80. {
  81.   return strcmp( str, s.str );
  82. }
  83. int FluSimpleString :: casecompare( const FluSimpleString &s ) const
  84. {
  85.   FluSimpleString s1(str), s2(s);
  86.   s1.upcase();
  87.   s2.upcase();
  88.   return strcmp( s1.str, s2.str );
  89. }
  90. void FluSimpleString :: upcase()
  91. {
  92.   unsigned int l = (unsigned int)strlen(str);
  93.   for( unsigned int i = 0; i < l; i++ )
  94.     str[i] = toupper( str[i] );
  95. }
  96. void FluSimpleString :: downcase()
  97. {
  98.   unsigned int l = (unsigned int)strlen(str);
  99.   for( unsigned int i = 0; i < l; i++ )
  100.     str[i] = tolower( str[i] );
  101. }
  102. int FluSimpleString :: find( char c ) const
  103. {
  104.   const char *i = strchr( str, c );
  105.   if( !i )
  106.     return -1;
  107.   else
  108.     return static_cast<int>(i-str);
  109. }
  110. int FluSimpleString :: rfind( char c ) const
  111. {
  112.   const char *i = strrchr( str, c );
  113.   if( !i )
  114.     return -1;
  115.   else
  116.     return static_cast<int>(i-str);
  117. }
  118. FluSimpleString FluSimpleString :: substr( int pos, int len ) const
  119. {
  120.   if( (pos+len) <= 0 || (pos+len) > size() )
  121.     return FluSimpleString("");
  122.   else
  123.     {
  124.       char *buf = (char*)malloc( len+1 );
  125.       strncpy( buf, str+pos, len );
  126.       buf[len] = '';
  127.       FluSimpleString s = buf;
  128.       free( buf );
  129.       return s;
  130.     }
  131. }
  132. FluSimpleString& FluSimpleString :: operator =( const char *s )
  133.   char* tmp;
  134.   if(s==0)
  135.     tmp = strdup("");
  136.   else
  137.     tmp = strdup(s);
  138.   if(str)
  139.     free(str);
  140.   str = tmp;
  141.   return *this;
  142. }
  143. FluSimpleString& FluSimpleString :: operator +=( const char *s )
  144. {
  145.   if( s==0 )
  146.     s = "";
  147.   char *old = strdup(str);
  148.   int lold = (int)strlen(old), ls = (int)strlen(s);
  149.   free(str);
  150.   str = (char*)malloc( lold + ls + 1 );
  151.   memcpy( str, old, lold );
  152.   memcpy( str+lold, s, ls );
  153.   str[lold+ls] = '';
  154.   free(old);
  155.   return *this;
  156. }