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

📄 gsm_sms_store.h

📁 对各种手机进行编程的工具包源码gsmlib 1.9版本。
💻 H
字号:
// *************************************************************************// * GSM TA/ME library// *// * File:    gsm_sms_store.h// *// * Purpose: SMS functions, SMS store// *          (ETSI GSM 07.05)// *// * Author:  Peter Hofmann (software@pxh.de)// *// * Created: 20.5.1999// *************************************************************************#ifndef GSM_SMS_STORE_H#define GSM_SMS_STORE_H#include <string>#include <iterator>#include <gsmlib/gsm_at.h>#include <gsmlib/gsm_util.h>#include <gsmlib/gsm_sms.h>#include <gsmlib/gsm_cb.h>using namespace std;namespace gsmlib{  // forward declarations  class SMSStore;  class MeTa;  // a single entry in the SMS store  class SMSStoreEntry : public RefBase  {  public:    // status in ME memory    enum SMSMemoryStatus {ReceivedUnread = 0, ReceivedRead = 1,                          StoredUnsent = 2, StoredSent = 3,                          All = 4, Unknown = 5};  private:    SMSMessageRef _message;    SMSMemoryStatus _status;    bool _cached;    SMSStore *_mySMSStore;    int _index;  public:    // this constructor is only used by SMSStore    SMSStoreEntry();    // create new entry given a SMS message    SMSStoreEntry(SMSMessageRef message) :      _message(message), _status(Unknown), _cached(true), _mySMSStore(NULL),      _index(0) {}    // create new entry given a SMS message and an index    // only to be used for file-based stores (see gsm_sorted_sms_store)    SMSStoreEntry(SMSMessageRef message, int index) :      _message(message), _status(Unknown), _cached(true), _mySMSStore(NULL),      _index(index) {}        // return SMS message stored in the entry    SMSMessageRef message() const throw(GsmException);    // return CB message stored in the entry    CBMessageRef cbMessage() const throw(GsmException);    // return message status in store    SMSMemoryStatus status() const throw(GsmException);    // return true if empty, ie. no SMS in this entry    bool empty() const throw(GsmException);    // send this PDU from store    // returns message reference and ACK-PDU (if requested)    // only applicate to SMS-SUBMIT and SMS-COMMAND    unsigned char send(Ref<SMSMessage> &ackPdu) throw(GsmException);        // same as above, but ACK-PDU is discarded    unsigned char send() throw(GsmException);    // return index (guaranteed to be unique,    // can be used for identification in store)    int index() const {return _index;}    // return true if entry is cached (and caching is enabled)    bool cached() const;    // return deep copy of this entry    Ref<SMSStoreEntry> clone();    // equality operator    bool operator==(const SMSStoreEntry &e) const;    // return store reference    SMSStore *getStore() {return _mySMSStore;}    // copy constructor and assignment    SMSStoreEntry(const SMSStoreEntry &e);    SMSStoreEntry &operator=(const SMSStoreEntry &e);    friend class SMSStore;  };  // iterator for the SMSStore class#if __GNUC__ == 2 && __GNUC_MINOR__ == 95  class SMSStoreIterator : public random_access_iterator<SMSStoreEntry,                           int>#else  class SMSStoreIterator : public iterator<random_access_iterator_tag,                           SMSStoreEntry, int>#endif  {    int _index;    SMSStore *_store;    SMSStoreIterator(int index, SMSStore *store) :      _index(index), _store(store) {}  public:    SMSStoreIterator(SMSStoreEntry *entry) :      _index(entry->index()), _store(entry->getStore()) {}    SMSStoreEntry &operator*();    SMSStoreEntry *operator->();    SMSStoreIterator &operator+(int i)      {_index += i; return *this;}    operator SMSStoreEntry*();    SMSStoreIterator &operator=(const SMSStoreIterator &i);    SMSStoreIterator &operator++()      {++_index; return *this;}    SMSStoreIterator &operator--()      {--_index; return *this;}    SMSStoreIterator &operator++(int i)      {_index += i; return *this;}    SMSStoreIterator &operator--(int i)      {_index -= i; return *this;}    bool operator<(SMSStoreIterator &i)      {return _index < i._index;}    bool operator==(const SMSStoreIterator &i) const      {return _index == i._index;}    friend class SMSStore;  };#if __GNUC__ == 2 && __GNUC_MINOR__ == 95  class SMSStoreConstIterator : public random_access_iterator<SMSStoreEntry,                                int>#else  class SMSStoreConstIterator : public iterator<random_access_iterator_tag,                                SMSStoreEntry, int>#endif  {    int _index;    const SMSStore *_store;    SMSStoreConstIterator(int index, const SMSStore *store) :      _index(index), _store(store) {}  public:    const SMSStoreEntry &operator*();    const SMSStoreEntry *operator->();    SMSStoreConstIterator &operator++()      {++_index; return *this;}    SMSStoreConstIterator &operator--()      {--_index; return *this;}    SMSStoreConstIterator &operator++(int i)      {_index += i; return *this;}    SMSStoreConstIterator &operator--(int i)      {_index -= i; return *this;}    bool operator<(SMSStoreConstIterator &i)      {return _index < i._index;}    bool operator==(const SMSStoreConstIterator &i) const      {return _index == i._index;}    friend class SMSStore;  };  // this class corresponds to a SMS store in the ME  // all functions directly update storage in the ME  // if the ME is exchanged, the storage may become corrupted because  // of internal buffering in the SMSStore class  class SMSStore : public RefBase, public NoCopy  {  private:    vector<SMSStoreEntry*> _store; // vector of store entries    string _storeName;          // name of the store, 2-byte like "SM"    Ref<GsmAt> _at;             // my GsmAt class    MeTa &_meTa;                // my MeTa class    bool _useCache;             // true if entries should be cached    // internal access functions    // read/write entry from/to ME    void readEntry(int index, SMSMessageRef &message,                   SMSStoreEntry::SMSMemoryStatus &status) throw(GsmException);    void readEntry(int index, CBMessageRef &message) throw(GsmException);    void writeEntry(int &index, SMSMessageRef message)      throw(GsmException);    // erase entry    void eraseEntry(int index) throw(GsmException);    // send PDU index from store    // returns message reference and ACK-PDU (if requested)    // only applicate to SMS-SUBMIT and SMS-COMMAND    unsigned char send(int index, Ref<SMSMessage> &ackPdu) throw(GsmException);        // do the actual insertion, return index of new element    int doInsert(SMSMessageRef message) throw(GsmException);    // used by class MeTa    SMSStore(string storeName, Ref<GsmAt> at, MeTa &meTa) throw(GsmException);    // resize store entry vector if necessary    void resizeStore(int newSize);  public:    // iterator defs    typedef SMSStoreIterator iterator;    typedef SMSStoreConstIterator const_iterator;    typedef SMSStoreEntry &reference;    typedef const SMSStoreEntry &const_reference;    // set cache mode on or off    void setCaching(bool useCache) {_useCache = useCache;}    // return name of this store (2-character string)    string name() const {return _storeName;}    // SMS store traversal commands    // these are suitable to use stdc++ lib algorithms and iterators    // ME have fixed storage space implemented as memory slots    // that may either be empty or used        // traversal commands    iterator begin();    const_iterator begin() const;    iterator end();    const_iterator end() const;    reference front();    const_reference front() const;    reference back();    const_reference back() const;    reference operator[](int n);    const_reference operator[](int n) const;    // The size macros return the number of used entries    // Warning: indices may be _larger_ than size() because of this    // (perhaps this should be changed, because it is unexpected behavior)    int size() const throw(GsmException);    int max_size() const {return _store.size();}    int capacity() const {return _store.size();}    bool empty() const throw(GsmException) {return size() == 0;}    // insert iterators insert into the first empty cell regardless of position    // existing iterators may be invalidated after an insert operation    // return position    // insert only writes to available positions    // warning: insert fails silently if size() == max_size()    iterator insert(iterator position, const SMSStoreEntry& x)      throw(GsmException);    iterator insert(const SMSStoreEntry& x) throw(GsmException);    // insert n times, same procedure as above    void insert (iterator pos, int n, const SMSStoreEntry& x)      throw(GsmException);    void insert (iterator pos, long n, const SMSStoreEntry& x)      throw(GsmException);    // erase operators set used slots to "empty"    iterator erase(iterator position) throw(GsmException);    iterator erase(iterator first, iterator last) throw(GsmException);    void clear() throw(GsmException);    // destructor    ~SMSStore();    friend class SMSStoreEntry;    friend class MeTa;  };  typedef Ref<SMSStore> SMSStoreRef;};#endif // GSM_SMS_STORE_H

⌨️ 快捷键说明

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