asp.net open pdf in new window code behind : Reduce pdf file size control application platform web page html azure web browser ITU-TR-2006-760-part680

TheC5GenericCollectionLibrary
forC#andCLI
Version1.1.0of2008-02-10
NielsKokholm
PeterSestoft
ITUniversityTechnicalReportSeries
TR-2006-76
ISSN16006100
January2006
Reduce pdf file size - Compress reduce PDF size in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
C# Code & .NET API to Compress & Decompress PDF Document
pdf page size limit; pdf compression settings
Reduce pdf file size - VB.NET PDF File Compress Library: Compress reduce PDF size in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
VB.NET PDF Document Compression and Decompression Control SDK
advanced pdf compressor; change font size pdf fillable form
Copyright c 2006
NielsKokholm
PeterSestoft
ITUniversityofCopenhagen
Allrightsreserved.
Reproductionofallorpartofthiswork
ispermittedforeducationalorresearchuse
onconditionthatthiscopyrightnoticeis
includedinanycopy.
ISSN16006100
ISBN87-7949-114-6
Copiesmaybeobtainedbycontacting:
ITUniversityofCopenhagen
RuedLanggaardsvej7
DK-2300CopenhagenS
Denmark
Telephone: +4572185000
Telefax:
+4572185001
Web
www.itu.dk
VB.NET Image: Image Resizer Control SDK to Resize Picture & Photo
easy and developers can shrink or reduce source image NET Image SDK supported image file formats, including & profession imaging controls, PDF document, image
change font size pdf; pdf page size dimensions
C# Image: Zoom Image and Document Page in C#.NET Web Viewer
jpeg), gif, bmp (bitmap), tiff / multi-page tiff, PDF, etc so you can zoom any image or file page with Out" functionality is aimed to help users reduce the size
change font size on pdf text box; pdf compress
Preface
ThisbookdescribestheC5libraryofgenericcollectionclasses(orcontainerclasses)
fortheC#programminglanguageandothergenerics-enabledlanguagesonversion
2.0 oftheCLIplatform,as s implemented d by y Microsoft .NET and d Mono. . TheC5
libraryprovidesawiderangeofclassicdatastructures,richfunctionality,thebest
possibleasymptotictimecomplexity,documentedperformance,anda thoroughly
testedimplementation.
GoalsoftheC5library Theoverallgoalis forC5tobea genericcollectionli-
braryfortheC#programminglanguage[11,17,27]andtheCommonLanguageIn-
frastructure(CLI)[12]whosefunctionality,efciencyandqualitymeetsorexceeds
whatisavailableforsimilarcontemporaryprogrammingplatforms.Thedesignhas
beeninuencedbythecollectionlibrariesforJavaandSmalltalkandthepublished
critiqueofthese. However,itcontainsfunctionalityandaregularityofdesignthat
considerablyexceedsthatofthestandardlibrariesforthoselanguages.
Whyyetanothergenericcollectionlibrary? Therearealreadyothergeneric
collectionlibrariesforC#/CLI,includingtheSystem.Collections.Genericnamespace
oftheCLIor.NETFrameworkclasslibrary(includedwithMicrosoftVisualStudio
2005),andthePowerCollectionslibrarydevelopedbyPeterGolde[15].
TheCLIcollectionlibrary as implementedby Microsoft .NETFramework 2.0
providesalimitedchoiceofdatastructures.Ingeneral,theCLIFrameworklibrary
has a proliferation ofmethodvariantsandrather poororthogonality. . Collection
implementationssuchasarraylistsandlinkedlistshavemuchthesamefunction-
alitybutdonotimplementacommoninterface.Thisimpairsthelearnabilityofthe
library. Someofthesedesigndecisionsarewell-motivatedby y theuseoftheCLI
classlibraryincontextswherenano-secondefciencyismoreimportantthanrich
functionality, andthe need tosupport t alsorather resource-constrained d run-time
systems.
ThePowerCollectionslibrarybyPeterGoldeaugmentstheCLIversion2.0col-
lection library withvariousdata structures andalgorithms. . However, , itaccepts
thebasicdesignoftheCLIcollectionclassesandthereforesuffersfromsomeofthe
sameshortcomings,andalsodoesnotprovidemostoftheadvancedfunctionality
(updatablelistviews,snapshots,directedenumeration,priorityqueuehandles,...)
1
.NET JBIG 2 SDK | Encode & Decode JBIG 2 Images
Highly-efficient data/image compression, 2-5 times than CCITT G3, CCITT G4; Simple to reduce PDF file size using JBIG2 compression within PDF;
pdf file size limit; pdf optimized format
How to C#: Special Effects
filter will be applied to the image to reduce the noise. LinearStretch. Level the pixel between the black point and white point. Magnify. Double the image size.
pdf font size change; change font size in pdf form
2
ofC5.
Thus,inouropinion,C5providesthemostpowerful,well-structuredandscal-
ablegenericcollectionslibraryavailableforC#/CLI. However,althoughthesizeof
thecompiled
C5.dll
isonlyabout300KB,youprobablywouldnotchoosetouseit
onyour.NET2.0CompactFrameworkwristwatchjustnow.
WhatdoesthenameC5standfor? Thisisnotentirelyclear,butitmaystand
forCopenhagenComprehensiveCollectionClassesforC#,althoughthelibrarymay
beusedfromVB.NET,F#[30]andotherCLIlanguages,notjustC#.Ithasnothing
todowithaMicrosoftDynamicsproductthatusedtobecalledConcordeC5/Damgaard
C5/NavisionC5,norareal-timeoperatingsystemcalledC5(orChorus),northeC5
Corporation(systemvisualization),noranEclipseplug-incalledC5,norwithcars
suchasCitroºnC5orCorvetteC5orCliveSinclair’sill-fatedC5conceptvehicle.
The namemaybeinspiredbytheversatileC4 4 plastic explosiveknown frome.g.
JamesBondmovies.Alltrademarksbelongtotheirowners.
Stateofcompletion Atthetimeofwriting,librarydesignandimplementation
arecomplete,andextensiveunittestshavebeenwrittenandappliedsystematically.
MostofthelibraryAPIdocumentationisinplacebutrequiresproof-reading.
TheC5implementationusesmostofthefeaturesofC#2.0: generictypesand
methods,typeparameterconstraints,iteratorblocks,anonymousmethods,andnul-
lablevaluetypes.Itwasdevelopedusingalpha,betaandnalreleasesofMicrosoft
.NET2.0,butusesonlystandardlibrariesandCLIfeatures,andthelibrarybuilds
andpassestheunitstestontheMono1.1.15implementationonCLI.
Thisbook ThepresentbookisaguidetoeffectiveuseofC5.Itgivesanoverview
ofthelibraryanditsdesignrationale,describestheentireAPIindetail,including
thetimecomplexity ofalloperations, presentsmorethanahundredsmallusage
patterns(idioms),andseverallarger,completeexamples. Finallyitexplainssome
ofthetechniquesusedintheimplementation.
C5availabilityandlicense ThecompleteC5libraryimplementation,including
documentation, isavailableinbinary andsourceformfromtheITUniversityof
Copenhagen:
http://www.itu.dk/research/c5/
VB.NET Image: Compress & Decompress Document Image; RasterEdge .
reduce Word document size according to specific requirements in VB.NET; Scanned PDF encoding and decoding: compress a large size PDF document file for easier
change font size in pdf file; best online pdf compressor
VB.NET Image: How to Zoom Web Images in Visual Basic .NET Imaging
out" functionality allows VB developers to easily reduce the size gif, tiff and bmp) or document (PDF, multi-page you want to view your document file or image
apple compress pdf; pdf optimized format
3
ThelibraryiscopyrightedbytheauthorsanddistributedunderaBSD-stylelicense:
Copyright c 2003-2008NielsKokholmandPeterSestoft
Permissionisherebygranted,freeofcharge,toanypersonobtaininga
copyofthissoftwareandassociateddocumentationles(theSoftware),
todealintheSoftwarewithoutrestriction,includingwithoutlimitation
therights touse, copy, modify, merge, publish, distribute, sublicense,
and/orsell copiesoftheSoftware, andtopermit persons towhomthe
Softwareisfurnishedtodoso,subjecttothefollowingconditions:
Theabovecopyrightnoticeandthispermissionnoticeshallbeincluded
inallcopiesorsubstantialportionsoftheSoftware.
THESOFTWAREISPROVIDED
ASIS
,
WITHOUTWARRANTYOFANYKIND
,
EXPRESSOR IMPLIED
,
INCLUDING BUT NOTLIMITED TO THEWARRAN
-
TIESOFMERCHANTABILITY
,
FITNESSFORAPARTICULARPURPOSEAND
NONINFRINGEMENT
.
INNOEVENTSHALLTHEAUTHORSORCOPYRIGHT
HOLDERSBELIABLEFOR ANY CLAIM
,
DAMAGES OR OTHER LIABILITY
,
WHETHERINANACTIONOFCONTRACT
,
TORTOROTHERWISE
,
ARISING
FROM
,
OUT OF OR R IN CONNECTION WITH THE SOFTWARE OR THE USE
OROTHERDEALINGSINTHESOFTWARE
.
Soyoucanuseandmodifyitforanypurpose,includingcommerce,withoutalicense
fee,butthecopyrightnoticemustremaininplace,andyoucannotblameusorour
employersforanyconsequencesofusingorabusingthelibrary.
Theauthors NielsKokholmholdsanMScandaPhDinmathematicsandanMSc
ininformationtechnologyandsoftwaredevelopment. Hemakes s softwareforthe
insuranceindustryatEdlundA/SinCopenhagen. PeterSestoftholdsanMScand
aPhDincomputerscience,isamemberoftheEcmaC#andCLIstandardization
committees, andtheauthor ofC# Precisely[27]andJavaPrecisely (MITPress).
HeisprofessorattheITUniversityofCopenhagenandtheRoyalVeterinaryand
AgriculturalUniversity(KVL),Denmark.
Acknowledgements AvisittoMicrosoftResearch,CambridgeUK,inlate2001
permittedPetertowritearstrudimentarygenericcollectionlibraryforC#,which
wasconsiderablyredesigned,extendedandimprovedbyNielsduring20032004.
WethankMicrosoftResearchUniversityRelationsforagrantthatenabledus
tocomplete,improveanddocumenttheimplementationin20042005.
ThankstoDanielMortonandJonJaggerforcommentsonthedesignandimple-
mentationofC5,andtotheITUniversityofCopenhagenandtheRoyalVeterinary
andAgriculturalUniversity(KVL),Denmark,fortheirsupport.
View Images & Documents in Web Image Viewer | Online Tutorials
document or image file, like Word, PDF or TIFF View Image File via ZoomIn or ZoomOut Function. This ASP to help developers to decrease and reduce current zooming
change font size pdf comment box; adjust size of pdf in preview
VB.NET Image: How to Process & Edit Image Using VB.NET Image
Compact rich image editing functions into several small-size libraries that are VB.NET programmers the API to scale source image file (reduce or enlarge image
pdf file size; pdf page size limit
4
Notationalconventions
Symbol
Use
Type
Section
act
actiondelegate
Act<A1>
3.6.1
arr
array
T[]
cmp
comparer
SCG.IComparer<T>
2.6
cq
circularqueue
IQueue<T>
6.1
csn
comparisondelegate
System.Comparison<T>
2.6
eqc
equalitycomparer
SCG.IEqualityComparer<T>
2.3
f
functiondelegate
Fun<A1,R>
3.6.2
h
priorityqueuehandle
IPriorityQueueHandle<T>
1.4.12
i
,
j
offsetorindexintocollection
int
k
keyindictionary
K
ks
sequenceofkeysindictionary SCG.IEnumerable<K>
kv
(key,value)pair,entry
KeyValuePair<K,V>
kvs
sequenceof(key,value)pairs
3.5
m
,
n
,
N
count,length,orsize
int
obj
anyobject
System.Object
p
predicatedelegate
Fun<T,
bool
>
3.6.2
rnd
randomnumbergenerator
System.Random
3.8
T
,
U
,
K
,
V
generictypeparameter
v
valueofkeyindictionary
V
w
,
u
view
IList<T>
8.1
x
,
y
collectionitem
xs
,
ys
itemsequence,enumerable
SCG.IEnumerable<T>
TheabbreviationSCGstandsforSystem.Collections.Generic,thatis,theCLIclass
librarynamespaceforgenericcollectionclasses.Likewise,SCstandsforthename-
spaceSystem.Collectionsofnon-genericcollectionclasses. Thesenamespacesare
standardizedaspartofEcmaCLI[12].
Commonexampledeclarationheader
Allprogramfragmentsandcodeexamplesshowninthisbookaresupposedtobe
precededbythesedeclarations:
using System;
using C5;
using SCG = = System.Collections.Generic;
Contents
1 Collectionconcepts
9
1.1
Gettingstarted . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
1.2
DesigngoalsofC5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.3
Overviewofcollectionconcepts. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.4
Thecollectioninterfaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.5
Dictionaryinterfaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.6
Comparisonwithothercollectionlibraries . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2 Equalityandcomparison
25
2.1
Naturalequality . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.2
Equatabletypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.3
Equalitycomparers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.4
Creatingequalitycomparers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.5
Comparabletypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.6
Comparers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.7
Creatingcomparers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3 Auxiliarytypes
35
3.1
EnumtypeEventTypeEnum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.2
EnumtypeEnumerationDirection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.3
EnumtypeSpeed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.4
RecordstructtypesRec<T1,T2>,... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.5
StructtypeKeyValuePair<K,V> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.6
Delegatetypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.7
Exceptiontypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.8
Pseudo-randomnumbergenerators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.9
TheIShowableinterface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4 Collectioninterfacedetails
43
4.1
InterfaceICollection<T>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.2
InterfaceICollectionValue<T> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.3
InterfaceIDirectedCollectionValue<T> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
4.4
InterfaceIDirectedEnumerable<T> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
5
Contents
4.5
InterfaceIExtensible<T> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.6
InterfaceIIndexed<T>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.7
InterfaceIIndexedSorted<T> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
4.8
InterfaceIList<T> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
4.9
InterfaceIPersistentSorted<T> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
4.10 InterfaceIPriorityQueue<T> > . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
4.11 InterfaceIQueue<T>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
4.12 InterfaceISequenced<T> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
4.13 InterfaceISorted<T>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
4.14 InterfaceIStack<T> > . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
5 Dictionaryinterfacedetails
97
5.1
InterfaceIDictionary<K,V> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
5.2
InterfaceISortedDictionary<K,V> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
6 Collectionimplementations
109
6.1
Circularqueues. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
6.2
Arraylists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
6.3
Linkedlists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
6.4
Hashedarraylists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
6.5
Hashedlinkedlists. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
6.6
Wrappedarrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
6.7
Sortedarrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
6.8
Tree-basedsets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
6.9
Tree-basedbags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
6.10 Hashsets s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
6.11 Hashbags s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
6.12 Intervalheapsorpriorityqueues s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
7 Dictionaryimplementations
119
7.1
Hash-baseddictionaries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
7.2
Tree-baseddictionaries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
8 Advancedfunctionality
123
8.1
Listviews . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
8.2
Read-onlywrappers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
8.3
Collectionsofcollections. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
8.4
Genericbulkmethods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
8.5
Snapshotsoftree-basedcollections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
8.6
Sortingarrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
8.7
Formattingofcollectionsanddictionaries . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
8.8
Events:Observingchangestoacollection . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
8.9
Cloningofcollections. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
8.10 Serialization n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
8.11 Threadsafetyandlocking. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Contents 7
9 ProgrammingpatternsinC5
147
9.1
Patternsforread-onlyaccess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
9.2
Patternsusingzero-itemviews. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
9.3
Patternsusingone-itemviews . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
9.4
Patternsusingviews . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
9.5
Patternsforitemsearchinalist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
9.6
Itemnotfoundinindexedcollection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
9.7
Patternsforremovingitemsfromalist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
9.8
Patternsforpredecessorandsuccessoritems. . . . . . . . . . . . . . . . . . . . . . . . 158
9.9
Patternsforsubrangeiteration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
9.10 Patternsforindexediteration n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
9.11 Patternsforenumeratingatreesnapshot t . . . . . . . . . . . . . . . . . . . . . . . . . . 165
9.12 Patternsforsegmentreversalandswapping g . . . . . . . . . . . . . . . . . . . . . . . . . 165
9.13 Patternformakingastreamofitemlumps. . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
9.14 Patternsforarbitraryandrandomitems s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
9.15 Patternsforsetoperationsoncollections s . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
9.16 Patternsforremovingduplicates. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
9.17 Patternsforcollectionsofcollections. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
9.18 Patternsforcreatingarandomselection . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
9.19 Patternsforsorting g . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
9.20 Patternsusingpriorityqueuehandles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
9.21 Patternsforndingquantiles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
9.22 Patternsforstacksandqueues s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
9.23 Patternsforcollectionchangeevents s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
9.24 Patternsforcomparers s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
10Anti-patternsinC5
189
10.1 Efciencyanti-patterns s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
10.2 Correctnessanti-patterns s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
11Applicationexamples
197
11.1 Recognizingkeywords s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
11.2 Buildingaconcordanceforatextle e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
11.3 Convexhullintheplane. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
11.4 Findinganagramclasses s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
11.5 Finiteautomata a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
11.6 Topologicalsort t . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
11.7 Copyingagraph h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
11.8 Generalgraphalgorithms s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
11.9 Pointlocationintheplane e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
11.10Abatchjobqueue. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
11.11Afunctionalhash-basedsetimplementation . . . . . . . . . . . . . . . . . . . . . . . . . 222
11.12Implementingmultidictionaries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
11.13Commonwordsinatextle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
Contents
12Performancedetails
233
12.1 Performanceofcollectionimplementations s . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
12.2 Performanceofdictionaryimplementations s . . . . . . . . . . . . . . . . . . . . . . . . . . 238
12.3 Performanceofquicksortandmergesort t . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
12.4 Performanceimpactoflistviews s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
12.5 Performanceimpactofeventhandlers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
12.6 Performanceimpactoftreesnapshots s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
13Implementationdetails
241
13.1 Organizationofsourceles s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
13.2 Implementationofquicksortforarraylists s . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
13.3 Implementationofmergesortforlinkedlists s . . . . . . . . . . . . . . . . . . . . . . . . 242
13.4 Implementationofhash-basedcollections. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
13.5 Implementationofarraylists. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
13.6 Implementationofhashedarraylists s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
13.7 Implementationoflinkedlists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
13.8 Implementationofhashedlinkedlists. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
13.9 Implementationoflistviews . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
13.10Implementationoftree-basedcollections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
13.11Implementationofpriorityqueuehandles . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
13.12Implementationofeventsandhandlers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
14Creatingnewclasses
251
14.1 Implementingderivedcollectionclasses. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
Bibliography
254
Index
257
Documents you may be interested
Documents you may be interested