Ejemplo n.º 1
0
        public T AssignId <T>(IdContext_I context, T objectToAssign)
            where T : Ided_I
        {
            AssignId(context, (Ided_I)objectToAssign);

            return(objectToAssign);
        }
Ejemplo n.º 2
0
        public Id_I IssueId(IdContext_I context)
        {
            StandardId standardId = new StandardId();

            IssueId(context, standardId);

            return(standardId);
        }
Ejemplo n.º 3
0
        public Ided_I AssignId(IdContext_I context, Ided_I objectToAssign)
        {
            IssueId(context, out Id_I id);

            objectToAssign.Id = id;

            return(objectToAssign);
        }
Ejemplo n.º 4
0
        public bool IssueId <T>(IdContext_I context, out T id)
            where T : Identifier_I
        {
            lock (context.SyncRoot)
            {
                id = XNew.New <T>();

                return(IssueId <T>(context, id));
            }
        }
Ejemplo n.º 5
0
        public AvailableIdRange_I IssueNextAvailableRange(IdContext_I context)
        {
            var newRange = IssueRange(context, context.DefaultIdRangeSize);

            var availableRange = new AvailableIdRange()
            {
                LastIssuedId   = newRange.StartInclusive - 1,
                StartInclusive = newRange.StartInclusive,
                EndInclusive   = newRange.EndInclusive
            };

            context.AvailableRange = availableRange;

            return(availableRange);
        }
Ejemplo n.º 6
0
        public bool IssueId <T>(IdContext_I context, T identifier)
            where T : Identifier_I
        {
            lock (context.SyncRoot)
            {
                bool availableRangeUpdated = false;

                if (context.AvailableRange == null || context.AvailableRange.LastIssuedId >= context.AvailableRange.EndInclusive || context.AvailableRange.StartInclusive == 0 || context.AvailableRange.EndInclusive == 0)
                {
                    context.AvailableRange = IssueNextAvailableRange(context);

                    XSettings.SetAndPersist(LastIdIssuedKey, context.AvailableRange.EndInclusive.ToString());

                    availableRangeUpdated = true;
                }

                identifier.Value = (++context.AvailableRange.LastIssuedId);

                return(availableRangeUpdated);
            }
        }
Ejemplo n.º 7
0
        public void Initialize(IdContext_I context)
        {
            if (XSettings.GetString(LastIdIssuedKey, out string lastIdIssued) &&
                !string.IsNullOrEmpty(lastIdIssued) &&
                Int64.TryParse(lastIdIssued, out long lastId))
            {
                context.AvailableRange = new AvailableIdRange()
                {
                    LastIssuedId = lastId
                };

                return;
            }

            XSettings.SetAndPersist(LastIdIssuedKey, "0");

            context.AvailableRange = new AvailableIdRange()
            {
                LastIssuedId = 0
            };
        }
Ejemplo n.º 8
0
        public IdRange_I IssueRange(IdContext_I context, int size)
        {
            lock (context.SyncRoot)
            {
                var lastIdentifierIssued = context.AvailableRange.LastIssuedId;

                var start = lastIdentifierIssued + 1;

                var stop = start - 1 + size;

                var range = new IdRange()
                {
                    EndInclusive   = stop,
                    StartInclusive = start
                };

                context.AvailableRange.LastIssuedId = range.EndInclusive;

                return(range);
            }
        }