www.pudn.com > isync2[1].0.rar > CTransferCard.h


/*************************************************************************************************\
*    文件名称 :CTransferCard.h
*    CopyRight (c) 2004 汉王科技公司
*
*    作者    : 王欣
*    创建时间: 2004年09月06日
*    当前版本: 0.1
*
*    说明    :名片传输类,用于名片同步
*
\**************************************************************************************************/
#ifndef CTRANSFERCARD_H
#define CTRANSFERCARD_H

#include "CDatabase.h"
#include 

template
bool AddGroupsFromFile (T *pObj)
{
  FILE *pf = fopen(CardGroupsFileName, "r");
  if (NULL == pf)
  {
    perror("In template function AddGroupsFromFile, fopen ");
    return false;
  }
  fseek(pf, 0, SEEK_END);
  int size = ftell(pf);
  rewind(pf);
  char *p = new char[size + 1];
  if (fread(p, size, 1, pf) >= 0)
  {
    p[size] = '\0';
    char *token = strtok(p, ";");
    while (token != NULL)
    {
      pObj->AddType(token);
      token = strtok(NULL, ";");
    }
  }
  else
  {
    perror("In template function AddGroupsFromFile, fread ");
    delete[] p;
    return false;
  }
  delete[] p;
  fclose(pf);
  return true;
}


class CardStruct_T;

class CTransferCard
{
public:
  enum RetValue_T
  {
    ERR_OPENDB = 0,
    ERR_READDB,
    ERR_WRITEDB,

    RET_DBFULL,
    RET_READ_OVER,
    RET_OK
  };

  CTransferCard ();
  ~CTransferCard ();

  int DBLeftCount (void);    // 得到数据库中还能存储的名片数量,即剩余容量
  int DBUsedCount (void);    // 得到数据库中现有的名片数量
  const char *GetErrString (RetValue_T code);
  RetValue_T InitRead (void);    // 准备读取数据
  RetValue_T InitWrite (void);    // 准备写入数据
  RetValue_T ReadCard (CardStruct_T *pcard);    // 读取一条数据
  RetValue_T WriteCard (CardStruct_T *pcard);    // 写入一条数据
  void TransferComplete (void);    // 结束读取或写入过程
  int Transfered (void);    // 得到已经读取或写入的名片数量

private:

template
  friend bool AddGroupsFromFile (T *p);

  static const int len = 64;
  static char errString[len];
  static const char *errInfo[RET_OK + 1];

  typedef std::vector StrVct_T;
  typedef StrVct_T::iterator SVIter_T;
  enum TransType_T
  {
    UN_INITIAL,
    PC_TO_IPHONE,
    IPHONE_TO_PC
  };

  CDatabase cardDb;
  size_t readId;
  TransType_T stat;
  int transfered;
  StrVct_T typeVct;

  void AddType (const char *typeName);
  bool SaveTypeInfo (void);
};

inline int CTransferCard::DBLeftCount (void)
{
  return cardDb.GetCapacity() - DBUsedCount();
}

inline int CTransferCard::DBUsedCount (void)
{
  return cardDb.GetUsedCount();
}

inline const char *CTransferCard::GetErrString (RetValue_T code)
{
  return errInfo[code];
}

inline int CTransferCard::Transfered (void)
{
  return transfered;
}

#endif