System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 9d401edd528c7f874498d333f5945f90b321810f:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 2a 20 41 44 4f  *********. * ADO
0040: 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50 72  .NET 2.0 Data Pr
0050: 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69 74  ovider for SQLit
0060: 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0a 20 2a  e Version 3.X. *
0070: 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f 62 65   Written by Robe
0080: 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f 62 65  rt Simpson (robe
0090: 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65 73 6f  rt@blackcastleso
00a0: 66 74 2e 63 6f 6d 29 0a 20 2a 0a 20 2a 20 52 65  ft.com). *. * Re
00b0: 6c 65 61 73 65 64 20 74 6f 20 74 68 65 20 70 75  leased to the pu
00c0: 62 6c 69 63 20 64 6f 6d 61 69 6e 2c 20 75 73 65  blic domain, use
00d0: 20 61 74 20 79 6f 75 72 20 6f 77 6e 20 72 69 73   at your own ris
00e0: 6b 21 0a 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  k!. ************
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 6e  ************/..n
0120: 61 6d 65 73 70 61 63 65 20 53 79 73 74 65 6d 2e  amespace System.
0130: 44 61 74 61 2e 53 51 4c 69 74 65 0a 7b 0a 20 20  Data.SQLite.{.  
0140: 75 73 69 6e 67 20 53 79 73 74 65 6d 3b 0a 0a 20  using System;.. 
0150: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20   /// <summary>. 
0160: 20 2f 2f 2f 20 41 20 73 69 6d 70 6c 65 20 63 75   /// A simple cu
0170: 73 74 6f 6d 20 61 74 74 72 69 62 75 74 65 20 74  stom attribute t
0180: 6f 20 65 6e 61 62 6c 65 20 75 73 20 74 6f 20 65  o enable us to e
0190: 61 73 69 6c 79 20 66 69 6e 64 20 75 73 65 72 2d  asily find user-
01a0: 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e  defined function
01b0: 73 20 69 6e 0a 20 20 2f 2f 2f 20 74 68 65 20 6c  s in.  /// the l
01c0: 6f 61 64 65 64 20 61 73 73 65 6d 62 6c 69 65 73  oaded assemblies
01d0: 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 20   and initialize 
01e0: 74 68 65 6d 20 69 6e 20 53 51 4c 69 74 65 20 61  them in SQLite a
01f0: 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 61 72  s connections ar
0200: 65 20 6d 61 64 65 2e 0a 20 20 2f 2f 2f 20 3c 2f  e made..  /// </
0210: 73 75 6d 6d 61 72 79 3e 0a 20 20 5b 41 74 74 72  summary>.  [Attr
0220: 69 62 75 74 65 55 73 61 67 65 28 41 74 74 72 69  ibuteUsage(Attri
0230: 62 75 74 65 54 61 72 67 65 74 73 2e 43 6c 61 73  buteTargets.Clas
0240: 73 2c 20 49 6e 68 65 72 69 74 65 64 20 3d 20 66  s, Inherited = f
0250: 61 6c 73 65 2c 20 41 6c 6c 6f 77 4d 75 6c 74 69  alse, AllowMulti
0260: 70 6c 65 20 3d 20 74 72 75 65 29 5d 0a 20 20 70  ple = true)].  p
0270: 75 62 6c 69 63 20 73 65 61 6c 65 64 20 63 6c 61  ublic sealed cla
0280: 73 73 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  ss SQLiteFunctio
0290: 6e 41 74 74 72 69 62 75 74 65 20 3a 20 41 74 74  nAttribute : Att
02a0: 72 69 62 75 74 65 0a 20 20 7b 0a 20 20 20 20 70  ribute.  {.    p
02b0: 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 20 20  rivate string   
02c0: 20 20 20 20 5f 6e 61 6d 65 3b 0a 20 20 20 20 70      _name;.    p
02d0: 72 69 76 61 74 65 20 69 6e 74 20 20 20 20 20 20  rivate int      
02e0: 20 20 20 20 5f 61 72 67 75 6d 65 6e 74 43 6f 75      _argumentCou
02f0: 6e 74 3b 0a 20 20 20 20 70 72 69 76 61 74 65 20  nt;.    private 
0300: 46 75 6e 63 74 69 6f 6e 54 79 70 65 20 5f 66 75  FunctionType _fu
0310: 6e 63 74 69 6f 6e 54 79 70 65 3b 0a 20 20 20 20  nctionType;.    
0320: 70 72 69 76 61 74 65 20 54 79 70 65 20 20 20 20  private Type    
0330: 20 20 20 20 20 5f 69 6e 73 74 61 6e 63 65 54 79       _instanceTy
0340: 70 65 3b 0a 20 20 20 20 70 72 69 76 61 74 65 20  pe;.    private 
0350: 44 65 6c 65 67 61 74 65 20 20 20 20 20 5f 63 61  Delegate     _ca
0360: 6c 6c 62 61 63 6b 3b 0a 0a 20 20 20 20 2f 2f 2f  llback;..    ///
0370: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
0380: 2f 2f 20 44 65 66 61 75 6c 74 20 63 6f 6e 73 74  // Default const
0390: 72 75 63 74 6f 72 2c 20 69 6e 69 74 69 61 6c 69  ructor, initiali
03a0: 7a 65 73 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  zes the internal
03b0: 20 76 61 72 69 61 62 6c 65 73 20 66 6f 72 20 74   variables for t
03c0: 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 20  he function..   
03d0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a   /// </summary>.
03e0: 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74      public SQLit
03f0: 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75  eFunctionAttribu
0400: 74 65 28 29 0a 20 20 20 20 20 20 20 20 3a 20 74  te().        : t
0410: 68 69 73 28 53 74 72 69 6e 67 2e 45 6d 70 74 79  his(String.Empty
0420: 2c 20 2d 31 2c 20 46 75 6e 63 74 69 6f 6e 54 79  , -1, FunctionTy
0430: 70 65 2e 53 63 61 6c 61 72 29 0a 20 20 20 20 7b  pe.Scalar).    {
0440: 0a 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e  .        // do n
0450: 6f 74 68 69 6e 67 2e 0a 20 20 20 20 7d 0a 0a 20  othing..    }.. 
0460: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
0470: 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75  .    /// Constru
0480: 63 74 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20  cts an instance 
0490: 6f 66 20 74 68 69 73 20 63 6c 61 73 73 2e 0a 20  of this class.. 
04a0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
04b0: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  >.    /// <param
04c0: 20 6e 61 6d 65 3d 22 6e 61 6d 65 22 3e 0a 20 20   name="name">.  
04d0: 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f    /// The name o
04e0: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2c 20  f the function, 
04f0: 61 73 20 73 65 65 6e 20 62 79 20 74 68 65 20 53  as seen by the S
0500: 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
0510: 72 79 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  ry..    /// </pa
0520: 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ram>.    /// <pa
0530: 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 75 6d 65  ram name="argume
0540: 6e 74 43 6f 75 6e 74 22 3e 0a 20 20 20 20 2f 2f  ntCount">.    //
0550: 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  / The number of 
0560: 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 74  arguments that t
0570: 68 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c  he function will
0580: 20 61 63 63 65 70 74 2e 0a 20 20 20 20 2f 2f 2f   accept..    ///
0590: 20 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f   </param>.    //
05a0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
05b0: 75 6e 63 74 69 6f 6e 54 79 70 65 22 3e 0a 20 20  unctionType">.  
05c0: 20 20 2f 2f 2f 20 54 68 65 20 74 79 70 65 20 6f    /// The type o
05d0: 66 20 66 75 6e 63 74 69 6f 6e 20 62 65 69 6e 67  f function being
05e0: 20 64 65 63 6c 61 72 65 64 2e 20 20 54 68 69 73   declared.  This
05f0: 20 77 69 6c 6c 20 65 69 74 68 65 72 20 62 65 20   will either be 
0600: 53 63 61 6c 61 72 2c 0a 20 20 20 20 2f 2f 2f 20  Scalar,.    /// 
0610: 41 67 67 72 65 67 61 74 65 2c 20 6f 72 20 43 6f  Aggregate, or Co
0620: 6c 6c 61 74 69 6f 6e 2e 0a 20 20 20 20 2f 2f 2f  llation..    ///
0630: 20 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 70 75   </param>.    pu
0640: 62 6c 69 63 20 53 51 4c 69 74 65 46 75 6e 63 74  blic SQLiteFunct
0650: 69 6f 6e 41 74 74 72 69 62 75 74 65 28 0a 20 20  ionAttribute(.  
0660: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d        string nam
0670: 65 2c 0a 20 20 20 20 20 20 20 20 69 6e 74 20 61  e,.        int a
0680: 72 67 75 6d 65 6e 74 43 6f 75 6e 74 2c 0a 20 20  rgumentCount,.  
0690: 20 20 20 20 20 20 46 75 6e 63 74 69 6f 6e 54 79        FunctionTy
06a0: 70 65 20 66 75 6e 63 74 69 6f 6e 54 79 70 65 0a  pe functionType.
06b0: 20 20 20 20 20 20 20 20 29 0a 20 20 20 20 7b 0a          ).    {.
06c0: 20 20 20 20 20 20 20 20 5f 6e 61 6d 65 20 3d 20          _name = 
06d0: 6e 61 6d 65 3b 0a 20 20 20 20 20 20 20 20 5f 61  name;.        _a
06e0: 72 67 75 6d 65 6e 74 43 6f 75 6e 74 20 3d 20 61  rgumentCount = a
06f0: 72 67 75 6d 65 6e 74 43 6f 75 6e 74 3b 0a 20 20  rgumentCount;.  
0700: 20 20 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e 54        _functionT
0710: 79 70 65 20 3d 20 66 75 6e 63 74 69 6f 6e 54 79  ype = functionTy
0720: 70 65 3b 0a 20 20 20 20 20 20 20 20 5f 69 6e 73  pe;.        _ins
0730: 74 61 6e 63 65 54 79 70 65 20 3d 20 6e 75 6c 6c  tanceType = null
0740: 3b 0a 20 20 20 20 20 20 20 20 5f 63 61 6c 6c 62  ;.        _callb
0750: 61 63 6b 20 3d 20 6e 75 6c 6c 3b 0a 20 20 20 20  ack = null;.    
0760: 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  }..    /// <summ
0770: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 54 68 65  ary>.    /// The
0780: 20 66 75 6e 63 74 69 6f 6e 27 73 20 6e 61 6d 65   function's name
0790: 20 61 73 20 69 74 20 77 69 6c 6c 20 62 65 20 75   as it will be u
07a0: 73 65 64 20 69 6e 20 53 51 4c 69 74 65 20 63 6f  sed in SQLite co
07b0: 6d 6d 61 6e 64 20 74 65 78 74 2e 0a 20 20 20 20  mmand text..    
07c0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
07d0: 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
07e0: 20 4e 61 6d 65 0a 20 20 20 20 7b 0a 20 20 20 20   Name.    {.    
07f0: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f    get { return _
0800: 6e 61 6d 65 3b 20 7d 0a 20 20 20 20 20 20 73 65  name; }.      se
0810: 74 20 7b 20 5f 6e 61 6d 65 20 3d 20 76 61 6c 75  t { _name = valu
0820: 65 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20  e; }.    }..    
0830: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20  /// <summary>.  
0840: 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72    /// The number
0850: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 68   of arguments th
0860: 69 73 20 66 75 6e 63 74 69 6f 6e 20 65 78 70 65  is function expe
0870: 63 74 73 2e 20 20 2d 31 20 69 66 20 74 68 65 20  cts.  -1 if the 
0880: 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
0890: 6e 74 73 20 69 73 20 76 61 72 69 61 62 6c 65 2e  nts is variable.
08a0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
08b0: 72 79 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 69  ry>.    public i
08c0: 6e 74 20 41 72 67 75 6d 65 6e 74 73 0a 20 20 20  nt Arguments.   
08d0: 20 7b 0a 20 20 20 20 20 20 67 65 74 20 7b 20 72   {.      get { r
08e0: 65 74 75 72 6e 20 5f 61 72 67 75 6d 65 6e 74 43  eturn _argumentC
08f0: 6f 75 6e 74 3b 20 7d 0a 20 20 20 20 20 20 73 65  ount; }.      se
0900: 74 20 7b 20 5f 61 72 67 75 6d 65 6e 74 43 6f 75  t { _argumentCou
0910: 6e 74 20 3d 20 76 61 6c 75 65 3b 20 7d 0a 20 20  nt = value; }.  
0920: 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75    }..    /// <su
0930: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 54  mmary>.    /// T
0940: 68 65 20 74 79 70 65 20 6f 66 20 66 75 6e 63 74  he type of funct
0950: 69 6f 6e 20 74 68 69 73 20 69 6d 70 6c 65 6d 65  ion this impleme
0960: 6e 74 61 74 69 6f 6e 20 77 69 6c 6c 20 62 65 2e  ntation will be.
0970: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
0980: 72 79 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 46  ry>.    public F
0990: 75 6e 63 74 69 6f 6e 54 79 70 65 20 46 75 6e 63  unctionType Func
09a0: 54 79 70 65 0a 20 20 20 20 7b 0a 20 20 20 20 20  Type.    {.     
09b0: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f 66   get { return _f
09c0: 75 6e 63 74 69 6f 6e 54 79 70 65 3b 20 7d 0a 20  unctionType; }. 
09d0: 20 20 20 20 20 73 65 74 20 7b 20 5f 66 75 6e 63       set { _func
09e0: 74 69 6f 6e 54 79 70 65 20 3d 20 76 61 6c 75 65  tionType = value
09f0: 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f  ; }.    }..    /
0a00: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20  // <summary>.   
0a10: 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
0a20: 65 66 3d 22 53 79 73 74 65 6d 2e 54 79 70 65 22  ef="System.Type"
0a30: 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61   /> object insta
0a40: 6e 63 65 20 74 68 61 74 20 64 65 73 63 72 69 62  nce that describ
0a50: 65 73 20 74 68 65 20 63 6c 61 73 73 0a 20 20 20  es the class.   
0a60: 20 2f 2f 2f 20 63 6f 6e 74 61 69 6e 69 6e 67 20   /// containing 
0a70: 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
0a80: 6f 6e 20 66 6f 72 20 74 68 65 20 61 73 73 6f 63  on for the assoc
0a90: 69 61 74 65 64 20 66 75 6e 63 74 69 6f 6e 2e 20  iated function. 
0aa0: 20 54 68 65 20 76 61 6c 75 65 20 6f 66 0a 20 20   The value of.  
0ab0: 20 20 2f 2f 2f 20 74 68 69 73 20 70 72 6f 70 65    /// this prope
0ac0: 72 74 79 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20  rty will not be 
0ad0: 75 73 65 64 20 69 66 20 74 68 65 20 3c 73 65 65  used if the <see
0ae0: 20 63 72 65 66 3d 22 43 61 6c 6c 62 61 63 6b 22   cref="Callback"
0af0: 20 2f 3e 20 70 72 6f 70 65 72 74 79 0a 20 20 20   /> property.   
0b00: 20 2f 2f 2f 20 76 61 6c 75 65 20 69 73 20 73 65   /// value is se
0b10: 74 20 74 6f 20 6e 6f 6e 2d 6e 75 6c 6c 2e 0a 20  t to non-null.. 
0b20: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0b30: 3e 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 54  >.    internal T
0b40: 79 70 65 20 49 6e 73 74 61 6e 63 65 54 79 70 65  ype InstanceType
0b50: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 67  .    {.        g
0b60: 65 74 20 7b 20 72 65 74 75 72 6e 20 5f 69 6e 73  et { return _ins
0b70: 74 61 6e 63 65 54 79 70 65 3b 20 7d 0a 20 20 20  tanceType; }.   
0b80: 20 20 20 20 20 73 65 74 20 7b 20 5f 69 6e 73 74       set { _inst
0b90: 61 6e 63 65 54 79 70 65 20 3d 20 76 61 6c 75 65  anceType = value
0ba0: 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f  ; }.    }..    /
0bb0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20  // <summary>.   
0bc0: 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
0bd0: 65 66 3d 22 44 65 6c 65 67 61 74 65 22 20 2f 3e  ef="Delegate" />
0be0: 20 74 68 61 74 20 72 65 66 65 72 73 20 74 6f 20   that refers to 
0bf0: 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
0c00: 6f 6e 20 66 6f 72 20 74 68 65 0a 20 20 20 20 2f  on for the.    /
0c10: 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20 66 75  // associated fu
0c20: 6e 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 69 73  nction.  If this
0c30: 20 70 72 6f 70 65 72 74 79 20 76 61 6c 75 65 20   property value 
0c40: 69 73 20 73 65 74 20 74 6f 20 6e 6f 6e 2d 6e 75  is set to non-nu
0c50: 6c 6c 2c 20 69 74 20 77 69 6c 6c 0a 20 20 20 20  ll, it will.    
0c60: 2f 2f 2f 20 62 65 20 75 73 65 64 20 69 6e 73 74  /// be used inst
0c70: 65 61 64 20 6f 66 20 74 68 65 20 3c 73 65 65 20  ead of the <see 
0c80: 63 72 65 66 3d 22 49 6e 73 74 61 6e 63 65 54 79  cref="InstanceTy
0c90: 70 65 22 20 2f 3e 20 70 72 6f 70 65 72 74 79 20  pe" /> property 
0ca0: 76 61 6c 75 65 2e 0a 20 20 20 20 2f 2f 2f 20 3c  value..    /// <
0cb0: 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 69 6e  /summary>.    in
0cc0: 74 65 72 6e 61 6c 20 44 65 6c 65 67 61 74 65 20  ternal Delegate 
0cd0: 43 61 6c 6c 62 61 63 6b 0a 20 20 20 20 7b 0a 20  Callback.    {. 
0ce0: 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
0cf0: 75 72 6e 20 5f 63 61 6c 6c 62 61 63 6b 3b 20 7d  urn _callback; }
0d00: 0a 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 5f  .        set { _
0d10: 63 61 6c 6c 62 61 63 6b 20 3d 20 76 61 6c 75 65  callback = value
0d20: 3b 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a  ; }.    }.  }.}.