public override bool Equals(object obj) { if (obj == null) { return(false); } if (ReferenceEquals(this, obj)) { return(true); } if (!(obj is BSONRegexp)) { return(false); } BSONRegexp other = (BSONRegexp)obj; return(_re == other._re && _opts == other._opts); }
protected void WriteBSONValue(BSONValue bv, ExtBinaryWriter bw) { BSONType bt = bv.BSONType; switch (bt) { case BSONType.EOO: break; case BSONType.NULL: case BSONType.UNDEFINED: case BSONType.MAXKEY: case BSONType.MINKEY: WriteTypeAndKey(bv, bw); break; case BSONType.OID: { WriteTypeAndKey(bv, bw); BSONOid oid = (BSONOid)bv.Value; Debug.Assert(oid._bytes.Length == 12); bw.Write(oid._bytes); break; } case BSONType.STRING: case BSONType.CODE: case BSONType.SYMBOL: WriteTypeAndKey(bv, bw); bw.WriteBSONString((string)bv.Value); break; case BSONType.BOOL: WriteTypeAndKey(bv, bw); bw.Write((bool)bv.Value); break; case BSONType.INT: WriteTypeAndKey(bv, bw); bw.Write((int)bv.Value); break; case BSONType.LONG: WriteTypeAndKey(bv, bw); bw.Write((long)bv.Value); break; case BSONType.ARRAY: case BSONType.OBJECT: { BSONDocument doc = (BSONDocument)bv.Value; WriteTypeAndKey(bv, bw); doc.Serialize(bw.BaseStream); break; } case BSONType.DATE: { DateTime dt = (DateTime)bv.Value; var diff = dt.ToLocalTime() - BSONConstants.Epoch; long time = (long)Math.Floor(diff.TotalMilliseconds); WriteTypeAndKey(bv, bw); bw.Write(time); break; } case BSONType.DOUBLE: WriteTypeAndKey(bv, bw); bw.Write((double)bv.Value); break; case BSONType.REGEX: { BSONRegexp rv = (BSONRegexp)bv.Value; WriteTypeAndKey(bv, bw); bw.WriteCString(rv.Re ?? ""); bw.WriteCString(rv.Opts ?? ""); break; } case BSONType.BINDATA: { BSONBinData bdata = (BSONBinData)bv.Value; WriteTypeAndKey(bv, bw); bw.Write(bdata.Data.Length); bw.Write(bdata.Subtype); bw.Write(bdata.Data); break; } case BSONType.DBREF: //Unsupported DBREF! break; case BSONType.TIMESTAMP: { BSONTimestamp ts = (BSONTimestamp)bv.Value; WriteTypeAndKey(bv, bw); bw.Write(ts.Inc); bw.Write(ts.Ts); break; } case BSONType.CODEWSCOPE: { BSONCodeWScope cw = (BSONCodeWScope)bv.Value; WriteTypeAndKey(bv, bw); using (var cwwr = new ExtBinaryWriter(new MemoryStream())) { cwwr.WriteBSONString(cw.Code); cw.Scope.Serialize(cwwr.BaseStream); byte[] cwdata = ((MemoryStream)cwwr.BaseStream).ToArray(); bw.Write(cwdata.Length); bw.Write(cwdata); } break; } default: throw new InvalidBSONDataException("Unknown entry type: " + bt); } }
public BSONDocument SetRegexp(string key, BSONRegexp val) { return(SetBSONValue(new BSONValue(BSONType.REGEX, key, val))); }
public void TestIterateRE() { var doc = new BSONDocument(); doc["a"] = new BSONRegexp("b", "c"); doc["d"] = 1; doc["e"] = BSONDocument.ValueOf(new {f = new BSONRegexp("g", "")}); doc["h"] = 2; //28-00-00-00 //0B-61-00-62-00-63-00 //10-64-00-01-00-00-00 //03-65-00-0B-00-00-00 //0B-66-00-67-00-00-00 //10-68-00-02-00-00-00-00 var cs = ""; foreach (var bt in new BSONIterator(doc)) { cs += bt.ToString(); } Assert.AreEqual("REGEXINTOBJECTINT", cs); cs = ""; foreach (var bv in new BSONIterator(doc).Values()) { if (bv.Key == "a") { cs += ((BSONRegexp) bv.Value).Re; cs += ((BSONRegexp) bv.Value).Opts; } else { cs += bv.Value; } } Assert.AreEqual("bc1[BSONDocument: [BSONValue: BSONType=REGEX, Key=f, Value=[BSONRegexp: re=g, opts=]]]2", cs); }
public BSONDocument SetRegexp(int idx, BSONRegexp val) { return(base.SetRegexp(idx.ToString(), val)); }
public BSONDocument SetRegexp(int idx, BSONRegexp val) { return base.SetRegexp(idx.ToString(), val); }
public BSONArray(BSONRegexp[] arr) { for (var i = 0; i < arr.Length; ++i) { SetRegexp(i, arr[i]); } }