package com.jm.gen; import java.util.ArrayList; import java.util.List; public class MainGen { // エラーコード public static final int GEN_ERR_UNKNOWN = -1; public static final int GEN_ERR_MALLOC = -2; public static final int GEN_ERR_BUFFSIZE = -3; public static final int GEN_ERR_CANCELED = -4; public static final int GEN_LENGTH_MIN = 1; public static final int GEN_LENGTH_MAX = 255; // サイトスワップの種類 public static final int SPT_NORMAL = 0x00; public static final int SPT_SYNCHRO = 0x01; public static final int SPT_ALL = (SPT_NORMAL | SPT_SYNCHRO); public static void main(String[] args){ MainGen m = new MainGen(); List list = m.generateSiteswap(3, ""); } public List generateSiteswap(int balls, String period){ GenProc gs = new GenProc(); List list = new ArrayList(); char[] p = StdLib.stoc(period); int count = GetSiteswap(gs, list, balls, p); return list; } private int GetSiteswap(GenProc pgs, List list, int balls, char[] sLength){ int[] pdwLen; //char[] sLength = new char[StdLib.BUFFLEN]; char[] sSeed = new char[StdLib.BUFFLEN]; //char[] sClass = new char[StdLib.BUFFLEN]; char[] sBuff = new char[StdLib.BUFFLEN]; int i; int j; int iMax; int iSize; int iCount; int iLen; int iSeed; int iStart; int iEnd; // TODO int n = 0; //sLength[n++] = '3'; //sLength[n++] = '\0'; //int balls = 3; int m = 0; //sSeed[m++] = '3'; sSeed[m++] = '\0'; iSeed = MainJudge.GetSiteswapCycle(sSeed); // TODO // 最大出力数が 0 なら int の最大値に // 10000; iMax = 10000; // 周期を表す整数配列の作成 iLen = StringEx.TextToIntArray(sLength, null, 0, true); if(iLen < 0) return GEN_ERR_UNKNOWN; pdwLen = new int[iLen]; //if(!pdwLen) // return GEN_ERR_MALLOC; StringEx.TextToIntArray(sLength, pdwLen, iLen, true); // サイトスワップ生成 iCount = 0; //for(i = 0; i < iLen && iCount < iMax && !(*pbStop); i++){ for(i = 0; i < iLen && iCount < iMax; i++){ iStart = (int)StdLib.LOWORD(pdwLen[i]); iEnd = (int)StdLib.HIWORD(pdwLen[i]); // 周期の妥当性チェック if(iStart < GEN_LENGTH_MIN) iStart = GEN_LENGTH_MIN; if(iEnd > GEN_LENGTH_MAX) iEnd = GEN_LENGTH_MAX; if(iEnd < iStart) iEnd = iStart; if(iStart > GEN_LENGTH_MAX || iEnd < GEN_LENGTH_MIN) break; //for(j = iStart; j <= iEnd && iCount < iMax && !(*pbStop); j++){ for(j = iStart; j <= iEnd && iCount < iMax; j++){ //pgs->Length = j; //pgs->Cancel = pbStop; pgs.init(balls, j); if(j == iSeed) StdLib.strcpy(sBuff, sSeed); else sBuff[0] = '\0'; if(j < iSeed) continue; //iSize = InitGenerator(pgs, sBuff); iSize = pgs.InitGenerator(sBuff); // パターンを1つずつ生成 //while(iSize > 0 && iCount < iMax && !(*pbStop)){ while(iSize > 0 && iCount < iMax){ if(iSize >= StdLib.BUFFLEN){ //free(pdwLen); pdwLen = null; return GEN_ERR_BUFFSIZE; } // リストボックスに格納 //if(SendMessage(hList, LB_ADDSTRING, 0, (LPARAM)sBuff) == LB_ERRSPACE || SendMessage(hName, LB_ADDSTRING, 0, (LPARAM)sBuff) == LB_ERRSPACE){ // free(pdwLen); // return GEN_ERR_MALLOC; //} String item = StdLib.ctos(sBuff); list.add(item); iSize = pgs.EnumSiteswap(sBuff); iCount++; //SendMessage(ghWndMain, WM_USER_GEN, SSN_ADDSITESWAP, (LPARAM)iCount); } } } return iCount; } }