/*
 * このクラスは 'AbstractSampleCache' の具象クラスとして blanco Framework によって自動生成されました。
 */
package sample.cache;

import java.util.Map;

import blanco.fw.BlancoGeneratedBy;

/**
 * メソッド・キャッシュをおこなうソースコードを自動生成するサンプル。
 */
@BlancoGeneratedBy(name = "Blanco2g")
public class SampleCache extends AbstractSampleCache {
    /**
     * [@BlancoCache] Cache object for method 'methodWithHighCost'.
     */
    private final Map<String, java.lang.ref.SoftReference<java.lang.String>> blanco2gCacheMethodmethodWithHighCost = java.util.Collections.synchronizedMap(new java.util.HashMap<java.lang.String, java.lang.ref.SoftReference<java.lang.String>>(8192));

    /**
     * キャッシュをおこないたい、処理コストの高いメソッド。
     *
     * @param arg1 引数その１
     * @param arg2 引数その２
     * @return  メソッドの戻り値。ただしキャッシュにヒットした場合は前回のメソッド呼び出し時の実行結果。
     */
    public String methodWithHighCost(String arg1, String arg2) {
        java.lang.String autoValMethodResult;
        // [@BlancoCache] Search cache.
        final java.lang.ref.SoftReference<java.lang.String> autoValMethodResultCacheReference = blanco2gCacheMethodmethodWithHighCost.get("" + arg1 + "\t" + arg2 + "");
        if (autoValMethodResultCacheReference != null) {
            autoValMethodResult = autoValMethodResultCacheReference.get();
            if (autoValMethodResult != null) {
                // Hit cache.
                return autoValMethodResult;
            }
        }
        autoValMethodResult = super.methodWithHighCost(arg1, arg2);
        // [@BlancoCache] Remember cache.
        blanco2gCacheMethodmethodWithHighCost.put("" + arg1 + "\t" + arg2 + "", new java.lang.ref.SoftReference<java.lang.String>(autoValMethodResult));
        return autoValMethodResult;
    }
}
