Example #1
0
        /// <summary>
        /// Add the next set of values; return the ID that was allocated.
        /// </summary>
        /// <remarks>
        /// This only supports appending all the sets of values ID by ID in order.
        /// TODO: allow more flexible building.
        /// </remarks>
        public virtual TId Add(ReadOnlySpan <TValue> multiValues)
        {
            if (BaseTableOpt != null && SingleValues.Count == BaseTableOpt.Count)
            {
                throw new Exception("Can't add to end of a table that has already been filled");
            }

            if (SingleValues.Count > 0)
            {
                Offsets.Add(Offsets[Count - 1] + SingleValues[Count - 1]);
            }
            else
            {
                Offsets.Add(0);
            }

            SingleValues.Add(multiValues.Length);

            MultiValues.AddRange(multiValues);

            return(default(TId).CreateFrom(Count));
        }
Example #2
0
        /// <summary>
        /// Add the next set of values; return the ID that was allocated.
        /// </summary>
        /// <remarks>
        /// This only supports appending all the sets of values ID by ID in order.
        /// TODO: allow more flexible building.
        /// </remarks>
        public virtual TId Add(ReadOnlySpan <TValue> multiValues)
        {
            if (SingleValues.Count > 0)
            {
                Offsets.Add(Offsets[Count - 1] + SingleValues[Count - 1]);
            }
            else
            {
                Offsets.Add(0);
            }

            SingleValues.Add(multiValues.Length);

            MultiValues.AddRange(multiValues);

            return(default(TId).ToId(Count));
        }