// 
// Decompiled by Procyon v0.6.0
// 

package io.sentry.util;

import io.sentry.ISentryLifecycleToken;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.ApiStatus;

@ApiStatus.Internal
public final class LazyEvaluator<T>
{
    @Nullable
    private volatile T value;
    @NotNull
    private final Evaluator<T> evaluator;
    @NotNull
    private final AutoClosableReentrantLock lock;
    
    public LazyEvaluator(@NotNull final Evaluator<T> evaluator) {
        this.value = null;
        this.lock = new AutoClosableReentrantLock();
        this.evaluator = evaluator;
    }
    
    @NotNull
    public T getValue() {
        if (this.value == null) {
            try (final ISentryLifecycleToken ignored = this.lock.acquire()) {
                if (this.value == null) {
                    this.value = this.evaluator.evaluate();
                }
            }
        }
        return this.value;
    }
    
    public void setValue(@Nullable final T value) {
        try (final ISentryLifecycleToken ignored = this.lock.acquire()) {
            this.value = value;
        }
    }
    
    public void resetValue() {
        try (final ISentryLifecycleToken ignored = this.lock.acquire()) {
            this.value = null;
        }
    }
    
    public interface Evaluator<T>
    {
        @NotNull
        T evaluate();
    }
}
