123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259 |
- /****************************************************************************
- (c) 2005 by STEMMER IMAGING
- // License: This file is published under the license of the EMVA GenICam Standard Group.
- // A text file describing the legal terms is included in your installation as 'GenICam_license.pdf'.
- // If for some reason you are missing this file please contact the EMVA or visit the website
- // (http://www.genicam.org) for a full copy.
- //
- // THIS SOFTWARE IS PROVIDED BY THE EMVA GENICAM STANDARD GROUP "AS IS"
- // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- // THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE EMVA GENICAM STANDARD GROUP
- // OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
- // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- // POSSIBILITY OF SUCH DAMAGE.
- ****************************************************************************/
- /// \file
- /// \brief Portable string implementation
- /// \ingroup Base_PublicUtilities
- #ifndef GENICAM_GCSTRING_H
- #define GENICAM_GCSTRING_H
- #include <new>
- #include <string>
- #include <iostream>
- #include <Base/GCTypes.h>
- #pragma pack(push, 8)
- /**
- \brief Indicates either 'not found' or 'all remaining characters'.
- \ingroup GenApi_Implementation
- */
- #define GCSTRING_NPOS size_t(-1)
- namespace GENICAM_NAMESPACE
- {
- /**
- \brief A string class which is a clone of std::string
- \ingroup Base_PublicUtilities
- */
- class GCBASE_API gcstring
- {
- # if defined(_MSC_VER) && !defined(PHARLAP_WIN32)
- public:
- //! Helper class for storing shared-ownership wchar_t *
- class GCBASE_API gcwchar
- {
- public:
- //! Creates a buffer of \a n wchar_ts
- explicit gcwchar( size_t n );
- // copy constructor
- gcwchar( const gcwchar &rhs );
- // assignment operator
- gcwchar & operator = (const gcwchar &rhs);
- //! Gets the c-string.
- const wchar_t * c_str() const;
- //! Gets the length of the buffer.
- size_t length() const;
- //! destructor
- ~gcwchar();
- private:
- class impl;
- impl *m_pimpl;
- };
- # endif
- // Ctor / Dtor
- // -------------------------------------------------------------------------
- public:
- gcstring ();
- gcstring ( const char *pc );
- gcstring ( const char *pc, size_t n );
- gcstring ( size_t count, char ch );
- gcstring ( const gcstring &str );
- # if defined(_MSC_VER) && !defined(PHARLAP_WIN32)
- explicit gcstring ( const wchar_t *pBufferUTF16 );
- gcstring ( const wchar_t *pBufferUTF16, size_t n );
- # endif
- virtual ~gcstring ( void );
- // Data access
- // -------------------------------------------------------------------------
- public:
- virtual gcstring & append ( const gcstring &str );
- virtual gcstring & append ( size_t count, char ch );
- virtual gcstring & assign ( const gcstring &str );
- virtual gcstring & assign ( size_t count, char ch );
- virtual gcstring & assign ( const char *pc );
- virtual gcstring & assign ( const char *pc, size_t n );
- # if defined(_MSC_VER) && !defined(PHARLAP_WIN32)
- virtual gcstring & assign ( const wchar_t *pStringUTF16 );
- virtual gcstring & assign ( const wchar_t *pStringUTF16, int n );
- # endif
- virtual int compare ( const gcstring &str ) const;
- # if defined(_MSC_VER) && !defined(PHARLAP_WIN32)
- virtual gcwchar w_str ( void ) const;
- # endif
- virtual const char *c_str ( void ) const;
- virtual bool empty ( void ) const;
- virtual size_t find ( char ch, size_t offset = 0 ) const;
- virtual size_t find ( const gcstring &str, size_t offset = 0 ) const;
- virtual size_t find ( const gcstring &str, size_t offset, size_t count ) const;
- virtual size_t find ( const char* pc, size_t offset = 0) const;
- virtual size_t find ( const char* pc, size_t offset, size_t count ) const;
- virtual size_t length ( void ) const;
- virtual size_t size ( void ) const;
- virtual void resize ( size_t n );
- virtual size_t max_size ( ) const;
- virtual gcstring substr ( size_t offset = 0, size_t count = GCSTRING_NPOS ) const;
- virtual size_t find_first_of ( const gcstring &str, size_t offset = 0 ) const;
- virtual size_t find_first_not_of ( const gcstring &str, size_t offset = 0 ) const;
- static size_t _npos ( void );
- virtual void swap ( gcstring &Right );
- // Operators
- // -------------------------------------------------------------------------
- public:
- bool operator != ( const gcstring &str ) const;
- bool operator != ( const char *pc ) const;
- gcstring & operator += ( const gcstring &str );
- gcstring operator += ( const gcstring &str ) const;
- gcstring & operator += ( const char *pc );
- gcstring & operator += ( char ch );
- gcstring operator += ( char ch ) const;
- gcstring & operator = ( const gcstring &str );
- # if defined(_MSC_VER) && !defined(PHARLAP_WIN32)
- gcstring & operator = ( const wchar_t *pStringUTF16 );
- # endif
- bool operator == ( const gcstring &str ) const;
- bool operator == ( const char *pc ) const;
- bool operator < ( const gcstring &str ) const;
- bool operator > ( const gcstring &str ) const;
- operator const char * ( void ) const;
- void operator delete ( void *pWhere );
- void operator delete ( void *pWhere, void *pNewWhere );
- void * operator new ( size_t uiSize );
- void * operator new ( size_t uiSize, void *pWhere );
- GCBASE_API
- friend gcstring operator + ( const gcstring &left, const gcstring &right );
- GCBASE_API
- friend gcstring operator + ( const gcstring &left, const char *right );
- GCBASE_API
- friend gcstring operator + ( const char *left, const gcstring &right );
- // Member
- // -------------------------------------------------------------------------
- private:
- // redundant pointer to make the possible to see the contents of the string in the debugger
- const char* m_psz;
- // actual std::string object
- uint8_t m_opaqueData[64];
-
- // Constants
- // -------------------------------------------------------------------------
- public:
- // Beware : this static member prevents delay loading
- // use _npos() instead
- static const size_t npos;
- };
- }
- namespace GENICAM_NAMESPACE
- {
- // this is necessary due to the circular dependency between string/exception
- GCBASE_API void ThrowBadAlloc(const char *source, int line);
- //! STL getline
- //! \ingroup Base_PublicUtilities
- inline std::istream & getline(std::istream& is, GENICAM_NAMESPACE::gcstring& str)
- {
- try
- {
- std::string tmp;
- std::getline(is, tmp);
- str.assign(tmp.c_str(), tmp.size());
- }
- catch(std::bad_alloc &)
- {
- ThrowBadAlloc(__FILE__, __LINE__);
- }
- return is;
- }
- //! STL getline
- //! \ingroup Base_PublicUtilities
- inline std::istream & getline(std::istream& is, GENICAM_NAMESPACE::gcstring& str, char delim)
- {
- try
- {
- std::string tmp;
- std::getline(is, tmp, delim);
- str.assign(tmp.c_str(), tmp.size());
- }
- catch(std::bad_alloc &)
- {
- ThrowBadAlloc(__FILE__, __LINE__);
- }
- return is;
- }
- }
- //! STL operator out
- //! \ingroup Base_PublicUtilities
- inline std::ostream & operator <<(std::ostream &ostr, const GENICAM_NAMESPACE::gcstring &str)
- {
- try
- {
- // use formatted output operator of std::string
- ostr << str.c_str();
- }
- catch(std::bad_alloc &)
- {
- GENICAM_NAMESPACE::ThrowBadAlloc(__FILE__, __LINE__);
- }
- return ostr;
- }
- //! STL operator in
- //! \ingroup Base_PublicUtilities
- inline std::istream & operator >>(std::istream &istr, GENICAM_NAMESPACE::gcstring &str)
- {
- try
- {
- std::string tmp;
- istr >> tmp;
- str.assign(tmp.c_str(), tmp.size());
- }
- catch(std::bad_alloc &)
- {
- GENICAM_NAMESPACE::ThrowBadAlloc(__FILE__, __LINE__);
- }
- return istr;
- }
- #pragma pack(pop)
- #endif // GENICAM_GCSTRING_H
|