/**
 * 状态作用域管理
 */ function _define_property(obj, key, value) {
    if (key in obj) {
        Object.defineProperty(obj, key, {
            value: value,
            enumerable: true,
            configurable: true,
            writable: true
        });
    } else {
        obj[key] = value;
    }
    return obj;
}
/**
 * 状态作用域管理器
 * 
 * 负责管理状态作用域的创建、销毁和查询
 */ export class StateScopeManager {
    /**
   * 注册状态实例到作用域
   * 
   * @param instance - 状态实例
   * @param scope - 状态作用域
   */ register(instance, scope) {
        // 如果实例已经有作用域，先移除
        const existingScope = this.instanceToScopeMap.get(instance);
        if (existingScope) {
            this.unregister(instance);
        }
        // 添加到新作用域
        if (!this.scopeMap.has(scope)) {
            this.scopeMap.set(scope, new Set());
        }
        const instances = this.scopeMap.get(scope);
        instances.add(instance);
        this.instanceToScopeMap.set(instance, scope);
    }
    /**
   * 注销状态实例
   * 
   * @param instance - 状态实例
   */ unregister(instance) {
        const scope = this.instanceToScopeMap.get(instance);
        if (!scope) {
            return;
        }
        const instances = this.scopeMap.get(scope);
        if (instances) {
            instances.delete(instance);
            // 如果作用域为空，清理映射
            if (instances.size === 0) {
                this.scopeMap.delete(scope);
            }
        }
        this.instanceToScopeMap.delete(instance);
    }
    /**
   * 根据作用域获取所有状态实例
   * 
   * @param scope - 状态作用域
   * @returns 状态实例数组
   */ getInstances(scope) {
        const instances = this.scopeMap.get(scope);
        return instances ? Array.from(instances) : [];
    }
    /**
   * 获取状态实例的作用域
   * 
   * @param instance - 状态实例
   * @returns 状态作用域，如果不存在则返回 undefined
   */ getScope(instance) {
        return this.instanceToScopeMap.get(instance);
    }
    /**
   * 销毁指定作用域的所有状态实例
   * 
   * @param scope - 状态作用域
   */ destroyScope(scope) {
        const instances = this.scopeMap.get(scope);
        if (!instances) {
            return;
        }
        // 销毁所有实例
        for (const instance of instances){
            instance.destroy();
            this.instanceToScopeMap.delete(instance);
        }
        // 清理作用域映射
        this.scopeMap.delete(scope);
    }
    /**
   * 销毁所有作用域和状态实例
   */ destroyAll() {
        // 销毁所有实例
        for (const instances of this.scopeMap.values()){
            for (const instance of instances){
                instance.destroy();
            }
        }
        // 清理所有映射
        this.scopeMap.clear();
        this.instanceToScopeMap.clear();
    }
    /**
   * 获取所有作用域
   * 
   * @returns 作用域数组
   */ getAllScopes() {
        return Array.from(this.scopeMap.keys());
    }
    /**
   * 获取作用域数量
   */ getScopeCount() {
        return this.scopeMap.size;
    }
    /**
   * 获取总实例数量
   */ getInstanceCount() {
        return this.instanceToScopeMap.size;
    }
    constructor(){
        /**
   * 作用域到状态实例的映射
   */ _define_property(this, "scopeMap", new Map());
        /**
   * 状态实例到作用域的映射（用于快速查找）
   */ _define_property(this, "instanceToScopeMap", new Map());
    }
}

//# sourceMappingURL=StateScope.js.map