# HG changeset patch # User Kazuma # Date 1477036669 -32400 # Node ID 4c9d4ecb17e67b7cbf24581e3066896a567ddb25 # Parent ab8f0312b171114f33dfe195e9f8191b00fc404f add cas.pdf diff -r ab8f0312b171 -r 4c9d4ecb17e6 midterm.tex --- a/midterm.tex Thu Oct 20 22:51:34 2016 +0900 +++ b/midterm.tex Fri Oct 21 16:57:49 2016 +0900 @@ -24,7 +24,7 @@ \author{135768K 武田和馬 {}{} 指導教員 : 河野真治} \date{} \maketitle -\thispagestyle{fancy} +\thispagestyle{fancy} \section{非破壊木構造データベース} @@ -49,18 +49,24 @@ しかし、図1のように木構造でゲームは構成されているため、RDB向けにノードの関係を変換する必要がある。 つまり、そのまま格納することができればスケールアウトするデータにも対応でき、データベース設計も簡略化できると考え、C\#に書き直すことにした。 -PlayerPrefsとは、Unityに特化したバイナリ形式でKey,Valueで保存されるものである。 +PlayerPrefsとは、Unityに特化したバイナリ形式でKey,Valueのみで保存されるものである。 \section{Jungle-Sharpの実装} JungleはJavaで書かれているものであったのでUnityで使うにはC\#で実装する必要があった。 +なお、将来的にはクライアント側はC#、サーバー側はJavaで動作させMessagePackを用いてデータのやり取りを行う。 \section{AtomicRefefarenceの実装} % atomic reference問題 +Jungleの木の更新(commit)は、CAS(check and set*図1)を用いて atomic に行われる。競合している書き込みにの中で自分の書き込みが成功した場合に関数 \verb+success()+が成功する。 JavaにはAtomicRefarenceが標準であったがC\#はなかったため、AtomicReferenceのClassを新たに作った。 +\begin{figure}[h] +\includegraphics[width=2cm, bb=0 0 172 200]{pic/cas.pdf} +\end{figure} + {\scriptsize -\begin{itembox}[l]{図1 AtomicReference.cs} +\begin{itembox}[l]{図2 AtomicReference.cs} \begin{verbatim} public class AtomicReference where T : class { private T value; @@ -87,12 +93,13 @@ これによりスレッドセーフな値の変更を行うことが可能になる。 \section{Listの実装} - +Jungleでは、木の編集や、特定のNode下のTreeの探索、Nodeの親をたどるためには全てそのNodeへのPathが必要になる。 +その管理をListで行っている。 Listを実装する際にIteratorが必要となる。 C\#にはIEnumeratorがあるのでそれを利用した。 {\scriptsize -\begin{itembox}[l]{図2 List.cs} +\begin{itembox}[l]{図3 List.cs} \begin{verbatim} public IEnumerator iterator() { Node currentNode = head.getNext(); diff -r ab8f0312b171 -r 4c9d4ecb17e6 pic/cas.pdf Binary file pic/cas.pdf has changed