static void WriteIndex(unsigned int *pnpos, const unsigned short int aus[64], const int fGammon, FILE * output) { unsigned int iIdx, nNonZero; /* write offset */ putc(*pnpos & 0xFF, output); putc((*pnpos >> 8) & 0xFF, output); putc((*pnpos >> 16) & 0xFF, output); putc((*pnpos >> 24) & 0xFF, output); /* write index and number of non-zero elements */ CalcIndex(aus, &iIdx, &nNonZero); putc(nNonZero & 0xFF, output); putc(iIdx & 0xFF, output); *pnpos += nNonZero; /* gammon probs: write index and number of non-zero elements */ if (fGammon) { CalcIndex(aus + 32, &iIdx, &nNonZero); putc(nNonZero & 0xFF, output); putc(iIdx & 0xFF, output); *pnpos += nNonZero; } }
//--------------------------------------------------------------------------- void __fastcall TMillersForm::DirectIndexHEditChange(TObject *Sender) { if(m_bCalcs == true) { CalcIndex(); } }
//--------------------------------------------------------------------------- void __fastcall TMillersForm::OkButtonClick(TObject *Sender) { m_bShowExeption = true; if(CalcIndex() == true) { ModalResult = mrOk; } m_bShowExeption = false; }
// 데이터지움 bool RemoveData(int index, TYPE** oldData = (TYPE**) NoNeed) { CalcIndex(index); if(Size <= index) return false; if(Unit[index]) --Count; if(oldData) *oldData = Unit[index]; else delete Unit[index]; Unit[index] = nullptr; BytesUpdated = false; return true; }
// 데이터수정 bool ModifyData(int index, TYPE* newData = (TYPE*) AutoCreate, TYPE** oldData = (TYPE**) NoNeed) { CalcIndex(index); if(Size <= index) return false; if(!Unit[index]) ++Count; if(oldData) *oldData = Unit[index]; else delete Unit[index]; Unit[index] = (newData)? newData : new TYPE; if(!newData && IsTypePointer<TYPE>()) BxCore::Util::MemSet(Unit[index], 0, sizeof(TYPE)); BytesUpdated = false; return true; }
// 리스트삭제 void Delete(int index, TYPE** oldData = (TYPE**) NoNeed) { CalcIndex(index); if(Size <= index) return; if(Unit[index]) --Count; if(oldData) *oldData = Unit[index]; else delete Unit[index]; if(index < --Size) { BxCore::Util::MemCpy(&Unit[index], &Unit[index + 1], sizeof(TYPE*) * (Size - index)); Unit[index + (Size - index)] = nullptr; } else Unit[index] = nullptr; BytesUpdated = false; }
// 데이터할당 inline TYPE& operator[](int index) { CalcIndex(index); ValidIndex(index); if(!Unit[index]) { Unit[index] = new TYPE; if(IsTypePointer<TYPE>()) BxCore::Util::MemSet(Unit[index], 0, sizeof(TYPE)); if(Size < index + 1) Size = index + 1; ++Count; BytesUpdated = false; } return *Unit[index]; }
static void WriteOS(const unsigned short int aus[32], const int fCompress, FILE * output) { unsigned int iIdx, nNonZero; unsigned int j; if (fCompress) CalcIndex(aus, &iIdx, &nNonZero); else { iIdx = 0; nNonZero = 32; } for (j = iIdx; j < iIdx + nNonZero; j++) { putc(aus[j] & 0xFF, output); putc(aus[j] >> 8, output); } }
// 리스트삽입 inline TYPE& Insert(int index, TYPE* newData = (TYPE*) AutoCreate) { CalcIndex(index); if(Size <= index) ValidIndex(index); else { ValidIndex(Size); BxCore::Util::MemCpy(&Unit[index + 1], &Unit[index], sizeof(TYPE*) * (Size - index)); } Unit[index] = (newData)? newData : new TYPE; if(!newData && IsTypePointer<TYPE>()) BxCore::Util::MemSet(Unit[index], 0, sizeof(TYPE)); if(Size < index + 1) Size = index + 1; else ++Size; ++Count; BytesUpdated = false; return *Unit[index]; }
// 데이터접근 inline TYPE* Access(int index) const { CalcIndex(index); if(Size <= index) return nullptr; return Unit[index]; }