rknfish

rknfish

i need more love
github

CMU15445 プロジェクト 0 Trie_Tree

CMU 15-445

実験目標#

この実験は、CMU 15-445/645の前提実装です。主に C++ のスキルを評価します。

私が受講しているコースはfall20221で、関連するコードはRelease2からダウンロードできます。

このコースでは、主に 2 つの内容に関わります。

  • 環境の構築方法
  • C++ の使用方法
Mermaid Loading...
Mermaid Loading...

環境の構築#

私は仮想マシン(Ubuntu)+ ローカルコンピュータの SSH を使用して開発しています。

以下のプラグインを VSCode にインストールします。

  • C/C++
  • CMake
  • CMake Tools
  • Remote - SSH

まず、必要なコードをダウンロードして解凍します。

wget https://github.com/cmu-db/bustub/archive/refs/tags/v20221128-2022fall.tar.gz
tar -zxvf v20221128-2022fall.tar.gz  

次に、VSCode の SSH でリモートコンピュータの現在のディレクトリに直接アクセスします。

その後、必要なソフトウェアをインストールします。

sudo build_support/packages.sh

その後、VSCode のいくつかのオプションを設定する必要があります。

vscod

下部の「生成」をクリックします。

image-20231001205625799

次に、「Clang 12.01 x86_64-pc-linux-gnu」を選択します。

デバッグ#

「[all]」の横にあるボタンをクリックして必要なものに切り替えます。

Debug "デバッグ中"

使用されるテスト方法は「GTest」です。

テストファイルのDIABLE_をすべて削除するだけでテストを実行できます。

たとえば、パス/test/primer/starter_trie_test.cppですべてのDIABLE_を削除し、結果を出力してみることができます。ブレークポイントでデバッグするにはを、結果を直接出力するにはを押します。

デバッグ
Debug "デバッグ中"

実行結果
Run "コードの実行結果"

C++ の使用方法#

この領域についてはあまり説明することはありません。

主にstd::unique_ptrの使用方法に集中してください。

以下はいくつかの使用例です。

トライツリーのノードを走査する方法

auto cur_node = &this->root_; // ! スマートポインタへのポインタ
auto par_node = cur_node;

while(cur_node != nullptr) {
  cur_node = cur_node->get()-> GetChildNode(ch);
  ...
  par_node = cur_node;
}

親クラスのポインタで子クラスのノードを動的に構築する方法

auto tmp_node = std::make_unique<T>(std::move(*cur_node) , value);
par_node-> get() -> InsertChildNode(ch, std::move(*tmp_node));
cur_node = par_node-> GetChildNode(ch);

ダウンキャストして子クラスの値を取得する方法

auto tmp_node = dynamic_cast<TrieNodeWithValue<T> *>(cur_node->get());

コースが終了していて完了できない場合は、私のコードを参考にしてください。

Footnotes#

  1. CMU 15-445/645 fall2022 公式ウェブサイト https://15445.courses.cs.cmu.edu/fall2022/

  2. bustub ソースコードの場所 https://github.com/cmu-db/bustub

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。