void Konkat (List L1, List L2, List *L3) { /* Kamus Lokal */ address P, Pt; boolean gagal; /* Algoritma */ CreateList(L3); gagal = false; P = First(L1); while ((P != Nil)&&(!gagal)) { Pt = Alokasi(Info(P)); if (Pt != Nil) { InsertLast(L3,Pt); P = Next(P); } else { gagal = true; DelAll(L3); } } if (!gagal) { P = First(L2); while ((P != Nil)&&(!gagal)) { Pt = Alokasi(Info(P)); if (Pt != Nil) { InsertLast(L3,Pt); P = Next(P); } else { gagal = true; DelAll(L3); } } } }
void PecahList (List *L1, List *L2, List L) /* I.S. L mungkin kosong */ /* F.S. Berdasarkan L, dibentuk dua buah list L1 dan L2 */ /* L tidak berubah: untuk membentuk L1 dan L2 harus alokasi */ /* L1 berisi separuh elemen L dan L2 berisi sisa elemen L */ /* Jika elemen L ganjil, maka separuh adalah NbElmt(L) div 2 */ { addressList P = First(L), PPecah; int count = 0, half = NbElmt(L) / 2, success = 1; CreateEmptyList(L1); CreateEmptyList(L2); while (P != NULL && success) { count++; PPecah = Alokasi(Info(P)); if (PPecah != NULL) { if (count <= half) { InsertLast(L1, PPecah); } else { InsertLast(L2, PPecah); } } else { success = 0; } P = Next(P); } if (!success) { DelAll(L1); DelAll(L2); } }
List FCopyList (List L) /* Mengirimkan list yang merupakan salinan L */ /* dengan melakukan alokasi. */ /* Jika ada alokasi gagal, hasilnya list kosong dan */ /* semua elemen yang terlanjur di-alokasi, harus didealokasi */ { List CopiedList; addressList CopyP, P = First(L); int success = 1; CreateEmptyList(&CopiedList); while (P != NULL && success) { CopyP = Alokasi(Info(P)); if (CopyP != NULL) { InsertLast(&CopiedList, CopyP); P = Next(P); } else { success = 0; } } if (!success) DelAll(&CopiedList); return CopiedList; }
List FInversList (List L) /* Mengirimkan list baru, hasil invers dari L */ /* dengan menyalin semua elemn list. Alokasi mungkin gagal. */ /* Jika alokasi gagal, hasilnya list kosong */ /* dan semua elemen yang terlanjur di-alokasi, harus didealokasi */ { List InversedList; addressList InversP, P = First(L); int success = 1; CreateEmptyList(&InversedList); while (P != NULL && success) { InversP = Alokasi(Info(P)); if (InversP != NULL) { InsertFirst(&InversedList, InversP); P = Next(P); } else { success = 0; } } if (!success) DelAll(&InversedList); return InversedList; }
int Book::Read( const char* _fname ){ /************************************************ 定跡の読み込み ************************************************/ ifstream fin; uint64 hash; int num; int mv; int cnt; int val; int i; DelAll(); if( _fname != NULL ) fname = _fname; // ファイルのオープン fin.open( fname.c_str(), ios::in | ios::binary ); if( fin.fail() ){ cerr << "Open Error!..[" << fname.c_str() << ']' << '\n'; return 0; } cerr << "Reading the book.."; cerr.flush(); for( ; ; ){ // 定跡局面と指し手の数を読み込み fin.read( (char*)&hash, sizeof(hash) ); fin.read( (char*)&num , sizeof(num) ); if( fin.eof() ) break; else if( fin.fail() ){ cerr << "Fail! (Book)[1]" << '\n'; fin.close(); return 1; } // 指し手の読み込み for( i = 0 ; i < num ; i++ ){ fin.read( (char*)&mv , sizeof(mv) ); fin.read( (char*)&cnt, sizeof(cnt) ); fin.read( (char*)&val, sizeof(val) ); if( fin.fail() ){ cerr << "Fail! (Book)[2]" << '\n'; fin.close(); return 1; } Add( hash, mv, ADD_NEW, cnt, val ); } } fin.close(); cerr << "OK!" << '\n'; return 1; }
void PecahList (List *L1, List *L2, List L) { /* Kamus Lokal */ address P, Pt; boolean gagal; int i, N; /* Algoritma */ CreateList(L1); CreateList(L2); gagal = false; i = 1; N = NbElmt(L)/2; P = First(L); while (P != Nil)&&(!gagal) { Pt = Alokasi(Info(P)); if (i <= N) { if (Pt != Nil) { InsertLast(L1,Pt); P = Next(P); i++; } else { gagal = true; DelAll(L1); } } else { if (Pt != Nil) { InsertLast(L2,Pt); P = Next(P); i++; } else { gagal = true; DelAll(L2); } } }
void CpAlokList (List Lin, List *Lout) { /* Kamus Lokal */ address P, Pt; boolean gagal; /* Algoritma */ CreateList(Lout); gagal = false; P = First(Lin); while ((P != Nil)&&(!gagal)) { Pt = Alokasi(Info(P)); if (Pt != Nil) { InsertLast(Lout,Pt); P = Next(P); } else { gagal = true; DelAll(Lout); } } }
void Konkat (List L1, List L2, List * L3) /* I.S. L1 dan L2 sembarang */ /* F.S. L1 dan L2 tetap, L3 adalah hasil konkatenasi L1 & L2 */ /* Jika semua alokasi berhasil, maka L3 adalah hasil konkatenasi */ /* Jika ada alokasi yang gagal, semua elemen yang sudah dialokasi */ /* harus di-dealokasi dan L3=NULL */ /* Konkatenasi dua buah list : L1 & L2 menghasilkan L3 yang "baru" */ /* Elemen L3 adalah hasil alokasi elemen yang “baru”. */ /* Jika ada alokasi yang gagal, maka L3 harus bernilai NULL */ /* dan semua elemen yang pernah dialokasi didealokasi */ { addressList PKonkat, P; int success = 1; CreateEmptyList(L3); P = First(L1); while (P != NULL && success) { PKonkat = Alokasi(Info(P)); if (PKonkat != NULL) { InsertLast(L3, PKonkat); P = Next(P); } else { success = 0; } } P = First(L2); while (P != NULL && success) { PKonkat = Alokasi(Info(P)); if (PKonkat != NULL) { InsertLast(L3, PKonkat); P = Next(P); } else { success = 0; } } if (!success) DelAll(L3); }
List FCopyList (List L) { /* Kamus Lokal */ address P, Pt; List Lt; boolean gagal; /* Algoritma */ gagal = false; CreateList(&Lt); P = First(L); while ((P != Nil)&&(!gagal)) { Pt = Alokasi(Info(P)); if (Pt != Nil) { InsertLast(&Lt,Pt); P = Next(P); } else { gagal = true; DelAll(&Lt); } } return Lt; }
List FInversList (List L) { /* Kamus Lokal */ List Li; address P, Pt; boolean gagal; /* Algoritma */ gagal = false; CreateList(&Li); P = First(L); while ((P != Nil) && (!gagal)) { Pt = Alokasi(Info(P)); if (Pt != Nil) { InsertFirst(&Li, Pt); P = Next(P); } else { DelAll(&Li); gagal = true; } } return Li; }
RAnimationMgr::~RAnimationMgr() { DelAll(); }