public IEnumerable <string> GetContaining(string key)
        {
            key = KeyCharSubstitutor.Convert(key);

            foreach (var file in DI.GetFiles("*" + key + "*"))
            {
                var keyItem = file.Name.Replace(suffix, "");
                yield return(Get(keyItem));
            }
        }
        public bool Exists(string key)
        {
            key = KeyCharSubstitutor.Convert(key);

            if (_GetFileInfo(key).Exists)
            {
                return(true);
            }
            return(false);
        }
        public IEnumerable <string> GetKeysStartingWith(string key)
        {
            key = KeyCharSubstitutor.Convert(key);

            foreach (var file in DI.GetFiles(key + "*"))
            {
                var keyItem = file.Name.Replace(suffix, "");
                keyItem = KeyCharSubstitutor.ConvertBack(keyItem);
                yield return(keyItem);
            }
        }
        public void Remove(string key)
        {
            key = KeyCharSubstitutor.Convert(key);

            var fi = _GetFileInfo(key);

            if (fi.Exists)
            {
                fi.Delete();
            }
        }
        public void Set(string key, string value)
        {
            key = KeyCharSubstitutor.Convert(key);

            var fi = _GetFileInfo(key);

            if (fi.Exists)
            {
                fi.Delete();
            }

            using (var fs = fi.CreateText())
            {
                fs.Write(value);
            }
        }
        public string Get(string key)
        {
            key = KeyCharSubstitutor.Convert(key);

            var fi = _GetFileInfo(key);

            if (!fi.Exists)
            {
                return(null);
            }

            using (var sr = fi.OpenText())
            {
                return(sr.ReadToEnd());
            }
        }
        public void Set(string key, string value, ulong cas)
        {
            key = KeyCharSubstitutor.Convert(key);

            var fi     = _GetFileInfo(casPrefix + key, true);
            var fiLock = _GetFileInfo(lockPrefix + key, true);

            if (!fi.Exists)
            {
                fi.Create().Dispose();
            }

            using (var swLock = fiLock.Create())
            {
                ulong readCasVal = 0;

                //get current cas
                byte[] bytes = null;
                using (var srCAS = fi.OpenRead())
                {
                    bytes = new byte[srCAS.Length];
                    srCAS.Read(bytes, 0, (int)srCAS.Length);
                }
                using (var swCAS = fi.OpenWrite())
                {
                    swCAS.Seek(0, SeekOrigin.Begin);

                    if (bytes.Count() > 0)
                    {
                        readCasVal = BitConverter.ToUInt64(bytes, 0);
                    }

                    if (readCasVal != cas)
                    {
                        throw new CASException("CAS expired");
                    }

                    //do our actual set operation
                    Set(key, value);

                    var bytesToWrite = BitConverter.GetBytes(cas + 1);
                    swCAS.Write(bytesToWrite, 0, bytesToWrite.Count());
                    swCAS.Flush();
                }
            }
            fiLock.Delete();
        }
        public void Append(string key, string value)
        {
            key = KeyCharSubstitutor.Convert(key);

            var fi = _GetFileInfo(key);

            if (!fi.Exists)
            {
                fi.Create().Dispose();
            }

            using (var fs = fi.OpenWrite())
            {
                fs.Seek(fs.Length, SeekOrigin.Begin);
                byte[] bytes = Encoding.UTF8.GetBytes(value);
                fs.Write(bytes, 0, bytes.Length);
            }
        }
        public string Get(string key, out ulong cas)
        {
            key = KeyCharSubstitutor.Convert(key);

            var fi = _GetFileInfo(casPrefix + key, true);

            if (fi.Exists)
            {
                using (var sr = fi.OpenRead())
                {
                    byte[] bytes = new byte[sr.Length];
                    sr.Read(bytes, 0, (int)sr.Length);

                    if (bytes.Length > 0)
                    {
                        try
                        {
                            cas = BitConverter.ToUInt64(bytes, 0);
                        }
                        catch (Exception ex)
                        {
                            throw new Exception("Data for key " + casPrefix + key + " is not CAS data", ex);
                        }
                    }
                    else
                    {
                        cas = 0;
                    }
                }
            }
            else
            {
                cas = 0;
            }

            return(this.Get(key));
        }
 public ulong GetNextSequenceValue(string key, int increment)
 {
     key = KeyCharSubstitutor.Convert(key);
     return(IStoreProviderInternalHelpers.GetNextSequenceValueViaCAS(this, key, increment));
 }
        public int CountContaining(string key)
        {
            key = KeyCharSubstitutor.Convert(key);

            return(DI.GetFiles("*" + key + "*").Count());
        }
        public int CountStartingWith(string key)
        {
            key = KeyCharSubstitutor.Convert(key);

            return(DI.GetFiles(key + "*").Count());
        }