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

📄 gettingstartedcommon.hpp

📁 linux 下的源代码分析阅读器 red hat公司新版
💻 HPP
字号:
// File: gettingStartedCommon.hpp#ifndef GETTINGSTARTEDCOMMON_H#define GETTINGSTARTEDCOMMON_Hclass InventoryData{public:    inline void setPrice(double price) {price_ = price;}    inline void setQuantity(long quantity) {quantity_ = quantity;}    inline void setCategory(std::string &category) {category_ = category;}    inline void setName(std::string &name) {name_ = name;}    inline void setVendor(std::string &vendor) {vendor_ = vendor;}    inline void setSKU(std::string &sku) {sku_ = sku;}    inline double& getPrice() {return(price_);}    inline long& getQuantity() {return(quantity_);}    inline std::string& getCategory() {return(category_);}    inline std::string& getName() {return(name_);}    inline std::string& getVendor() {return(vendor_);}    inline std::string& getSKU() {return(sku_);}    /* Initialize our data members */    void clear()    {        price_ = 0.0;        quantity_ = 0;        category_ = "";        name_ = "";        vendor_ = "";        sku_ = "";    }    // Default constructor    InventoryData() { clear(); }    // Constructor from a void *    // For use with the data returned from a bdb get    InventoryData(void *buffer)    {        char *buf = (char *)buffer;        price_ = *((double *)buf);        bufLen_ = sizeof(double);        quantity_ = *((long *)(buf + bufLen_));        bufLen_ += sizeof(long);        name_ = buf + bufLen_;        bufLen_ += name_.size() + 1;        sku_ = buf + bufLen_;        bufLen_ += sku_.size() + 1;        category_ = buf + bufLen_;        bufLen_ += category_.size() + 1;        vendor_ = buf + bufLen_;        bufLen_ += vendor_.size() + 1;    }    /*     * Marshalls this classes data members into a single     * contiguous memory location for the purpose of storing     * the data in a database.     */    char *    getBuffer()    {        // Zero out the buffer        memset(databuf_, 0, 500);        /*         * Now pack the data into a single contiguous memory location for         * storage.         */        bufLen_ = 0;        int dataLen = 0;        dataLen = sizeof(double);        memcpy(databuf_, &price_, dataLen);        bufLen_ += dataLen;        dataLen = sizeof(long);        memcpy(databuf_ + bufLen_, &quantity_, dataLen);        bufLen_ += dataLen;        packString(databuf_, name_);        packString(databuf_, sku_);        packString(databuf_, category_);        packString(databuf_, vendor_);        return (databuf_);    }    /*     * Returns the size of the buffer. Used for storing     * the buffer in a database.     */    inline size_t getBufferSize() { return (bufLen_); }    /* Utility function used to show the contents of this class */    void    show() {        std::cout << "\nName:           " << name_ << std::endl;        std::cout << "    SKU:        " << sku_ << std::endl;        std::cout << "    Price:      " << price_ << std::endl;        std::cout << "    Quantity:   " << quantity_ << std::endl;        std::cout << "    Category:   " << category_ << std::endl;        std::cout << "    Vendor:     " << vendor_ << std::endl;    }private:    /*     * Utility function that appends a char * to the end of     * the buffer.     */    void    packString(char *buffer, std::string &theString)    {        size_t string_size = theString.size() + 1;        memcpy(buffer+bufLen_, theString.c_str(), string_size);        bufLen_ += string_size;    }    /* Data members */    std::string category_, name_, vendor_, sku_;    double price_;    long quantity_;    size_t bufLen_;    char databuf_[500];};#define MAXFIELD 20typedef struct vendor {    char name[MAXFIELD];             /* Vendor name */    char street[MAXFIELD];           /* Street name and number */    char city[MAXFIELD];             /* City */    char state[3];                   /* Two-digit US state code */    char zipcode[6];                 /* US zipcode */    char phone_number[13];           /* Vendor phone number */    char sales_rep[MAXFIELD];        /* Name of sales representative */    char sales_rep_phone[MAXFIELD];  /* Sales rep's phone number */} VENDOR;// Forward declarationsclass Db;class Dbt;// Used to extract an inventory item's name from an// inventory database record. This function is used to create// keys for secondary database records.intget_item_name(Db *dbp, const Dbt *pkey, const Dbt *pdata, Dbt *skey){    /*     * First, obtain the buffer location where we placed the item's name. In     * this example, the item's name is located in the primary data. It is the     * first string in the buffer after the price (a double) and the quantity     * (a long).     */    u_int32_t offset = sizeof(double) + sizeof(long);    char *itemname = (char *)pdata->get_data() + offset;    // unused    (void)pkey;    /*     * If the offset is beyond the end of the data, then there was a problem     * with the buffer contained in pdata, or there's a programming error in     * how the buffer is marshalled/unmarshalled.  This should never happen!     */    if (offset > pdata->get_size()) {        dbp->errx("get_item_name: buffer sizes do not match!");        // When we return non-zero, the index record is not added/updated.        return (-1);    }    /* Now set the secondary key's data to be the item name */    skey->set_data(itemname);    skey->set_size((u_int32_t)strlen(itemname) + 1);    return (0);};#endif

⌨️ 快捷键说明

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