node *buildtree(list *l) { node *child_0,*child_1; size_t count = 0; size_t count1 = 0; size_t i; node **tmp = (node **)malloc(sizeof(node*) * size); for( i = 0; i <size ; i++) tmp[i] = (node*)malloc(sizeof(node)); node *tmp1 = (node *)malloc(sizeof(node)); while(l->length){ node *p ; p = removal(l); node *q; q = removal(l); if( p && q) { (tmp[count])->freq = p->freq + q->freq; (tmp[count])->child_0 = p; (tmp[count])->child_1 = q; insert(l,tmp[count]); child_0 = p; child_1 = q; printlist(*l); count++; } else { tmp1->freq = p->freq; tmp1->child_0 = child_0; tmp1->child_1 = child_1; insert(l,tmp1); break; } } return tmp1; }
AutoPtr<StringBuilder::Removal> StringBuilder::remove(long begin, long end) { Ptr<Removal> removal(new Removal(begin, end)); int insertionIndex = _removals->getSize(); for(int i = insertionIndex - 1; i >= 0; i--) { if(begin < _removals->get(i)->getBegin()) insertionIndex = i; else break; } _removals->insert(insertionIndex, removal); return removal.retain(); }
frl::Bool concatenate( const String &fileName1, const String &fileName2, const String &fileNameDst, Bool overwrite ) { if( ! isExist( fileName1 ) || ! isExist( fileName2 ) ) return False; struct DescriptorManager { Descriptor file1; Descriptor file2; Descriptor fileDst; DescriptorManager( void ) : file1( InvalidDescriptor ), file2( InvalidDescriptor ), fileDst( InvalidDescriptor ) { } ~DescriptorManager() { close( file1 ); close( file2 ); close( fileDst ); } }; DescriptorManager dm; dm.file1 = open( fileName1, openReadOnly ); if( dm.file1 == InvalidDescriptor ) return False; dm.file2 = open( fileName2, openReadOnly ); if( dm.file2 == InvalidDescriptor ) return False; if( isExist( fileNameDst ) ) { if( overwrite ) { removal( fileNameDst ); create( fileNameDst ); dm.fileDst = open( fileNameDst, openWriteOnly ); if( dm.fileDst == InvalidDescriptor ) return False; } else { dm.fileDst = open( fileNameDst, openWriteOnly ); if( dm.fileDst == InvalidDescriptor ) return False; seekToEnd( dm.fileDst ); } } else { create( fileNameDst ); dm.fileDst = open( fileNameDst, openWriteOnly ); if( dm.fileDst == InvalidDescriptor ) return False; } UChar buffer[4096]; RWCount countWrite, countRead; while( True ) { countRead = read( dm.file1, buffer, sizeof(buffer) ); if( countRead < 0 ) return False; if( countRead == 0 ) break; countWrite = write( dm.fileDst, buffer, countRead ); if( countWrite < 0 ) return False; } while( True ) { countRead = read( dm.file2, buffer, sizeof(buffer) ); if( countRead < 0 ) return False; if( countRead == 0) break; countWrite = write( dm.fileDst, buffer, countRead ); if( countWrite < 0) return False; } return True; }
frl::Bool move( const frl::String &fileNameSrc, const frl::String &fileNameDst, frl::Bool overwrite ) { if( ! copy( fileNameSrc, fileNameDst, overwrite ) ) return frl::False; return removal( fileNameSrc ); }