コード例 #1
0
ファイル: main.cpp プロジェクト: nikaida/CStwothreefive
 void newEnd(D member) {
     if(head == nullptr)
         newHead(member);
     //Bryn refactor
     else {
         add_after(end);
         end = end->next;
     }
 }
コード例 #2
0
ファイル: IOBuf.cpp プロジェクト: JingangLi/folly
unique_ptr<IOBuf> IOBuf::clone() const {
  unique_ptr<IOBuf> newHead(cloneOne());

  for (IOBuf* current = next_; current != this; current = current->next_) {
    newHead->prependChain(current->cloneOne());
  }

  return newHead;
}
コード例 #3
0
ファイル: LayoutManager.cpp プロジェクト: baseio/VolumeRunner
 //--------------------------------------------------------------
 void LayoutManager::positionControl(Control &control, ofVec2f &parentScale, int panelDepth) {
     // calculate scale
     ofVec2f curScale = parentScale * control.scale;
     
     int indent = panelDepth * control.getConfig()->layout.indent;
     
     // update dimensions
     control.width = control.layout.width * curScale.x;// ? control.layout.width : control.getConfig()->layout.columnWidth - indent) * curScale.x;
     control.height = control.layout.height * curScale.y;// ? control.layout.height : control.getConfig()->layout.buttonHeight) * curScale.y;
     
     
     // TODO: think about scales
     switch(control.layout.positionMode) {
         case LayoutSettings::kRelative: // normal (controls are placed in a free flowing manner, like html, layout.position is offset off calculated)
         {
             ofVec2f newHead(_curHead);
             ofVec2f controlOffset((control.layout.position + control.layout.paddingPre) * curScale);
             ofVec2f controlPos(newHead + controlOffset);
             float postHeight = (control.height + control.layout.paddingPost.y + control.getConfig()->layout.padding.y) * curScale.y;
             //                        if(control.layout.newColumn || (doWrap && controlPos.y + postHeight > maxPos.y)) {
             //                            newHead.x = control.getParent()->getRight() + control.layout.paddingPost.x + control.getConfig()->layout.padding.x;
             //                            newHead.y = boundRect.y;
             //                            controlPos = newHead + controlOffset;
             //                        }
             control.setPosition(controlPos);
             control.x += indent * curScale.x;
             
             if(control.layout.doAffectFlow) {
                 _curHead = newHead;
                 
                 if(control.height != 0) _curHead.y += postHeight;   // dont do padding if height is 0
             }
             
         }
             break;
             
         case LayoutSettings::kAbsolute: // layout.position is relative to container
             control.setPosition(control.getParent() ? (control.getParent()->position + control.layout.position) : control.layout.position);
             break;
             
         case LayoutSettings::kFixed: // layout.position is relative to screen
             control.setPosition(control.layout.position);
             break;
     }
 }
コード例 #4
0
 /**
  * @param head: The first node of linked list.
  * @return: The new head of reversed linked list.
  */
 ListNode *reverse(ListNode *head) 
 {
 
     //special case head == nullptr;
     
     ListNode *current(head);
     ListNode *newHead(nullptr);
     ListNode *temp(nullptr);
     if(head!=nullptr)
     {
         while(current != nullptr)
         {
             // because we need current=current->next to move the cursor
             // we divide this step into two steps, and in between we can interpolate new heads
             temp = current->next;
             current->next = newHead;
             newHead = current;
             current = temp;
         }
         return newHead;
     }
     else
     return nullptr;
 }
コード例 #5
0
Address RecordManager::insertRecord(vector<char>& newRecord, string fileName, int recordSize){
	Address addr(fileName, 0, 0);
	Address head(fileName, 0, 0);//head
	vector<char> headRecord;

	vector<char> nextBlock;
	vector<char> nextOffset;

	int newBlock;
	int newOffset;
	int headSize;
	if (recordSize < 20)
		headSize = 20;
	else
		headSize = recordSize;

	///////文件中无记录///////
	if (bmanager.getFileBlockNumber(fileName) == 0){
		bmanager.createFile(fileName);
		
		//清空文件头
		newHead(headRecord, headSize);

		//新纪录位置(0,1)
		newBlock = 0;
		newOffset = headSize;

		//新纪录指向head(不用改了,default)
	}
	else{
		headRecord = bmanager.read(head, headSize);
		int size = getSize(headRecord);
		if (size == 0){
			//清空文件头
			newHead(headRecord, headSize);

			//新纪录位置(0,1)
			newBlock = 0;
			newOffset = headSize;

			//新纪录指向head(不用改了,default)
		}
		///////文件中有记录///////
		else{
			//新纪录位置
			setNextAddr(headRecord, nextBlock, nextOffset, headSize- 16);//第一条被删的记录
			int delBlock = char4ToInt(nextBlock);
			int delOffset = char4ToInt(nextOffset);
			
			if (delBlock == 0 && delOffset == 0){//没有被删记录
				int n;//一块中的记录数
				int block = bmanager.getFileBlockNumber(fileName) - 1;
				int offset;
				int size = getSize(headRecord);//文件中的记录数(不包括head)
				if (block == 0){
					n = (4096 - headSize) / recordSize;//第一块中的record数
					if (size == n){
						newBlock = block + 1;
						newOffset = 0;
					}
					else{//size<n
						newBlock = block;
						newOffset = headSize + (size%n)*recordSize;
					}
				}
				else{
					n = 4096 / recordSize;//其他块中最多能放的record数
					if (size == (4096 - headSize) / recordSize+block*n){
						newBlock = block + 1;
						newOffset = 0;
					}
					else{
						newBlock = block;
						newOffset = ((size - (4096 - headSize) / recordSize) % n)*recordSize;
					}
				}
			}
			else{///有被删记录
				//空位在(delBlock,delOffset)
				newBlock = delBlock;
				newOffset = delOffset;
				//修改文件头中的del指针,使它指向第二条被删记录
				addr.setAddr(fileName, delBlock, delOffset);
				vector<char> tempRecord = bmanager.read(addr, recordSize);
				setNextAddr(tempRecord, nextBlock, nextOffset, recordSize - 8);
				updateRecordPoint(headRecord, nextBlock, nextOffset, headSize - 16);
			}
			
			//newRecord指向第一条记录
			setNextAddr(headRecord, nextBlock, nextOffset, headSize - 8); 
			updateRecordPoint(newRecord, nextBlock, nextOffset, recordSize - 8);
		}
	}
	
	//插入新记录
	
	addr.setAddr(fileName, newBlock, newOffset);
	bmanager.write(addr, newRecord);//√
	//更新head
	//head指向第一条记录
	intToChar4(newBlock, nextBlock);
	intToChar4(newOffset, nextOffset);
	updateRecordPoint(headRecord, nextBlock, nextOffset, headSize - 8);
	//更新head中的size
	incSize(headRecord);
	//写回headRecord
	bmanager.write(head, headRecord);//√

	return addr;
}