2008-04-30-02-【Scrooge】データ構造 - 9 - project-enigma

2008-04-30-02-【Scrooge】データ構造 - 9

>> Site top >> weblog >> 月別アーカイブ >> 2008年04月のlog >> 2008-04-30-02-【Scrooge】データ構造 - 9

最終更新日付:2014/01/02 00:00:00


【Scrooge】データ構造 - 9

2008 年 04 月 30 日

今日はあまり時間がないので、小さなトピックについて。PriceDB の「詳細情報」についてだ。一昨日の図をもう一度見てみよう。

詳細情報とは、割引きイベントがある場合に使用されるものだ。問題は、これが可変長のデータになってしまうということだ。4月に入ったばかりの頃の画面イメージをもう一度。

「なし」か「週単位」か「月単位」のいずれかとなる(そう、年単位はやめようと思っている)。この3択の列挙子は詳細情報の先頭にあるべきだ。しかし、そこから先は状況によりけり、ということになる。

とりあえず、この3択を表現する列挙子を作ってみよう。そして割引きの種類(円または%か)もついでに。

enum DiscountSchedule {
    DISCOUNT_NONE    = 0,
    DISCOUNT_WEEKLY  = 1,
    DISCOUNT_MONTHLY = 2
};
 
enum DiscountType {
    DISCOUNT_YEN     = 0,
    DISCOUNT_PERCENT = 1
};

で、いささか乱暴だが週指定の割引きを以下のようにしておく。

struct WeeklyDiscountInfo {
    UInt16       interval;
    bool         dayofweek[7];
    UInt16       discount;
    DiscountType type;    
};

月指定は以下のようになる。

struct MonthlyDiscountInfo {
    UInt16       discount;
    DiscountType type;
    char         dateList[1];
};

構造体の最後に長さ1の char 配列を置くのはよく使われるテクニックで、必要な文字列分を余計にアロケートすることで、構造体の後ろに文字列バッファを置くことができるというものだ。これは Palm OS データベースの場合だって使える。

...時間切れ。続きは明日以降。

 

コメント

このページにコメントする

 

このページのタグ

Page tag : Palm

 

 


Copyright(C) 2005-2017 project-enigma.
Generated by CL-PREFAB.

class='sidebar'>

project-enigma

 



//www.fsf.org/'>

 

メニュー

更新履歴

2017/10/02

2017/09/15

2017/09/14