/*
 * 版权属于：yitter(yitter@126.com)
 * 开源地址：https://gitee.com/yitter/idgenerator
 */
module yitter.idgen.YitIdHelper;

import yitter.idgen.DefaultIdGenerator;

import yitter.contract.IIdGenerator;
import yitter.contract.IdGeneratorException;
import yitter.contract.IdGeneratorOptions;

import std.concurrency : initOnce;

/**
 * 这是一个调用的例子，默认情况下，单机集成者可以直接使用 nextId()。
 */
class YitIdHelper {

    private __gshared IIdGenerator idGenInstance = null;

    static IIdGenerator getIdGenInstance() {
        return initOnce!idGenInstance(new DefaultIdGenerator(new IdGeneratorOptions(1)));

    }

    /**
     * 设置参数，建议程序初始化时执行一次
     */
    static void setIdGenerator(IdGeneratorOptions options) {
        idGenInstance = new DefaultIdGenerator(options);
    }

    /**
     * 生成新的Id
     * 调用本方法前，请确保调用了 SetIdGenerator 方法做初始化。
     *
     * @return
     */
    static long nextId() {
        return getIdGenInstance().newLong();
    }
}
