using System;

namespace Ingvar.LiveWatch
{
    public partial struct WatchReference<T>
    {
        public WatchReference<double> GetOrAdd(string path, Func<double> valueGetter)
        {
            return Watch.GetOrAdd(this, path, valueGetter);
        }
        
        public WatchReference<float> GetOrAdd(string path, Func<float> valueGetter)
        {
            return Watch.GetOrAdd(this, path, valueGetter);
        }
        
        public WatchReference<int> GetOrAdd(string path, Func<int> valueGetter)
        {
            return Watch.GetOrAdd(this, path, valueGetter);
        }
        
        public WatchReference<string> GetOrAdd(string path, Func<string> valueGetter)
        {
            return Watch.GetOrAdd(this, path, valueGetter);
        }
        
        public WatchReference<bool> GetOrAdd(string path, Func<bool> valueGetter)
        {
            return Watch.GetOrAdd(this, path, valueGetter);
        }
        
        public WatchReference<decimal> GetOrAdd(string path, Func<decimal> valueGetter)
        {
            return Watch.GetOrAdd(this, path, valueGetter);
        }
        
        public WatchReference<long> GetOrAdd(string path, Func<long> valueGetter)
        {
            return Watch.GetOrAdd(this, path, valueGetter);
        }
        
        public WatchReference<short> GetOrAdd(string path, Func<short> valueGetter)
        {
            return Watch.GetOrAdd(this, path, valueGetter);
        }
        
        public WatchReference<byte> GetOrAdd(string path, Func<byte> valueGetter)
        {
            return Watch.GetOrAdd(this, path, valueGetter);
        }
        
        public WatchReference<ulong> GetOrAdd(string path, Func<ulong> valueGetter)
        {
            return Watch.GetOrAdd(this, path, valueGetter);
        }
        
        public WatchReference<ushort> GetOrAdd(string path, Func<ushort> valueGetter)
        {
            return Watch.GetOrAdd(this, path, valueGetter);
        }
        
        public WatchReference<sbyte> GetOrAdd(string path, Func<sbyte> valueGetter)
        {
            return Watch.GetOrAdd(this, path, valueGetter);
        }
        
        public WatchReference<char> GetOrAdd(string path, Func<char> valueGetter)
        {
            return Watch.GetOrAdd(this, path, valueGetter);
        }
    }
}