PNG  IHDRX cHRMz&u0`:pQ<bKGD pHYsodtIME MeqIDATxw]Wug^Qd˶ 6`!N:!@xI~)%7%@Bh&`lnjVF29gΨ4E$|>cɚ{gk= %,a KX%,a KX%,a KX%,a KX%,a KX%,a KX%, b` ǟzeאfp]<!SJmɤY޲ڿ,%c ~ع9VH.!Ͳz&QynֺTkRR.BLHi٪:l;@(!MԴ=žI,:o&N'Kù\vRmJ雵֫AWic H@" !: Cé||]k-Ha oݜ:y F())u]aG7*JV@J415p=sZH!=!DRʯvɱh~V\}v/GKY$n]"X"}t@ xS76^[bw4dsce)2dU0 CkMa-U5tvLƀ~mlMwfGE/-]7XAƟ`׮g ewxwC4\[~7@O-Q( a*XGƒ{ ՟}$_y3tĐƤatgvێi|K=uVyrŲlLӪuܿzwk$m87k( `múcE)"@rK( z4$D; 2kW=Xb$V[Ru819קR~qloѱDyįݎ*mxw]y5e4K@ЃI0A D@"BDk_)N\8͜9dz"fK0zɿvM /.:2O{ Nb=M=7>??Zuo32 DLD@D| &+֎C #B8ַ`bOb $D#ͮҪtx]%`ES`Ru[=¾!@Od37LJ0!OIR4m]GZRJu$‡c=%~s@6SKy?CeIh:[vR@Lh | (BhAMy=݃  G"'wzn޺~8ԽSh ~T*A:xR[ܹ?X[uKL_=fDȊ؂p0}7=D$Ekq!/t.*2ʼnDbŞ}DijYaȲ(""6HA;:LzxQ‘(SQQ}*PL*fc\s `/d'QXW, e`#kPGZuŞuO{{wm[&NBTiiI0bukcA9<4@SӊH*؎4U/'2U5.(9JuDfrޱtycU%j(:RUbArLֺN)udA':uGQN"-"Is.*+k@ `Ojs@yU/ H:l;@yyTn}_yw!VkRJ4P)~y#)r,D =ě"Q]ci'%HI4ZL0"MJy 8A{ aN<8D"1#IJi >XjX֔#@>-{vN!8tRݻ^)N_╗FJEk]CT՟ YP:_|H1@ CBk]yKYp|og?*dGvzنzӴzjֺNkC~AbZƷ`.H)=!QͷVTT(| u78y֮}|[8-Vjp%2JPk[}ԉaH8Wpqhwr:vWª<}l77_~{s۴V+RCģ%WRZ\AqHifɤL36: #F:p]Bq/z{0CU6ݳEv_^k7'>sq*+kH%a`0ԣisqにtү04gVgW΂iJiS'3w.w}l6MC2uԯ|>JF5`fV5m`Y**Db1FKNttu]4ccsQNnex/87+}xaUW9y>ͯ骵G{䩓Գ3+vU}~jJ.NFRD7<aJDB1#ҳgSb,+CS?/ VG J?|?,2#M9}B)MiE+G`-wo߫V`fio(}S^4e~V4bHOYb"b#E)dda:'?}׮4繏`{7Z"uny-?ǹ;0MKx{:_pÚmFמ:F " .LFQLG)Q8qN q¯¯3wOvxDb\. BKD9_NN &L:4D{mm o^tֽ:q!ƥ}K+<"m78N< ywsard5+вz~mnG)=}lYݧNj'QJS{S :UYS-952?&O-:W}(!6Mk4+>A>j+i|<<|;ر^߉=HE|V#F)Emm#}/"y GII웻Jі94+v뾧xu~5C95~ūH>c@덉pʃ1/4-A2G%7>m;–Y,cyyaln" ?ƻ!ʪ<{~h~i y.zZB̃/,雋SiC/JFMmBH&&FAbϓO^tubbb_hZ{_QZ-sύodFgO(6]TJA˯#`۶ɟ( %$&+V'~hiYy>922 Wp74Zkq+Ovn錄c>8~GqܲcWꂎz@"1A.}T)uiW4="jJ2W7mU/N0gcqܗOO}?9/wìXžΏ0 >֩(V^Rh32!Hj5`;O28؇2#ݕf3 ?sJd8NJ@7O0 b־?lldщ̡&|9C.8RTWwxWy46ah嘦mh٤&l zCy!PY?: CJyв]dm4ǜҐR޻RլhX{FƯanшQI@x' ao(kUUuxW_Ñ줮[w8 FRJ(8˼)_mQ _!RJhm=!cVmm ?sFOnll6Qk}alY}; "baӌ~M0w,Ggw2W:G/k2%R,_=u`WU R.9T"v,<\Ik޽/2110Ӿxc0gyC&Ny޽JҢrV6N ``یeA16"J³+Rj*;BϜkZPJaÍ<Jyw:NP8/D$ 011z֊Ⱳ3ι֘k1V_"h!JPIΣ'ɜ* aEAd:ݺ>y<}Lp&PlRfTb1]o .2EW\ͮ]38؋rTJsǏP@芎sF\> P^+dYJLbJ C-xϐn> ι$nj,;Ǖa FU *择|h ~izť3ᤓ`K'-f tL7JK+vf2)V'-sFuB4i+m+@My=O҈0"|Yxoj,3]:cо3 $#uŘ%Y"y죯LebqtҢVzq¼X)~>4L׶m~[1_k?kxֺQ`\ |ٛY4Ѯr!)N9{56(iNq}O()Em]=F&u?$HypWUeB\k]JɩSع9 Zqg4ZĊo oMcjZBU]B\TUd34ݝ~:7ڶSUsB0Z3srx 7`:5xcx !qZA!;%͚7&P H<WL!džOb5kF)xor^aujƍ7 Ǡ8/p^(L>ὴ-B,{ۇWzֺ^k]3\EE@7>lYBȝR.oHnXO/}sB|.i@ɥDB4tcm,@ӣgdtJ!lH$_vN166L__'Z)y&kH;:,Y7=J 9cG) V\hjiE;gya~%ks_nC~Er er)muuMg2;֫R)Md) ,¶ 2-wr#F7<-BBn~_(o=KO㭇[Xv eN_SMgSҐ BS헃D%g_N:/pe -wkG*9yYSZS.9cREL !k}<4_Xs#FmҶ:7R$i,fi!~' # !6/S6y@kZkZcX)%5V4P]VGYq%H1!;e1MV<!ϐHO021Dp= HMs~~a)ަu7G^];git!Frl]H/L$=AeUvZE4P\.,xi {-~p?2b#amXAHq)MWǾI_r`S Hz&|{ +ʖ_= (YS(_g0a03M`I&'9vl?MM+m~}*xT۲(fY*V4x@29s{DaY"toGNTO+xCAO~4Ϳ;p`Ѫ:>Ҵ7K 3}+0 387x\)a"/E>qpWB=1 ¨"MP(\xp߫́A3+J] n[ʼnӼaTbZUWb={~2ooKױӰp(CS\S筐R*JغV&&"FA}J>G֐p1ٸbk7 ŘH$JoN <8s^yk_[;gy-;߉DV{c B yce% aJhDȶ 2IdйIB/^n0tNtџdcKj4϶v~- CBcgqx9= PJ) dMsjpYB] GD4RDWX +h{y`,3ꊕ$`zj*N^TP4L:Iz9~6s) Ga:?y*J~?OrMwP\](21sZUD ?ܟQ5Q%ggW6QdO+\@ ̪X'GxN @'4=ˋ+*VwN ne_|(/BDfj5(Dq<*tNt1х!MV.C0 32b#?n0pzj#!38}޴o1KovCJ`8ŗ_"]] rDUy޲@ Ȗ-;xџ'^Y`zEd?0„ DAL18IS]VGq\4o !swV7ˣι%4FѮ~}6)OgS[~Q vcYbL!wG3 7띸*E Pql8=jT\꘿I(z<[6OrR8ºC~ډ]=rNl[g|v TMTղb-o}OrP^Q]<98S¤!k)G(Vkwyqyr޽Nv`N/e p/~NAOk \I:G6]4+K;j$R:Mi #*[AȚT,ʰ,;N{HZTGMoּy) ]%dHء9Պ䠬|<45,\=[bƟ8QXeB3- &dҩ^{>/86bXmZ]]yޚN[(WAHL$YAgDKp=5GHjU&99v簪C0vygln*P)9^͞}lMuiH!̍#DoRBn9l@ xA/_v=ȺT{7Yt2N"4!YN`ae >Q<XMydEB`VU}u]嫇.%e^ánE87Mu\t`cP=AD/G)sI"@MP;)]%fH9'FNsj1pVhY&9=0pfuJ&gޤx+k:!r˭wkl03׼Ku C &ѓYt{.O.zҏ z}/tf_wEp2gvX)GN#I ݭ߽v/ .& и(ZF{e"=V!{zW`, ]+LGz"(UJp|j( #V4, 8B 0 9OkRrlɱl94)'VH9=9W|>PS['G(*I1==C<5"Pg+x'K5EMd؞Af8lG ?D FtoB[je?{k3zQ vZ;%Ɠ,]E>KZ+T/ EJxOZ1i #T<@ I}q9/t'zi(EMqw`mYkU6;[t4DPeckeM;H}_g pMww}k6#H㶏+b8雡Sxp)&C $@'b,fPߑt$RbJ'vznuS ~8='72_`{q纶|Q)Xk}cPz9p7O:'|G~8wx(a 0QCko|0ASD>Ip=4Q, d|F8RcU"/KM opKle M3#i0c%<7׿p&pZq[TR"BpqauIp$ 8~Ĩ!8Սx\ւdT>>Z40ks7 z2IQ}ItԀ<-%S⍤};zIb$I 5K}Q͙D8UguWE$Jh )cu4N tZl+[]M4k8֦Zeq֮M7uIqG 1==tLtR,ƜSrHYt&QP윯Lg' I,3@P'}'R˪e/%-Auv·ñ\> vDJzlӾNv5:|K/Jb6KI9)Zh*ZAi`?S {aiVDԲuy5W7pWeQJk֤#5&V<̺@/GH?^τZL|IJNvI:'P=Ϛt"¨=cud S Q.Ki0 !cJy;LJR;G{BJy޺[^8fK6)=yʊ+(k|&xQ2`L?Ȓ2@Mf 0C`6-%pKpm')c$׻K5[J*U[/#hH!6acB JA _|uMvDyk y)6OPYjœ50VT K}cǻP[ $:]4MEA.y)|B)cf-A?(e|lɉ#P9V)[9t.EiQPDѠ3ϴ;E:+Օ t ȥ~|_N2,ZJLt4! %ա]u {+=p.GhNcŞQI?Nd'yeh n7zi1DB)1S | S#ًZs2|Ɛy$F SxeX{7Vl.Src3E℃Q>b6G ўYCmtկ~=K0f(=LrAS GN'ɹ9<\!a`)֕y[uՍ[09` 9 +57ts6}b4{oqd+J5fa/,97J#6yν99mRWxJyѡyu_TJc`~W>l^q#Ts#2"nD1%fS)FU w{ܯ R{ ˎ󅃏џDsZSQS;LV;7 Od1&1n$ N /.q3~eNɪ]E#oM~}v֯FڦwyZ=<<>Xo稯lfMFV6p02|*=tV!c~]fa5Y^Q_WN|Vs 0ҘދU97OI'N2'8N֭fgg-}V%y]U4 峧p*91#9U kCac_AFңĪy뚇Y_AiuYyTTYЗ-(!JFLt›17uTozc. S;7A&&<ԋ5y;Ro+:' *eYJkWR[@F %SHWP 72k4 qLd'J "zB6{AC0ƁA6U.'F3:Ȅ(9ΜL;D]m8ڥ9}dU "v!;*13Rg^fJyShyy5auA?ɩGHRjo^]׽S)Fm\toy 4WQS@mE#%5ʈfFYDX ~D5Ϡ9tE9So_aU4?Ѽm%&c{n>.KW1Tlb}:j uGi(JgcYj0qn+>) %\!4{LaJso d||u//P_y7iRJ߬nHOy) l+@$($VFIQ9%EeKʈU. ia&FY̒mZ=)+qqoQn >L!qCiDB;Y<%} OgBxB!ØuG)WG9y(Ą{_yesuZmZZey'Wg#C~1Cev@0D $a@˲(.._GimA:uyw֬%;@!JkQVM_Ow:P.s\)ot- ˹"`B,e CRtaEUP<0'}r3[>?G8xU~Nqu;Wm8\RIkբ^5@k+5(By'L&'gBJ3ݶ!/㮻w҅ yqPWUg<e"Qy*167΃sJ\oz]T*UQ<\FԎ`HaNmڜ6DysCask8wP8y9``GJ9lF\G g's Nn͵MLN֪u$| /|7=]O)6s !ĴAKh]q_ap $HH'\1jB^s\|- W1:=6lJBqjY^LsPk""`]w)󭃈,(HC ?䔨Y$Sʣ{4Z+0NvQkhol6C.婧/u]FwiVjZka&%6\F*Ny#8O,22+|Db~d ~Çwc N:FuuCe&oZ(l;@ee-+Wn`44AMK➝2BRՈt7g*1gph9N) *"TF*R(#'88pm=}X]u[i7bEc|\~EMn}P瘊J)K.0i1M6=7'_\kaZ(Th{K*GJyytw"IO-PWJk)..axӝ47"89Cc7ĐBiZx 7m!fy|ϿF9CbȩV 9V-՛^pV̌ɄS#Bv4-@]Vxt-Z, &ֺ*diؠ2^VXbs֔Ìl.jQ]Y[47gj=幽ex)A0ip׳ W2[ᎇhuE^~q흙L} #-b۸oFJ_QP3r6jr+"nfzRJTUqoaۍ /$d8Mx'ݓ= OՃ| )$2mcM*cЙj}f };n YG w0Ia!1Q.oYfr]DyISaP}"dIӗթO67jqR ҊƐƈaɤGG|h;t]䗖oSv|iZqX)oalv;۩meEJ\!8=$4QU4Xo&VEĊ YS^E#d,yX_> ۘ-e\ "Wa6uLĜZi`aD9.% w~mB(02G[6y.773a7 /=o7D)$Z 66 $bY^\CuP. (x'"J60׿Y:Oi;F{w佩b+\Yi`TDWa~|VH)8q/=9!g߆2Y)?ND)%?Ǐ`k/sn:;O299yB=a[Ng 3˲N}vLNy;*?x?~L&=xyӴ~}q{qE*IQ^^ͧvü{Huu=R|>JyUlZV, B~/YF!Y\u_ݼF{_C)LD]m {H 0ihhadd nUkf3oٺCvE\)QJi+֥@tDJkB$1!Đr0XQ|q?d2) Ӣ_}qv-< FŊ߫%roppVBwü~JidY4:}L6M7f٬F "?71<2#?Jyy4뷢<_a7_=Q E=S1И/9{+93֮E{ǂw{))?maÆm(uLE#lïZ  ~d];+]h j?!|$F}*"4(v'8s<ŏUkm7^7no1w2ؗ}TrͿEk>p'8OB7d7R(A 9.*Mi^ͳ; eeUwS+C)uO@ =Sy]` }l8^ZzRXj[^iUɺ$tj))<sbDJfg=Pk_{xaKo1:-uyG0M ԃ\0Lvuy'ȱc2Ji AdyVgVh!{]/&}}ċJ#%d !+87<;qN޼Nفl|1N:8ya  8}k¾+-$4FiZYÔXk*I&'@iI99)HSh4+2G:tGhS^繿 Kتm0 вDk}֚+QT4;sC}rՅE,8CX-e~>G&'9xpW,%Fh,Ry56Y–hW-(v_,? ; qrBk4-V7HQ;ˇ^Gv1JVV%,ik;D_W!))+BoS4QsTM;gt+ndS-~:11Sgv!0qRVh!"Ȋ(̦Yl.]PQWgٳE'`%W1{ndΗBk|Ž7ʒR~,lnoa&:ü$ 3<a[CBݮwt"o\ePJ=Hz"_c^Z.#ˆ*x z̝grY]tdkP*:97YľXyBkD4N.C_[;F9`8& !AMO c `@BA& Ost\-\NX+Xp < !bj3C&QL+*&kAQ=04}cC!9~820G'PC9xa!w&bo_1 Sw"ܱ V )Yl3+ס2KoXOx]"`^WOy :3GO0g;%Yv㐫(R/r (s } u B &FeYZh0y> =2<Ϟc/ -u= c&׭,.0"g"7 6T!vl#sc>{u/Oh Bᾈ)۴74]x7 gMӒ"d]U)}" v4co[ ɡs 5Gg=XR14?5A}D "b{0$L .\4y{_fe:kVS\\O]c^W52LSBDM! C3Dhr̦RtArx4&agaN3Cf<Ԉp4~ B'"1@.b_/xQ} _߃҉/gٓ2Qkqp0շpZ2fԫYz< 4L.Cyυι1t@鎫Fe sYfsF}^ V}N<_`p)alٶ "(XEAVZ<)2},:Ir*#m_YӼ R%a||EƼIJ,,+f"96r/}0jE/)s)cjW#w'Sʯ5<66lj$a~3Kʛy 2:cZ:Yh))+a߭K::N,Q F'qB]={.]h85C9cr=}*rk?vwV렵ٸW Rs%}rNAkDv|uFLBkWY YkX מ|)1!$#3%y?pF<@<Rr0}: }\J [5FRxY<9"SQdE(Q*Qʻ)q1E0B_O24[U'],lOb ]~WjHޏTQ5Syu wq)xnw8~)c 쫬gٲߠ H% k5dƝk> kEj,0% b"vi2Wس_CuK)K{n|>t{P1򨾜j>'kEkƗBg*H%'_aY6Bn!TL&ɌOb{c`'d^{t\i^[uɐ[}q0lM˕G:‚4kb祔c^:?bpg… +37stH:0}en6x˟%/<]BL&* 5&fK9Mq)/iyqtA%kUe[ڛKN]Ě^,"`/ s[EQQm?|XJ߅92m]G.E΃ח U*Cn.j_)Tѧj̿30ڇ!A0=͜ar I3$C^-9#|pk!)?7.x9 @OO;WƝZBFU keZ75F6Tc6"ZȚs2y/1 ʵ:u4xa`C>6Rb/Yм)^=+~uRd`/|_8xbB0?Ft||Z\##|K 0>>zxv8۴吅q 8ĥ)"6>~\8:qM}#͚'ĉ#p\׶ l#bA?)|g g9|8jP(cr,BwV (WliVxxᡁ@0Okn;ɥh$_ckCgriv}>=wGzβ KkBɛ[˪ !J)h&k2%07δt}!d<9;I&0wV/ v 0<H}L&8ob%Hi|޶o&h1L|u֦y~󛱢8fٲUsւ)0oiFx2}X[zVYr_;N(w]_4B@OanC?gĦx>мgx>ΛToZoOMp>40>V Oy V9iq!4 LN,ˢu{jsz]|"R޻&'ƚ{53ўFu(<٪9:΋]B;)B>1::8;~)Yt|0(pw2N%&X,URBK)3\zz&}ax4;ǟ(tLNg{N|Ǽ\G#C9g$^\}p?556]/RP.90 k,U8/u776s ʪ_01چ|\N 0VV*3H鴃J7iI!wG_^ypl}r*jɤSR 5QN@ iZ#1ٰy;_\3\BQQ x:WJv츟ٯ$"@6 S#qe딇(/P( Dy~TOϻ<4:-+F`0||;Xl-"uw$Цi󼕝mKʩorz"mϺ$F:~E'ҐvD\y?Rr8_He@ e~O,T.(ފR*cY^m|cVR[8 JҡSm!ΆԨb)RHG{?MpqrmN>߶Y)\p,d#xۆWY*,l6]v0h15M˙MS8+EdI='LBJIH7_9{Caз*Lq,dt >+~ّeʏ?xԕ4bBAŚjﵫ!'\Ը$WNvKO}ӽmSşذqsOy?\[,d@'73'j%kOe`1.g2"e =YIzS2|zŐƄa\U,dP;jhhhaxǶ?КZ՚.q SE+XrbOu%\GتX(H,N^~]JyEZQKceTQ]VGYqnah;y$cQahT&QPZ*iZ8UQQM.qo/T\7X"u?Mttl2Xq(IoW{R^ ux*SYJ! 4S.Jy~ BROS[V|žKNɛP(L6V^|cR7i7nZW1Fd@ Ara{詑|(T*dN]Ko?s=@ |_EvF]׍kR)eBJc" MUUbY6`~V޴dJKß&~'d3i WWWWWW
Current Directory: /usr/include/db4.7.25
Viewing File: /usr/include/db4.7.25/db_cxx.h
/*- * See the file LICENSE for redistribution information. * * Copyright (c) 1997,2008 Oracle. All rights reserved. * * $Id: db_cxx.in,v 12.49 2008/01/12 13:42:37 bostic Exp $ */ #ifndef _DB_CXX_H_ #define _DB_CXX_H_ // // C++ assumptions: // // To ensure portability to many platforms, both new and old, we make // few assumptions about the C++ compiler and library. For example, // we do not expect STL, templates or namespaces to be available. The // "newest" C++ feature used is exceptions, which are used liberally // to transmit error information. Even the use of exceptions can be // disabled at runtime, to do so, use the DB_CXX_NO_EXCEPTIONS flags // with the DbEnv or Db constructor. // // C++ naming conventions: // // - All top level class names start with Db. // - All class members start with lower case letter. // - All private data members are suffixed with underscore. // - Use underscores to divide names into multiple words. // - Simple data accessors are named with get_ or set_ prefix. // - All method names are taken from names of functions in the C // layer of db (usually by dropping a prefix like "db_"). // These methods have the same argument types and order, // other than dropping the explicit arg that acts as "this". // // As a rule, each DbFoo object has exactly one underlying DB_FOO struct // (defined in db.h) associated with it. In some cases, we inherit directly // from the DB_FOO structure to make this relationship explicit. Often, // the underlying C layer allocates and deallocates these structures, so // there is no easy way to add any data to the DbFoo class. When you see // a comment about whether data is permitted to be added, this is what // is going on. Of course, if we need to add data to such C++ classes // in the future, we will arrange to have an indirect pointer to the // DB_FOO struct (as some of the classes already have). // //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// // // Forward declarations // #include <stdarg.h> #define HAVE_CXX_STDHEADERS 1 #ifdef HAVE_CXX_STDHEADERS #include <iostream> #include <exception> #define __DB_STD(x) std::x #else #include <iostream.h> #include <exception.h> #define __DB_STD(x) x #endif #include "db.h" class Db; // forward class Dbc; // forward class DbEnv; // forward class DbInfo; // forward class DbLock; // forward class DbLogc; // forward class DbLsn; // forward class DbMpoolFile; // forward class DbPreplist; // forward class DbSequence; // forward class Dbt; // forward class DbTxn; // forward class DbMultipleIterator; // forward class DbMultipleKeyDataIterator; // forward class DbMultipleRecnoDataIterator; // forward class DbMultipleDataIterator; // forward class DbException; // forward class DbDeadlockException; // forward class DbLockNotGrantedException; // forward class DbMemoryException; // forward class DbRepHandleDeadException; // forward class DbRunRecoveryException; // forward //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// // // Turn off inappropriate compiler warnings // #ifdef _MSC_VER // These are level 4 warnings that are explicitly disabled. // With Visual C++, by default you do not see above level 3 unless // you use /W4. But we like to compile with the highest level // warnings to catch other errors. // // 4201: nameless struct/union // triggered by standard include file <winnt.h> // // 4514: unreferenced inline function has been removed // certain include files in MSVC define methods that are not called // #pragma warning(push) #pragma warning(disable: 4201 4514) #endif //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// // // Mechanisms for declaring classes // // // Every class defined in this file has an _exported next to the class name. // This is needed for WinTel machines so that the class methods can // be exported or imported in a DLL as appropriate. Users of the DLL // use the define DB_USE_DLL. When the DLL is built, DB_CREATE_DLL // must be defined. // #if defined(_MSC_VER) # if defined(DB_CREATE_DLL) # define _exported __declspec(dllexport) // creator of dll # elif defined(DB_USE_DLL) # define _exported __declspec(dllimport) // user of dll # else # define _exported // static lib creator or user # endif #else /* _MSC_VER */ # define _exported #endif /* _MSC_VER */ // Some interfaces can be customized by allowing users to define // callback functions. For performance and logistical reasons, some // callback functions must be declared in extern "C" blocks. For others, // we allow you to declare the callbacks in C++ or C (or an extern "C" // block) as you wish. See the set methods for the callbacks for // the choices. // extern "C" { typedef void * (*db_malloc_fcn_type) (size_t); typedef void * (*db_realloc_fcn_type) (void *, size_t); typedef void (*db_free_fcn_type) (void *); typedef int (*bt_compare_fcn_type) /*C++ version available*/ (DB *, const DBT *, const DBT *); typedef size_t (*bt_prefix_fcn_type) /*C++ version available*/ (DB *, const DBT *, const DBT *); typedef int (*dup_compare_fcn_type) /*C++ version available*/ (DB *, const DBT *, const DBT *); typedef int (*h_compare_fcn_type) /*C++ version available*/ (DB *, const DBT *, const DBT *); typedef u_int32_t (*h_hash_fcn_type) /*C++ version available*/ (DB *, const void *, u_int32_t); typedef int (*pgin_fcn_type) (DB_ENV *dbenv, db_pgno_t pgno, void *pgaddr, DBT *pgcookie); typedef int (*pgout_fcn_type) (DB_ENV *dbenv, db_pgno_t pgno, void *pgaddr, DBT *pgcookie); } // // Represents a database table = a set of keys with associated values. // class _exported Db { friend class DbEnv; public: Db(DbEnv*, u_int32_t); // Create a Db object. virtual ~Db(); // Calls close() if the user hasn't. // These methods exactly match those in the C interface. // virtual int associate(DbTxn *txn, Db *secondary, int (*callback) (Db *, const Dbt *, const Dbt *, Dbt *), u_int32_t flags); virtual int close(u_int32_t flags); virtual int compact(DbTxn *txnid, Dbt *start, Dbt *stop, DB_COMPACT *c_data, u_int32_t flags, Dbt *end); virtual int cursor(DbTxn *txnid, Dbc **cursorp, u_int32_t flags); virtual int del(DbTxn *txnid, Dbt *key, u_int32_t flags); virtual void err(int, const char *, ...); virtual void errx(const char *, ...); virtual int exists(DbTxn *txnid, Dbt *key, u_int32_t flags); virtual int fd(int *fdp); virtual int get(DbTxn *txnid, Dbt *key, Dbt *data, u_int32_t flags); virtual int get_bt_minkey(u_int32_t *); virtual int get_byteswapped(int *); virtual int get_cachesize(u_int32_t *, u_int32_t *, int *); virtual int get_dbname(const char **, const char **); virtual int get_encrypt_flags(u_int32_t *); virtual void get_errfile(FILE **); virtual void get_errpfx(const char **); virtual int get_flags(u_int32_t *); virtual int get_h_ffactor(u_int32_t *); virtual int get_h_nelem(u_int32_t *); virtual int get_lorder(int *); virtual void get_msgfile(FILE **); virtual int get_multiple(); virtual int get_open_flags(u_int32_t *); virtual int get_pagesize(u_int32_t *); virtual int get_priority(DB_CACHE_PRIORITY *); virtual int get_q_extentsize(u_int32_t *); virtual int get_re_delim(int *); virtual int get_re_len(u_int32_t *); virtual int get_re_pad(int *); virtual int get_re_source(const char **); virtual int get_transactional(); virtual int get_type(DBTYPE *); virtual int join(Dbc **curslist, Dbc **dbcp, u_int32_t flags); virtual int key_range(DbTxn *, Dbt *, DB_KEY_RANGE *, u_int32_t); virtual int open(DbTxn *txnid, const char *, const char *subname, DBTYPE, u_int32_t, int); virtual int pget(DbTxn *txnid, Dbt *key, Dbt *pkey, Dbt *data, u_int32_t flags); virtual int put(DbTxn *, Dbt *, Dbt *, u_int32_t); virtual int remove(const char *, const char *, u_int32_t); virtual int rename(const char *, const char *, const char *, u_int32_t); virtual int set_alloc( db_malloc_fcn_type, db_realloc_fcn_type, db_free_fcn_type); virtual void set_app_private(void *); virtual int set_append_recno(int (*)(Db *, Dbt *, db_recno_t)); virtual int set_bt_compare(bt_compare_fcn_type); /*deprecated*/ virtual int set_bt_compare(int (*)(Db *, const Dbt *, const Dbt *)); virtual int set_bt_minkey(u_int32_t); virtual int set_bt_prefix(bt_prefix_fcn_type); /*deprecated*/ virtual int set_bt_prefix(size_t (*)(Db *, const Dbt *, const Dbt *)); virtual int set_cachesize(u_int32_t, u_int32_t, int); virtual int set_dup_compare(dup_compare_fcn_type); /*deprecated*/ virtual int set_dup_compare(int (*)(Db *, const Dbt *, const Dbt *)); virtual int set_encrypt(const char *, u_int32_t); virtual void set_errcall( void (*)(const DbEnv *, const char *, const char *)); virtual void set_errfile(FILE *); virtual void set_errpfx(const char *); virtual int set_feedback(void (*)(Db *, int, int)); virtual int set_flags(u_int32_t); virtual int set_h_compare(h_compare_fcn_type); /*deprecated*/ virtual int set_h_compare(int (*)(Db *, const Dbt *, const Dbt *)); virtual int set_h_ffactor(u_int32_t); virtual int set_h_hash(h_hash_fcn_type); /*deprecated*/ virtual int set_h_hash(u_int32_t (*)(Db *, const void *, u_int32_t)); virtual int set_h_nelem(u_int32_t); virtual int set_lorder(int); virtual void set_msgcall(void (*)(const DbEnv *, const char *)); virtual void set_msgfile(FILE *); virtual int set_pagesize(u_int32_t); virtual int set_paniccall(void (*)(DbEnv *, int)); virtual int set_priority(DB_CACHE_PRIORITY); virtual int set_q_extentsize(u_int32_t); virtual int set_re_delim(int); virtual int set_re_len(u_int32_t); virtual int set_re_pad(int); virtual int set_re_source(const char *); virtual int stat(DbTxn *, void *sp, u_int32_t flags); virtual int stat_print(u_int32_t flags); virtual int sync(u_int32_t flags); virtual int truncate(DbTxn *, u_int32_t *, u_int32_t); virtual int upgrade(const char *name, u_int32_t flags); virtual int verify( const char *, const char *, __DB_STD(ostream) *, u_int32_t); // These additional methods are not in the C interface, and // are only available for C++. // virtual void *get_app_private() const; virtual __DB_STD(ostream) *get_error_stream(); virtual void set_error_stream(__DB_STD(ostream) *); virtual __DB_STD(ostream) *get_message_stream(); virtual void set_message_stream(__DB_STD(ostream) *); virtual DbEnv *get_env(); virtual DbMpoolFile *get_mpf(); virtual ENV *get_ENV() { return imp_->env; } virtual DB *get_DB() { return imp_; } virtual const DB *get_const_DB() const { return imp_; } static Db* get_Db(DB *db) { return (Db *)db->api_internal; } static const Db* get_const_Db(const DB *db) { return (const Db *)db->api_internal; } private: // no copying Db(const Db &); Db &operator = (const Db &); void cleanup(); int initialize(); int error_policy(); // instance data DB *imp_; DbEnv *dbenv_; DbMpoolFile *mpf_; int construct_error_; u_int32_t flags_; u_int32_t construct_flags_; public: // These are public only because they need to be called // via C callback functions. They should never be used by // external users of this class. // int (*append_recno_callback_)(Db *, Dbt *, db_recno_t); int (*associate_callback_)(Db *, const Dbt *, const Dbt *, Dbt *); int (*bt_compare_callback_)(Db *, const Dbt *, const Dbt *); size_t (*bt_prefix_callback_)(Db *, const Dbt *, const Dbt *); int (*dup_compare_callback_)(Db *, const Dbt *, const Dbt *); void (*feedback_callback_)(Db *, int, int); int (*h_compare_callback_)(Db *, const Dbt *, const Dbt *); u_int32_t (*h_hash_callback_)(Db *, const void *, u_int32_t); }; // // Cursor // class _exported Dbc : protected DBC { friend class Db; public: int close(); int count(db_recno_t *countp, u_int32_t flags); int del(u_int32_t flags); int dup(Dbc** cursorp, u_int32_t flags); int get(Dbt* key, Dbt *data, u_int32_t flags); int get_priority(DB_CACHE_PRIORITY *priorityp); int pget(Dbt* key, Dbt* pkey, Dbt *data, u_int32_t flags); int put(Dbt* key, Dbt *data, u_int32_t flags); int set_priority(DB_CACHE_PRIORITY priority); private: // No data is permitted in this class (see comment at top) // Note: use Db::cursor() to get pointers to a Dbc, // and call Dbc::close() rather than delete to release them. // Dbc(); ~Dbc(); // no copying Dbc(const Dbc &); Dbc &operator = (const Dbc &); }; // // Berkeley DB environment class. Provides functions for opening databases. // User of this library can use this class as a starting point for // developing a DB application - derive their application class from // this one, add application control logic. // // Note that if you use the default constructor, you must explicitly // call appinit() before any other db activity (e.g. opening files) // class _exported DbEnv { friend class Db; friend class DbLock; friend class DbMpoolFile; public: // After using this constructor, you can set any needed // parameters for the environment using the set_* methods. // Then call open() to finish initializing the environment // and attaching it to underlying files. // DbEnv(u_int32_t flags); virtual ~DbEnv(); // These methods match those in the C interface. // virtual int cdsgroup_begin(DbTxn **tid); virtual int close(u_int32_t); virtual int dbremove(DbTxn *txn, const char *name, const char *subdb, u_int32_t flags); virtual int dbrename(DbTxn *txn, const char *name, const char *subdb, const char *newname, u_int32_t flags); virtual void err(int, const char *, ...); virtual void errx(const char *, ...); virtual int failchk(u_int32_t); virtual int fileid_reset(const char *, u_int32_t); virtual void *get_app_private() const; virtual int get_home(const char **); virtual int get_open_flags(u_int32_t *); virtual int open(const char *, u_int32_t, int); virtual int remove(const char *, u_int32_t); virtual int stat_print(u_int32_t flags); virtual int set_alloc(db_malloc_fcn_type, db_realloc_fcn_type, db_free_fcn_type); virtual void set_app_private(void *); virtual int get_cachesize(u_int32_t *, u_int32_t *, int *); virtual int set_cachesize(u_int32_t, u_int32_t, int); virtual int get_cache_max(u_int32_t *, u_int32_t *); virtual int set_cache_max(u_int32_t, u_int32_t); virtual int get_data_dirs(const char ***); virtual int set_data_dir(const char *); virtual int get_encrypt_flags(u_int32_t *); virtual int get_intermediate_dir_mode(const char **); virtual int set_intermediate_dir_mode(const char *); virtual int set_isalive( int (*)(DbEnv *, pid_t, db_threadid_t, u_int32_t)); virtual int set_encrypt(const char *, u_int32_t); virtual void set_errcall( void (*)(const DbEnv *, const char *, const char *)); virtual void get_errfile(FILE **); virtual void set_errfile(FILE *); virtual void get_errpfx(const char **); virtual void set_errpfx(const char *); virtual int set_event_notify(void (*)(DbEnv *, u_int32_t, void *)); virtual int get_flags(u_int32_t *); virtual int set_flags(u_int32_t, int); virtual bool is_bigendian(); virtual int lsn_reset(const char *, u_int32_t); virtual int set_feedback(void (*)(DbEnv *, int, int)); virtual int get_lg_bsize(u_int32_t *); virtual int set_lg_bsize(u_int32_t); virtual int get_lg_dir(const char **); virtual int set_lg_dir(const char *); virtual int get_lg_filemode(int *); virtual int set_lg_filemode(int); virtual int get_lg_max(u_int32_t *); virtual int set_lg_max(u_int32_t); virtual int get_lg_regionmax(u_int32_t *); virtual int set_lg_regionmax(u_int32_t); virtual int get_lk_conflicts(const u_int8_t **, int *); virtual int set_lk_conflicts(u_int8_t *, int); virtual int get_lk_detect(u_int32_t *); virtual int set_lk_detect(u_int32_t); virtual int get_lk_max_lockers(u_int32_t *); virtual int set_lk_max_lockers(u_int32_t); virtual int get_lk_max_locks(u_int32_t *); virtual int set_lk_max_locks(u_int32_t); virtual int get_lk_max_objects(u_int32_t *); virtual int set_lk_max_objects(u_int32_t); virtual int get_mp_mmapsize(size_t *); virtual int set_mp_mmapsize(size_t); virtual int get_mp_max_openfd(int *); virtual int set_mp_max_openfd(int); virtual int get_mp_max_write(int *, db_timeout_t *); virtual int set_mp_max_write(int, db_timeout_t); virtual void set_msgcall(void (*)(const DbEnv *, const char *)); virtual void get_msgfile(FILE **); virtual void set_msgfile(FILE *); virtual int set_paniccall(void (*)(DbEnv *, int)); virtual int set_rpc_server(void *, char *, long, long, u_int32_t); virtual int get_shm_key(long *); virtual int set_shm_key(long); virtual int get_timeout(db_timeout_t *, u_int32_t); virtual int set_timeout(db_timeout_t, u_int32_t); virtual int get_tmp_dir(const char **); virtual int set_tmp_dir(const char *); virtual int get_tx_max(u_int32_t *); virtual int set_tx_max(u_int32_t); virtual int set_app_dispatch(int (*)(DbEnv *, Dbt *, DbLsn *, db_recops)); virtual int get_tx_timestamp(time_t *); virtual int set_tx_timestamp(time_t *); virtual int get_verbose(u_int32_t which, int *); virtual int set_verbose(u_int32_t which, int); // Version information. A static method so it can be obtained anytime. // static char *version(int *major, int *minor, int *patch); // Convert DB errors to strings static char *strerror(int); // If an error is detected and the error call function // or stream is set, a message is dispatched or printed. // If a prefix is set, each message is prefixed. // // You can use set_errcall() or set_errfile() above to control // error functionality. Alternatively, you can call // set_error_stream() to force all errors to a C++ stream. // It is unwise to mix these approaches. // virtual __DB_STD(ostream) *get_error_stream(); virtual void set_error_stream(__DB_STD(ostream) *); virtual __DB_STD(ostream) *get_message_stream(); virtual void set_message_stream(__DB_STD(ostream) *); // used internally static void runtime_error(DbEnv *dbenv, const char *caller, int err, int error_policy); static void runtime_error_dbt(DbEnv *dbenv, const char *caller, Dbt *dbt, int error_policy); static void runtime_error_lock_get(DbEnv *dbenv, const char *caller, int err, db_lockop_t op, db_lockmode_t mode, const Dbt *obj, DbLock lock, int index, int error_policy); // Lock functions // virtual int lock_detect(u_int32_t flags, u_int32_t atype, int *aborted); virtual int lock_get(u_int32_t locker, u_int32_t flags, const Dbt *obj, db_lockmode_t lock_mode, DbLock *lock); virtual int lock_id(u_int32_t *idp); virtual int lock_id_free(u_int32_t id); virtual int lock_put(DbLock *lock); virtual int lock_stat(DB_LOCK_STAT **statp, u_int32_t flags); virtual int lock_stat_print(u_int32_t flags); virtual int lock_vec(u_int32_t locker, u_int32_t flags, DB_LOCKREQ list[], int nlist, DB_LOCKREQ **elistp); // Log functions // virtual int log_archive(char **list[], u_int32_t flags); static int log_compare(const DbLsn *lsn0, const DbLsn *lsn1); virtual int log_cursor(DbLogc **cursorp, u_int32_t flags); virtual int log_file(DbLsn *lsn, char *namep, size_t len); virtual int log_flush(const DbLsn *lsn); virtual int log_get_config(u_int32_t, int *); virtual int log_put(DbLsn *lsn, const Dbt *data, u_int32_t flags); virtual int log_printf(DbTxn *, const char *, ...); virtual int log_set_config(u_int32_t, int); virtual int log_stat(DB_LOG_STAT **spp, u_int32_t flags); virtual int log_stat_print(u_int32_t flags); // Mpool functions // virtual int memp_fcreate(DbMpoolFile **dbmfp, u_int32_t flags); virtual int memp_register(int ftype, pgin_fcn_type pgin_fcn, pgout_fcn_type pgout_fcn); virtual int memp_stat(DB_MPOOL_STAT **gsp, DB_MPOOL_FSTAT ***fsp, u_int32_t flags); virtual int memp_stat_print(u_int32_t flags); virtual int memp_sync(DbLsn *lsn); virtual int memp_trickle(int pct, int *nwrotep); // Mpool functions // virtual int mutex_alloc(u_int32_t, db_mutex_t *); virtual int mutex_free(db_mutex_t); virtual int mutex_get_align(u_int32_t *); virtual int mutex_get_increment(u_int32_t *); virtual int mutex_get_max(u_int32_t *); virtual int mutex_get_tas_spins(u_int32_t *); virtual int mutex_lock(db_mutex_t); virtual int mutex_set_align(u_int32_t); virtual int mutex_set_increment(u_int32_t); virtual int mutex_set_max(u_int32_t); virtual int mutex_set_tas_spins(u_int32_t); virtual int mutex_stat(DB_MUTEX_STAT **, u_int32_t); virtual int mutex_stat_print(u_int32_t); virtual int mutex_unlock(db_mutex_t); // Transaction functions // virtual int txn_begin(DbTxn *pid, DbTxn **tid, u_int32_t flags); virtual int txn_checkpoint(u_int32_t kbyte, u_int32_t min, u_int32_t flags); virtual int txn_recover(DbPreplist *preplist, long count, long *retp, u_int32_t flags); virtual int txn_stat(DB_TXN_STAT **statp, u_int32_t flags); virtual int txn_stat_print(u_int32_t flags); // Replication functions // virtual int rep_elect(u_int32_t, u_int32_t, u_int32_t); virtual int rep_flush(); virtual int rep_process_message(Dbt *, Dbt *, int, DbLsn *); virtual int rep_start(Dbt *, u_int32_t); virtual int rep_stat(DB_REP_STAT **statp, u_int32_t flags); virtual int rep_stat_print(u_int32_t flags); virtual int rep_get_clockskew(u_int32_t *, u_int32_t *); virtual int rep_set_clockskew(u_int32_t, u_int32_t); virtual int rep_get_limit(u_int32_t *, u_int32_t *); virtual int rep_set_limit(u_int32_t, u_int32_t); virtual int rep_set_transport(int, int (*)(DbEnv *, const Dbt *, const Dbt *, const DbLsn *, int, u_int32_t)); virtual int rep_set_request(u_int32_t, u_int32_t); virtual int rep_get_request(u_int32_t *, u_int32_t *); virtual int get_thread_count(u_int32_t *); virtual int set_thread_count(u_int32_t); virtual int set_thread_id(void (*)(DbEnv *, pid_t *, db_threadid_t *)); virtual int set_thread_id_string(char *(*)(DbEnv *, pid_t, db_threadid_t, char *)); virtual int rep_set_config(u_int32_t, int); virtual int rep_get_config(u_int32_t, int *); virtual int rep_sync(u_int32_t flags); // Advanced replication functions // virtual int rep_get_nsites(u_int32_t *n); virtual int rep_set_nsites(u_int32_t n); virtual int rep_get_priority(u_int32_t *priorityp); virtual int rep_set_priority(u_int32_t priority); virtual int rep_get_timeout(int which, db_timeout_t *timeout); virtual int rep_set_timeout(int which, db_timeout_t timeout); virtual int repmgr_add_remote_site(const char * host, u_int16_t port, int *eidp, u_int32_t flags); virtual int repmgr_get_ack_policy(int *policy); virtual int repmgr_set_ack_policy(int policy); virtual int repmgr_set_local_site(const char * host, u_int16_t port, u_int32_t flags); virtual int repmgr_site_list(u_int *countp, DB_REPMGR_SITE **listp); virtual int repmgr_start(int nthreads, u_int32_t flags); virtual int repmgr_stat(DB_REPMGR_STAT **statp, u_int32_t flags); virtual int repmgr_stat_print(u_int32_t flags); // Conversion functions // virtual ENV *get_ENV() { return imp_->env; } virtual DB_ENV *get_DB_ENV() { return imp_; } virtual const DB_ENV *get_const_DB_ENV() const { return imp_; } static DbEnv* get_DbEnv(DB_ENV *dbenv) { return dbenv ? (DbEnv *)dbenv->api1_internal : 0; } static const DbEnv* get_const_DbEnv(const DB_ENV *dbenv) { return dbenv ? (const DbEnv *)dbenv->api1_internal : 0; } // For internal use only. static DbEnv* wrap_DB_ENV(DB_ENV *dbenv); // These are public only because they need to be called // via C functions. They should never be called by users // of this class. // static int _app_dispatch_intercept(DB_ENV *dbenv, DBT *dbt, DB_LSN *lsn, db_recops op); static void _paniccall_intercept(DB_ENV *dbenv, int errval); static void _feedback_intercept(DB_ENV *dbenv, int opcode, int pct); static void _event_func_intercept(DB_ENV *dbenv, u_int32_t, void *); static int _isalive_intercept(DB_ENV *dbenv, pid_t pid, db_threadid_t thrid, u_int32_t flags); static int _rep_send_intercept(DB_ENV *dbenv, const DBT *cntrl, const DBT *data, const DB_LSN *lsn, int id, u_int32_t flags); static void _stream_error_function(const DB_ENV *dbenv, const char *prefix, const char *message); static void _stream_message_function(const DB_ENV *dbenv, const char *message); static void _thread_id_intercept(DB_ENV *dbenv, pid_t *pidp, db_threadid_t *thridp); static char *_thread_id_string_intercept(DB_ENV *dbenv, pid_t pid, db_threadid_t thrid, char *buf); private: void cleanup(); int initialize(DB_ENV *dbenv); int error_policy(); // For internal use only. DbEnv(DB_ENV *, u_int32_t flags); // no copying DbEnv(const DbEnv &); void operator = (const DbEnv &); // instance data DB_ENV *imp_; int construct_error_; u_int32_t construct_flags_; __DB_STD(ostream) *error_stream_; __DB_STD(ostream) *message_stream_; int (*app_dispatch_callback_)(DbEnv *, Dbt *, DbLsn *, db_recops); int (*isalive_callback_)(DbEnv *, pid_t, db_threadid_t, u_int32_t); void (*error_callback_)(const DbEnv *, const char *, const char *); void (*feedback_callback_)(DbEnv *, int, int); void (*message_callback_)(const DbEnv *, const char *); void (*paniccall_callback_)(DbEnv *, int); void (*event_func_callback_)(DbEnv *, u_int32_t, void *); int (*rep_send_callback_)(DbEnv *, const Dbt *, const Dbt *, const DbLsn *, int, u_int32_t); void (*thread_id_callback_)(DbEnv *, pid_t *, db_threadid_t *); char *(*thread_id_string_callback_)(DbEnv *, pid_t, db_threadid_t, char *); }; // // Lock // class _exported DbLock { friend class DbEnv; public: DbLock(); DbLock(const DbLock &); DbLock &operator = (const DbLock &); protected: // We can add data to this class if needed // since its contained class is not allocated by db. // (see comment at top) DbLock(DB_LOCK); DB_LOCK lock_; }; // // Log cursor // class _exported DbLogc : protected DB_LOGC { friend class DbEnv; public: int close(u_int32_t _flags); int get(DbLsn *lsn, Dbt *data, u_int32_t _flags); int version(u_int32_t *versionp, u_int32_t _flags); private: // No data is permitted in this class (see comment at top) // Note: use Db::cursor() to get pointers to a Dbc, // and call Dbc::close() rather than delete to release them. // DbLogc(); ~DbLogc(); // no copying DbLogc(const Dbc &); DbLogc &operator = (const Dbc &); }; // // Log sequence number // class _exported DbLsn : public DB_LSN { friend class DbEnv; // friendship needed to cast to base class friend class DbLogc; // friendship needed to cast to base class }; // // Memory pool file // class _exported DbMpoolFile { friend class DbEnv; friend class Db; public: int close(u_int32_t flags); int get(db_pgno_t *pgnoaddr, DbTxn *txn, u_int32_t flags, void *pagep); int get_clear_len(u_int32_t *len); int get_fileid(u_int8_t *fileid); int get_flags(u_int32_t *flagsp); int get_ftype(int *ftype); int get_last_pgno(db_pgno_t *pgnop); int get_lsn_offset(int32_t *offsetp); int get_maxsize(u_int32_t *gbytes, u_int32_t *bytes); int get_pgcookie(DBT *dbt); int get_priority(DB_CACHE_PRIORITY *priorityp); int get_transactional(void); int open(const char *file, u_int32_t flags, int mode, size_t pagesize); int put(void *pgaddr, DB_CACHE_PRIORITY priority, u_int32_t flags); int set_clear_len(u_int32_t len); int set_fileid(u_int8_t *fileid); int set_flags(u_int32_t flags, int onoff); int set_ftype(int ftype); int set_lsn_offset(int32_t offset); int set_maxsize(u_int32_t gbytes, u_int32_t bytes); int set_pgcookie(DBT *dbt); int set_priority(DB_CACHE_PRIORITY priority); int sync(); virtual DB_MPOOLFILE *get_DB_MPOOLFILE() { return imp_; } virtual const DB_MPOOLFILE *get_const_DB_MPOOLFILE() const { return imp_; } private: DB_MPOOLFILE *imp_; // We can add data to this class if needed // since it is implemented via a pointer. // (see comment at top) // Note: use DbEnv::memp_fcreate() to get pointers to a DbMpoolFile, // and call DbMpoolFile::close() rather than delete to release them. // DbMpoolFile(); // Shut g++ up. protected: virtual ~DbMpoolFile(); private: // no copying DbMpoolFile(const DbMpoolFile &); void operator = (const DbMpoolFile &); }; // // This is filled in and returned by the DbEnv::txn_recover() method. // class _exported DbPreplist { public: DbTxn *txn; u_int8_t gid[DB_XIDDATASIZE]; }; // // A sequence record in a database // class _exported DbSequence { public: DbSequence(Db *db, u_int32_t flags); virtual ~DbSequence(); int open(DbTxn *txnid, Dbt *key, u_int32_t flags); int initial_value(db_seq_t value); int close(u_int32_t flags); int remove(DbTxn *txnid, u_int32_t flags); int stat(DB_SEQUENCE_STAT **sp, u_int32_t flags); int stat_print(u_int32_t flags); int get(DbTxn *txnid, int32_t delta, db_seq_t *retp, u_int32_t flags); int get_cachesize(int32_t *sizep); int set_cachesize(int32_t size); int get_flags(u_int32_t *flagsp); int set_flags(u_int32_t flags); int get_range(db_seq_t *minp, db_seq_t *maxp); int set_range(db_seq_t min, db_seq_t max); Db *get_db(); Dbt *get_key(); virtual DB_SEQUENCE *get_DB_SEQUENCE() { return imp_; } virtual const DB_SEQUENCE *get_const_DB_SEQUENCE() const { return imp_; } static DbSequence* get_DbSequence(DB_SEQUENCE *seq) { return (DbSequence *)seq->api_internal; } static const DbSequence* get_const_DbSequence(const DB_SEQUENCE *seq) { return (const DbSequence *)seq->api_internal; } // For internal use only. static DbSequence* wrap_DB_SEQUENCE(DB_SEQUENCE *seq); private: DbSequence(DB_SEQUENCE *seq); // no copying DbSequence(const DbSequence &); DbSequence &operator = (const DbSequence &); DB_SEQUENCE *imp_; DBT key_; }; // // Transaction // class _exported DbTxn { friend class DbEnv; public: int abort(); int commit(u_int32_t flags); int discard(u_int32_t flags); u_int32_t id(); int get_name(const char **namep); int prepare(u_int8_t *gid); int set_name(const char *name); int set_timeout(db_timeout_t timeout, u_int32_t flags); virtual DB_TXN *get_DB_TXN() { return imp_; } virtual const DB_TXN *get_const_DB_TXN() const { return imp_; } static DbTxn* get_DbTxn(DB_TXN *txn) { return (DbTxn *)txn->api_internal; } static const DbTxn* get_const_DbTxn(const DB_TXN *txn) { return (const DbTxn *)txn->api_internal; } // For internal use only. static DbTxn* wrap_DB_TXN(DB_TXN *txn); private: DB_TXN *imp_; // We can add data to this class if needed // since it is implemented via a pointer. // (see comment at top) // Note: use DbEnv::txn_begin() to get pointers to a DbTxn, // and call DbTxn::abort() or DbTxn::commit rather than // delete to release them. // DbTxn(); // For internal use only. DbTxn(DB_TXN *txn); virtual ~DbTxn(); // no copying DbTxn(const DbTxn &); void operator = (const DbTxn &); }; // // A chunk of data, maybe a key or value. // class _exported Dbt : private DBT { friend class Db; friend class Dbc; friend class DbEnv; friend class DbLogc; friend class DbSequence; public: // key/data void *get_data() const { return data; } void set_data(void *value) { data = value; } // key/data length u_int32_t get_size() const { return size; } void set_size(u_int32_t value) { size = value; } // RO: length of user buffer. u_int32_t get_ulen() const { return ulen; } void set_ulen(u_int32_t value) { ulen = value; } // RO: get/put record length. u_int32_t get_dlen() const { return dlen; } void set_dlen(u_int32_t value) { dlen = value; } // RO: get/put record offset. u_int32_t get_doff() const { return doff; } void set_doff(u_int32_t value) { doff = value; } // flags u_int32_t get_flags() const { return flags; } void set_flags(u_int32_t value) { flags = value; } // Conversion functions DBT *get_DBT() { return (DBT *)this; } const DBT *get_const_DBT() const { return (const DBT *)this; } static Dbt* get_Dbt(DBT *dbt) { return (Dbt *)dbt; } static const Dbt* get_const_Dbt(const DBT *dbt) { return (const Dbt *)dbt; } Dbt(void *data, u_int32_t size); Dbt(); ~Dbt(); Dbt(const Dbt &); Dbt &operator = (const Dbt &); private: // Note: no extra data appears in this class (other than // inherited from DBT) since we need DBT and Dbt objects // to have interchangable pointers. // // When subclassing this class, remember that callback // methods like bt_compare, bt_prefix, dup_compare may // internally manufacture DBT objects (which later are // cast to Dbt), so such callbacks might receive objects // not of your subclassed type. }; //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// // // multiple key/data/reco iterator classes // // DbMultipleIterator is a shared private base class for the three types // of bulk-return Iterator; it should never be instantiated directly, // but it handles the functionality shared by its subclasses. class _exported DbMultipleIterator { public: DbMultipleIterator(const Dbt &dbt); protected: u_int8_t *data_; u_int32_t *p_; }; class _exported DbMultipleKeyDataIterator : private DbMultipleIterator { public: DbMultipleKeyDataIterator(const Dbt &dbt) : DbMultipleIterator(dbt) {} bool next(Dbt &key, Dbt &data); }; class _exported DbMultipleRecnoDataIterator : private DbMultipleIterator { public: DbMultipleRecnoDataIterator(const Dbt &dbt) : DbMultipleIterator(dbt) {} bool next(db_recno_t &recno, Dbt &data); }; class _exported DbMultipleDataIterator : private DbMultipleIterator { public: DbMultipleDataIterator(const Dbt &dbt) : DbMultipleIterator(dbt) {} bool next(Dbt &data); }; //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// // // Exception classes // // Almost any error in the DB library throws a DbException. // Every exception should be considered an abnormality // (e.g. bug, misuse of DB, file system error). // class _exported DbException : public __DB_STD(exception) { public: virtual ~DbException() throw(); DbException(int err); DbException(const char *description); DbException(const char *description, int err); DbException(const char *prefix, const char *description, int err); int get_errno() const; virtual const char *what() const throw(); DbEnv *get_env() const; void set_env(DbEnv *dbenv); DbException(const DbException &); DbException &operator = (const DbException &); private: void describe(const char *prefix, const char *description); char *what_; int err_; // errno DbEnv *dbenv_; }; // // A specific sort of exception that occurs when // an operation is aborted to resolve a deadlock. // class _exported DbDeadlockException : public DbException { public: virtual ~DbDeadlockException() throw(); DbDeadlockException(const char *description); DbDeadlockException(const DbDeadlockException &); DbDeadlockException &operator = (const DbDeadlockException &); }; // // A specific sort of exception that occurs when // a lock is not granted, e.g. by lock_get or lock_vec. // Note that the Dbt is only live as long as the Dbt used // in the offending call. // class _exported DbLockNotGrantedException : public DbException { public: virtual ~DbLockNotGrantedException() throw(); DbLockNotGrantedException(const char *prefix, db_lockop_t op, db_lockmode_t mode, const Dbt *obj, const DbLock lock, int index); DbLockNotGrantedException(const char *description); DbLockNotGrantedException(const DbLockNotGrantedException &); DbLockNotGrantedException &operator = (const DbLockNotGrantedException &); db_lockop_t get_op() const; db_lockmode_t get_mode() const; const Dbt* get_obj() const; DbLock *get_lock() const; int get_index() const; private: db_lockop_t op_; db_lockmode_t mode_; const Dbt *obj_; DbLock *lock_; int index_; }; // // A specific sort of exception that occurs when // user declared memory is insufficient in a Dbt. // class _exported DbMemoryException : public DbException { public: virtual ~DbMemoryException() throw(); DbMemoryException(Dbt *dbt); DbMemoryException(const char *prefix, Dbt *dbt); DbMemoryException(const DbMemoryException &); DbMemoryException &operator = (const DbMemoryException &); Dbt *get_dbt() const; private: Dbt *dbt_; }; // // A specific sort of exception that occurs when a change of replication // master requires that all handles be re-opened. // class _exported DbRepHandleDeadException : public DbException { public: virtual ~DbRepHandleDeadException() throw(); DbRepHandleDeadException(const char *description); DbRepHandleDeadException(const DbRepHandleDeadException &); DbRepHandleDeadException &operator = (const DbRepHandleDeadException &); }; // // A specific sort of exception that occurs when // recovery is required before continuing DB activity. // class _exported DbRunRecoveryException : public DbException { public: virtual ~DbRunRecoveryException() throw(); DbRunRecoveryException(const char *description); DbRunRecoveryException(const DbRunRecoveryException &); DbRunRecoveryException &operator = (const DbRunRecoveryException &); }; // // A specific sort of exception that occurs when //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// // // Restore default compiler warnings // #ifdef _MSC_VER #pragma warning(pop) #endif #endif /* !_DB_CXX_H_ */