StStore.cpp
上传用户:zhanglf88
上传日期:2013-11-19
资源大小:6036k
文件大小:3k
源码类别:

金融证券系统

开发平台:

Visual C++

  1. /*
  2. Cross Platform Core Code.
  3. Copyright(R) 2001-2002 Balang Software.
  4. All rights reserved.
  5. Using:
  6. class IStStore;
  7. */
  8. #include "StdAfx.h"
  9. #include "../Include/Database.h"
  10. #include "../Include/SpString.h"
  11. #include "QianLong.h"
  12. #include "ShengLong.h"
  13. #include "SelfDB.h"
  14. #ifdef _DEBUG
  15. #define new DEBUG_NEW
  16. #undef THIS_FILE
  17. static char THIS_FILE[] = __FILE__;
  18. #endif
  19. ////////////////////////////////////////////////////////////////////////////////////////////
  20. // class CDBType
  21. CDBType::CDBType( )
  22. {
  23. type = IStStore::dbtypeUnknown;
  24. memset(name,0,sizeof(name));
  25. }
  26. ////////////////////////////////////////////////////////////////////////////////////////////
  27. // class IStStore
  28. BOOL IStStore::IsValidDataType( int nType )
  29. {
  30. return ( dbtypeSelfDB == nType || dbtypeQianlong == nType
  31. || dbtypeShenglong == nType );
  32. }
  33. int IStStore::GetSupportedDataType ( CDBType * pdbtype, int maxsize )
  34. {
  35. SP_ASSERT( pdbtype );
  36. if( NULL == pdbtype || maxsize < 5 )
  37. return -1;
  38. pdbtype[0].type = CSelfDB::GetType();
  39. strncpy( pdbtype[0].name, CSelfDB::GetName(), min(sizeof(pdbtype[0].name)-1,strlen(CSelfDB::GetName())) );
  40. pdbtype[1].type = CQianlong::GetType();
  41. strncpy( pdbtype[1].name, CQianlong::GetName(), min(sizeof(pdbtype[1].name)-1,strlen(CQianlong::GetName())) );
  42. // pdbtype[2].type = CShenglong::GetType();
  43. // strncpy( pdbtype[2].name, CShenglong::GetName(), min(sizeof(pdbtype[2].name)-1,strlen(CShenglong::GetName())) );
  44. return 2;
  45. }
  46. IStStore * IStStore::CreateStore( const char * rootpath, int nDBType )
  47. {
  48. IStStore * pRet = NULL;
  49. // argument test
  50. if( ! rootpath || strlen(rootpath)<=0 || strlen(rootpath)>1023 || 0 != access(rootpath,0) )
  51. return NULL;
  52. // test rootpath type one by one
  53. char accurateroot[1024];
  54. memset( accurateroot, 0, sizeof(accurateroot) );
  55. switch( nDBType )
  56. {
  57. case dbtypeUnknown:
  58. if( CSelfDB::GetAccurateRoot( rootpath, accurateroot, 1024 ) )
  59. pRet = new CSelfDB( accurateroot, TRUE );
  60. else if( CQianlong::GetAccurateRoot( rootpath, accurateroot, 1024 ) )
  61. pRet = new CQianlong( accurateroot, TRUE );
  62. else if( CShenglong::GetAccurateRoot( rootpath, accurateroot, 1024 ) )
  63. pRet = new CShenglong( accurateroot, TRUE );
  64. else
  65. return NULL;
  66. break;
  67. case dbtypeSelfDB:
  68. if( CSelfDB::GetAccurateRoot( rootpath, accurateroot, 1024 ) )
  69. pRet = new CSelfDB( accurateroot, TRUE );
  70. break;
  71. case dbtypeQianlong:
  72. if( CQianlong::GetAccurateRoot( rootpath, accurateroot, 1024 ) )
  73. pRet = new CQianlong( accurateroot, TRUE );
  74. break;
  75. case dbtypeShenglong:
  76. if( CShenglong::GetAccurateRoot( rootpath, accurateroot, 1024 ) )
  77. pRet = new CShenglong( accurateroot, TRUE );
  78. break;
  79. default:
  80. return NULL;
  81. }
  82. return pRet;
  83. }
  84. const char * IStStore::GetRootPath( )
  85. {
  86. return m_szRootPath;
  87. }