• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags
No Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

programming language


Commit MetaInfo

Revisión854ae1d1b39b4038278986053592dfeeb778b6a2 (tree)
Tiempo2021-12-27 22:45:16
Autordhrname <dhrname@joes...>
Commiterdhrname

Log Message

New a PowerSetElementModel class

Cambiar Resumen

Diferencia incremental

Binary files a/bin/joestar.exe and b/bin/joestar.exe differ
Binary files a/bin/obj/main.o and b/bin/obj/main.o differ
--- a/main.cpp
+++ b/main.cpp
@@ -515,7 +515,7 @@ namespace jstr
515515
516516
517517 /*getUnionMap メンバ関数
518- * 直和の随伴射を返す
518+ * 直和集合を示すマップを返す
519519 * 後述するdisjointメンバ関数で使う*/
520520 virtual std::unordered_map<std::string, UnionModel*> getUnionMap()
521521 {
@@ -526,6 +526,10 @@ namespace jstr
526526 * 引数のuniと、自身を和集合として、直和を構成する*/
527527 virtual void disjoint(UnionModel* uni)
528528 {
529+ if (nullptr == uni)
530+ {
531+ throwMapMatchError("nullptr", " UnionMap", "UnionModel::disjoint");
532+ }
529533 unionmap.merge(uni->getUnionMap());
530534 unionmap[uni->getId()] = uni;
531535 }
@@ -546,12 +550,66 @@ namespace jstr
546550 }
547551 };
548552
549- /*PowerSetModel クラス
550- * べき集合型モデルのクラス
553+ /*PowerSetElementModel クラス
554+ * べき集合型の一つの元を表現するモデルのクラス
551555 * ブール数集合の直積と、対象となる集合の直積の組み合わせで表現できる
552556 * 構造化プログラミング第二部「データ構造化」を参照*/
553- class PowerSetModel: public CartesianProductModel
557+ class PowerSetElementModel: public CartesianProductModel
554558 {
559+ private:
560+ /*boolmapは特徴関数を示すマップのベクタ
561+ * Set⊆Bとなるような、べき集合Bを置くと、
562+ * name∈Set のとき、boolmap[name] = true。
563+ * name∉Setのとき、false*/
564+ std::unordered_map<std::string, bool> boolmap;
565+ /*べき集合の対象となる集合(都合上、直積型モデルを使う)*/
566+ CartesianProductModel* targetSet;
567+ public:
568+ PowerSetElementModel(const std::string& id)
569+ :CartesianProductModel::CartesianProductModel(id),
570+ boolmap{}
571+ {
572+ }
573+
574+ /*getBoolMap メンバ関数
575+ * 特徴関数を表すboolmapを返す*/
576+ std::unordered_map<std::string, bool> getBoolMap()
577+ {
578+ return boolmap;
579+ }
580+
581+ /*addSetOf メンバ関数
582+ * 対象となる集合eleを追加する*/
583+ void addSetOf(CartesianProductModel* ele)
584+ {
585+ targetSet = ele;
586+ }
587+
588+ void adjoint(Arrow* arr) override
589+ {
590+ CartesianProductModel::adjoint(arr);
591+ boolmap[arr->getId()] = true;
592+ }
593+
594+ /*hasElement メンバ関数
595+ * べき集合Bに含まれる要素S( すなわち、S∈B, S⊆B )に、name∈Sかどうかを、さらに要素判定
596+ * 「構造化プログラミング 第二部 データ構造化」のin操作を参照*/
597+ bool hasElement(const std::string& name)
598+ {
599+ if ( !this->hasArrowMap(name) )
600+ {
601+ return false;
602+ }
603+ else if ( !boolmap.contains(name) )
604+ {
605+ return false;
606+ }
607+ else
608+ {
609+ return boolmap[name];
610+ }
611+ }
612+
555613 };
556614
557615 /*ObjectTypeValue クラス
@@ -561,7 +619,7 @@ namespace jstr
561619 {
562620 CartesianProductModel* cartesianProductType;
563621 UnionModel* uniType;
564- PowerSetModel* powerSetType;
622+ PowerSetElementModel* powerSetType;
565623 };
566624
567625 /*BooleanTypeValue クラス
@@ -1687,14 +1745,6 @@ int main(int argc, char **argv)
16871745 EXPECT(unimod2->getUnionModel("className"), unimod);
16881746 EXPECT(unimod2->getUnionModel("className2"), unimod2);
16891747
1690- jstr::Arrow* arrabb(new jstr::Arrow("remoteNameC"));
1691- arrabb->setDomain("15");
1692- arrabb->setCodomain("i08");
1693- jstr::Arrow* arrabc(new jstr::Arrow("remoteNameD"));
1694- arrabc->setDomain("0.2");
1695- arrabc->setCodomain("flo");
1696- unimod2->adjoint(arrabb);
1697- unimod2->adjoint(arrabc);
16981748 delete unimod;
16991749 unimod = nullptr;
17001750 delete unimod2;
@@ -1703,10 +1753,26 @@ int main(int argc, char **argv)
17031753 arraab = nullptr;
17041754 delete arraac;
17051755 arraac = nullptr;
1706- delete arrabb;
1707- arrabb = nullptr;
1708- delete arrabc;
1709- arrabc = nullptr;
1756+
1757+ jstr::PowerSetElementModel* psmod = new jstr::PowerSetElementModel("className");
1758+ jstr::CartesianProductModel* cpmod2 = new jstr::CartesianProductModel("className2");
1759+ psmod->addSetOf(cpmod2);
1760+ jstr::Arrow* arrab2(new jstr::Arrow("remoteNameA"));
1761+ arrab2->setDomain("12");
1762+ arrab2->setCodomain("i08");
1763+ jstr::Arrow* arrac2(new jstr::Arrow("remoteNameB"));
1764+ arrac2->setDomain("0.1");
1765+ arrac2->setCodomain("flo");
1766+ cpmod2->adjoint(arrab2);
1767+ cpmod2->adjoint(arrac2);
1768+ delete psmod;
1769+ psmod = nullptr;
1770+ delete cpmod2;
1771+ cpmod2 = nullptr;
1772+ delete arrab2;
1773+ arrab2 = nullptr;
1774+ delete arrac2;
1775+ arrac2 = nullptr;
17101776
17111777
17121778 jstr::AbstractSyntaxTree* ast = new jstr::AbstractSyntaxTree();
@@ -1784,6 +1850,11 @@ int main(int argc, char **argv)
17841850 delete cpcdmod;
17851851 cpcdmod = nullptr;
17861852
1853+ jstr::UnionModel* unimod3 = new jstr::UnionModel("className");
1854+ TRY_EX(unimod3->disjoint(nullptr));
1855+ delete unimod3;
1856+ unimod3 = nullptr;
1857+
17871858 std::string str1 = "ABC...Finished!";
17881859
17891860 std::cout << "S" << str1 << std::endl;