⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 variant.hpp

📁 ncbi源码
💻 HPP
字号:
/* * =========================================================================== * PRODUCTION $Log: variant.hpp,v $ * PRODUCTION Revision 1000.3  2004/04/21 14:47:10  gouriano * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.21 * PRODUCTION * =========================================================================== */#ifndef DBAPI___VARIANT__HPP#define DBAPI___VARIANT__HPP/* $Id: variant.hpp,v 1000.3 2004/04/21 14:47:10 gouriano Exp $ * =========================================================================== * *                            PUBLIC DOMAIN NOTICE                           *               National Center for Biotechnology Information *                                                                           *  This software/database is a "United States Government Work" under the    *  terms of the United States Copyright Act.  It was written as part of     *  the author's official duties as a United States Government employee and  *  thus cannot be copyrighted.  This software/database is freely available  *  to the public for use. The National Library of Medicine and the U.S.     *  Government have not placed any restriction on its use or reproduction.   *                                                                           *  Although all reasonable efforts have been taken to ensure the accuracy   *  and reliability of the software and data, the NLM and the U.S.           *  Government do not and cannot warrant the performance or results that     *  may be obtained by using this software or data. The NLM and the U.S.     *  Government disclaim all warranties, express or implied, including        *  warranties of performance, merchantability or fitness for any particular *  purpose.                                                                 *                                                                           *  Please cite the author in any work or product based on this material.    * * =========================================================================== * * Author:  Michael Kholodov *    * File Description:  CVariant class implementation * */#include <corelib/ncbiobj.hpp>#include <corelib/ncbitype.h>#include <corelib/ncbitime.hpp>#include <dbapi/driver/types.hpp>/** @addtogroup DbVariant * * @{ */BEGIN_NCBI_SCOPE/////////////////////////////////////////////////////////////////////////////////  CVariantException::////  class NCBI_DBAPI_EXPORT CVariantException : public std::exception {public:    CVariantException(const string& msg);        virtual ~CVariantException() throw();      virtual const char* what() const throw();private:    const string m_msg;};/////////////////////////////////////////////////////////////////////////////////  EDateTimeFormat::////  DateTime format//enum EDateTimeFormat {     eShort,     eLong };/////////////////////////////////////////////////////////////////////////////////  CVariant::////  CVariant data type//class NCBI_DBAPI_EXPORT CVariant{public:    // Contructors to create CVariant from various primitive types    explicit CVariant(Int8 v);    explicit CVariant(Int4 v);    explicit CVariant(Int2 v);    explicit CVariant(Uint1 v);    explicit CVariant(float v);    explicit CVariant(double v);    explicit CVariant(bool v);    explicit CVariant(const string& v);    explicit CVariant(const char* s);    // Factories for different types    // NOTE: pass p = 0 to make NULL value    static CVariant BigInt       (Int8 *p);    static CVariant Int          (Int4 *p);    static CVariant SmallInt     (Int2 *p);    static CVariant TinyInt      (Uint1 *p);    static CVariant Float        (float *p);    static CVariant Double       (double *p);    static CVariant Bit          (bool *p);    static CVariant LongChar     (const char *p, size_t len = 0);    static CVariant VarChar      (const char *p, size_t len = 0);    static CVariant Char         (size_t size, const char *p);    static CVariant LongBinary   (size_t maxSize, const void *p, size_t len);    static CVariant VarBinary    (const void *p, size_t len);    static CVariant Binary       (size_t size, const void *p, size_t len);    static CVariant SmallDateTime(CTime *p);    static CVariant DateTime     (CTime *p);    static CVariant Numeric      (unsigned int precision,                                  unsigned int scale,                                  const char* p);    // Make "placeholder" CVariant by type, containing NULL value    CVariant(EDB_Type type, size_t size = 0);    // Make DATETIME representation in long and short forms    CVariant(const class CTime& v, EDateTimeFormat fmt);    // Make CVariant from internal CDB_Object    explicit CVariant(CDB_Object* obj);    // Copy constructor    CVariant(const CVariant& v);    // Destructor    ~CVariant();    // Get methods    EDB_Type GetType() const;    Int8          GetInt8(void) const;     string        GetString(void) const;    Int4          GetInt4(void) const;    Int2          GetInt2(void) const;    Uint1         GetByte(void) const;    float         GetFloat(void) const;    double        GetDouble(void) const;    bool          GetBit(void) const;    string        GetNumeric(void) const;    const CTime&  GetCTime(void) const;    // Get the argument, if the column is NULL    string AsNotNullString(const string& v) const;    // Status info    bool IsNull() const;    // operators    CVariant& operator=(const CVariant& v);    CVariant& operator=(const Int8& v);    CVariant& operator=(const Int4& v);    CVariant& operator=(const Int2& v);    CVariant& operator=(const Uint1& v);    CVariant& operator=(const float& v);    CVariant& operator=(const double& v);    CVariant& operator=(const string& v);    CVariant& operator=(const char* v);    CVariant& operator=(const bool& v);    CVariant& operator=(const CTime& v);        bool operator<(const CVariant& v) const;    // Get pointer to the data buffer    // NOTE: internal use only!    CDB_Object* GetData() const;    // Get pointer to the data buffer, throws CVariantException if buffer is 0    // NOTE: internal use only!    CDB_Object* GetNonNullData() const;    // Methods to work with BLOB data (Text and Image)    size_t GetBlobSize() const;    size_t Read(void* buf, size_t len) const;    size_t Append(const void* buf, size_t len);    // Truncates from buffer end to buffer start.     // Truncates everything if no argument    void Truncate(size_t len = kMax_UInt);    // Moves the internal position pointer    bool MoveTo(size_t pos) const;protected:    // Set methods    void SetData(CDB_Object* o);private:    void VerifyType(bool e) const;    class CDB_Object* m_data;};//================================================================inlineCDB_Object* CVariant::GetData() const {     return m_data; }inlineEDB_Type CVariant::GetType() const{    return m_data->GetType();}inlinebool operator==(const CVariant& v1,		const CVariant& v2) {    return !(v1 < v2) && !(v2 < v1);}inlinebool operator!=(const CVariant& v1,		const CVariant& v2) {    return v1 < v2 || v2 < v1;}inlinevoid CVariant::VerifyType(bool e) const{    if( !e ) {#ifdef _DEBUG        _TRACE("CVariant::VerifyType(): Wrong type");        _ASSERT(0); #else        throw CVariantException("CVariant::VerifyType(): Wrong type");#endif    }}END_NCBI_SCOPE/* * =========================================================================== * $Log: variant.hpp,v $ * Revision 1000.3  2004/04/21 14:47:10  gouriano * PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.21 * * Revision 1.21  2004/04/08 15:57:21  kholodov * Multiple bug fixes and optimizations * * Revision 1.20  2004/02/10 18:52:35  kholodov * Modified: made Move() method const * * Revision 1.19  2003/12/15 20:05:41  ivanov * Added export specifier for building DLLs in MS Windows. * * Revision 1.18  2003/12/10 22:34:04  kholodov * Added: MoveTo() method * * Revision 1.17  2003/12/10 21:13:42  kholodov * Added: size argument in CVariant(EDB_Type) constructor * * Revision 1.16  2003/11/18 16:58:52  kholodov * Added: operator=(const char*) * * Revision 1.15  2003/08/15 19:48:26  kholodov * Fixed: const method GetBlobSize() * * Revision 1.14  2003/08/12 21:11:22  kholodov * Added: AsNotNullString() method * * Revision 1.13  2003/08/01 20:33:02  vakatov * Explicitly qualify "exception" with "std::" to avoid a silly name conflict * with <math.h> for SUN Forte6u2 compiler * * Revision 1.12  2003/06/25 22:24:46  kholodov * Added: GetBlobSize() method * * Revision 1.11  2003/05/05 18:33:15  kholodov * Added: LONGCHAR and LONGBINARY support * * Revision 1.10  2003/04/11 17:45:58  siyan * Added doxygen support * * Revision 1.9  2002/09/16 21:04:03  kholodov * Modified: CVariant::Assign<> template removed * * Revision 1.8  2002/09/16 19:31:08  kholodov * Added: Numeric datatype support * Added: CVariant::operator=() methods for working with bulk insert * Added: Methods for writing BLOBs during bulk insert * * Revision 1.7  2002/05/16 21:59:55  kholodov * Added: _TRACE() message to VerifyType() * * Revision 1.6  2002/04/15 19:12:57  kholodov * Added VerifyType() method * * Revision 1.5  2002/03/13 16:52:21  kholodov * Added: Full destructor definition in CVariantException with throw() * to conform with the parent's virtual destructor. * Modified: Moved CVariantException methods' definitions to variant.cpp file * * Revision 1.4  2002/02/08 15:50:38  kholodov * Modified: integer types used are Int8, Int4, Int2, Uint1 * Added: factories for CVariants of a particular type * * Revision 1.3  2002/02/06 22:50:49  kholodov * Conditionalized the usage of long long * * Revision 1.2  2002/02/06 22:21:00  kholodov * Added constructor from long long to BigInt type * * Revision 1.1  2002/01/30 14:51:24  kholodov * User DBAPI implementation, first commit * * =========================================================================== */#endif // DBAPI___VARIANT__HPP

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -