|
|
@@ -6,16 +6,39 @@ import (
|
|
|
"sync"
|
|
|
|
|
|
mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
|
|
|
- mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
|
|
|
+ "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
|
|
|
|
|
|
"gitp78su.ipnodns.ru/svi/kern/v4/lev0/voc/etime"
|
|
|
- "gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
|
|
|
- "gitp78su.ipnodns.ru/svi/kern/v4/lev1/ctx_value"
|
|
|
+ "gitp78su.ipnodns.ru/svi/kern/v4/lev1/local_ctx/ctx_value"
|
|
|
"gitp78su.ipnodns.ru/svi/kern/v4/lev1/log_buf"
|
|
|
+ "gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
|
|
|
"gitp78su.ipnodns.ru/svi/kern/v4/lev1/lst_sort"
|
|
|
"gitp78su.ipnodns.ru/svi/kern/v4/lev1/safe_bool"
|
|
|
)
|
|
|
|
|
|
+// ILocalCtx -- локальный контекст.
|
|
|
+type ILocalCtx interface {
|
|
|
+ core_spec.IRWMutex
|
|
|
+ // Get -- извлекает значение из контекста
|
|
|
+ Get(key string) core_spec.IOption[comp_spec.ICtxValue]
|
|
|
+ // Del -- удаляет значение из контекста
|
|
|
+ Del(key string)
|
|
|
+ // Set -- добавляет значение в контекст
|
|
|
+ Set(key string, val any, comment string)
|
|
|
+ // Size -- возвращает размер словаря контекста
|
|
|
+ Size() int
|
|
|
+ // SortedList -- возвращает сортированный список объектов контекста
|
|
|
+ SortedList() []comp_spec.ICtxValue
|
|
|
+ // Cancel -- отменяет контекст
|
|
|
+ Cancel()
|
|
|
+ // Wait -- ожидает отмены контекста
|
|
|
+ Wait()
|
|
|
+ // Log -- возвращает буфер сообщений
|
|
|
+ Log() log_buf.ILogBuf
|
|
|
+ // Ctx -- возвращает хранимый контекст
|
|
|
+ Ctx() context.Context
|
|
|
+}
|
|
|
+
|
|
|
// LocalCtx -- локальный контекст.
|
|
|
type LocalCtx struct {
|
|
|
sync.RWMutex
|
|
|
@@ -28,7 +51,7 @@ type LocalCtx struct {
|
|
|
}
|
|
|
|
|
|
// NewLocalCtx -- возвращает новый локальный контекст.
|
|
|
-func NewLocalCtx(ctx context.Context) comp_spec.ILocalCtx {
|
|
|
+func NewLocalCtx(ctx context.Context) ILocalCtx {
|
|
|
mL0.Hassert(ctx != nil, "NewLocalCtx(): ctx==nil")
|
|
|
_ctx, fnCancel := context.WithCancel(ctx)
|
|
|
paramLogBuf := &log_buf.LogBufParam{
|
|
|
@@ -38,7 +61,7 @@ func NewLocalCtx(ctx context.Context) comp_spec.ILocalCtx {
|
|
|
sf := &LocalCtx{
|
|
|
ctx: _ctx,
|
|
|
fnCancel: fnCancel,
|
|
|
- dictVal: map[string]mKs.ICtxValue{},
|
|
|
+ dictVal: map[string]comp_spec.ICtxValue{},
|
|
|
lstSort: lst_sort.NewLstSort(),
|
|
|
log: log_buf.NewLogBuf(paramLogBuf),
|
|
|
}
|
|
|
@@ -58,26 +81,26 @@ func (sf *LocalCtx) Size() int {
|
|
|
}
|
|
|
|
|
|
// SortedList -- возвращает сортированный список значений.
|
|
|
-func (sf *LocalCtx) SortedList() []mKs.ICtxValue {
|
|
|
+func (sf *LocalCtx) SortedList() []comp_spec.ICtxValue {
|
|
|
return sf.lstSort.List()
|
|
|
}
|
|
|
|
|
|
// Log -- возвращает локальный буферный лог.
|
|
|
-func (sf *LocalCtx) Log() mKs.ILogBuf {
|
|
|
+func (sf *LocalCtx) Log() comp_spec.ILogBuf {
|
|
|
return sf.log
|
|
|
}
|
|
|
|
|
|
// Get -- возвращает хранимое значение.
|
|
|
-func (sf *LocalCtx) Get(key string) mL0.IOption[mKs.ICtxValue] {
|
|
|
+func (sf *LocalCtx) Get(key string) mL0.IOption[comp_spec.ICtxValue] {
|
|
|
sf.RLock()
|
|
|
defer sf.RUnlock()
|
|
|
if key == "" {
|
|
|
- return mL0.NewNone[mKs.ICtxValue]()
|
|
|
+ return mL0.NewNone[comp_spec.ICtxValue]()
|
|
|
}
|
|
|
sf.log.Debug("Get(): key='%v'", key)
|
|
|
val, isOk := sf.dictVal[key]
|
|
|
if !isOk {
|
|
|
- return mL0.NewNone[mKs.ICtxValue]()
|
|
|
+ return mL0.NewNone[comp_spec.ICtxValue]()
|
|
|
}
|
|
|
return mL0.NewSome(val)
|
|
|
}
|