Exemple #1
0
        public static IMd Locate(MdLocator locator, int level = 0)
        {
            var xorString = GetString(locator);

            using (var db = GetRocksDb())
            {
                var metaKey = $"{xorString}_0"; // entry 0
                var column  = db.GetColumnFamily(COLUMN_FAMILY);
                var value   = db.Get(metaKey, cf: column);
                if (value == null) // if not found, create with level 0
                {
                    var data = new LocalMdData
                    {
                        Locator       = locator,
                        LocatorString = xorString,
                        Level         = level
                    };
                    value = data.Json();
                    db.Put(metaKey, new StoredValue(level).Json(), cf: column); // store level 0
                    return(new LocalMd(data));
                }
                else
                {
                    var existing = new LocalMdData
                    {
                        Locator       = locator,
                        LocatorString = xorString,
                        Level         = value.Parse <StoredValue>().Payload.Parse <int>()
                    };

                    int.TryParse(db.Get($"{xorString}_Count", cf: column), out existing.Count);

                    return(new LocalMd(existing));
                }
            }
        }
Exemple #2
0
 private LocalMd(LocalMdData data)
 {
     _data = data;
     Count = data.Count;
 }