rknfish

rknfish

i need more love
github

CMU15445 プロジェクト 0 トライツリー

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

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