TimeSeriesLibrary.TSLibrary.ConvertBlobToList C# (CSharp) Method

ConvertBlobToList() private method

This private method creates a List of TimeSeriesValue objects from the given BLOB (byte array) of time series values. The method takes parameters for a maximum number of values, an earliest date, and a latest date, so that only a portion of the BLOB might be converted to the List. This method is designed to do the operations that are common between the public methods ConvertBlobToListLimited() and ConvertBlobToListAll().
private ConvertBlobToList ( TSDateCalculator timeStepUnit, short timeStepQuantity, int timeStepCount, System.DateTime blobStartDate, System.Boolean applyLimits, int nReqValues, System.DateTime reqStartDate, System.DateTime reqEndDate, Byte blobData, List &dateValueList, int compressionCode ) : int
timeStepUnit TSDateCalculator TSDateCalculator.TimeStepUnitCode value for Minute,Hour,Day,Week,Month, Year, or Irregular
timeStepQuantity short The number of the given unit that defines the time step. /// For instance, if the time step is 6 hours long, then this value is 6. If timeStepUnit is /// Irregular, then this value is ignored.
timeStepCount int the number of time steps that are stored in the blob
blobStartDate System.DateTime The DateTime value of the first time step in the BLOB. If /// timeStepUnit is Irregular, then this value is ignored.
applyLimits System.Boolean If value is true, then nReqValues, reqStartDate, and reqEndDate will be /// used to limit the portion of the BLOB that is converted to dateValueList. If the value is false, then /// nReqValues, reqStartDate, and reqEndDate will be ignored.
nReqValues int The maximum number of time steps that should be added to dateValueList. /// If applyLimits==false, then this value is ignored.
reqStartDate System.DateTime The earliest date that will be added to dateValueList. /// If applyLimits==false, then this value is ignored.
reqEndDate System.DateTime The latest date that will be added to dateValueList. /// If applyLimits==false, then this value is ignored.
blobData Byte The BLOB (byte array) that this method will convert into a List
dateValueList List The List of TimeSeriesValues that this method will create from the BLOB.
compressionCode int a generation number that indicates what compression technique to use
return int
        private unsafe int ConvertBlobToList(
            TSDateCalculator.TimeStepUnitCode timeStepUnit, short timeStepQuantity,
            int timeStepCount, DateTime blobStartDate, Boolean applyLimits,
            int nReqValues, DateTime reqStartDate, DateTime reqEndDate,
            Byte[] blobData, ref List<TimeSeriesValue> dateValueList, int compressionCode)
        {
            int nValuesRead = 0;

            if (timeStepUnit == TSDateCalculator.TimeStepUnitCode.Irregular)
            {
                // IRREGULAR TIME SERIES

                // If we're not limiting the output list (i.e., we're returning every time step from
                // the BLOB), then set the size of the intermediate array to match the size of the BLOB.
                if (applyLimits == false)
                    nReqValues = timeStepCount;
                // Allocate an array of date/value pairs that TSBlobCoder method will fill
                TSDateValueStruct[] dateValueArray = new TSDateValueStruct[nReqValues];
                // Method in the TSBlobCoder class does the real work
                nValuesRead = TSBlobCoder.ConvertBlobToArrayIrregular(timeStepCount, applyLimits,
                                    nReqValues, reqStartDate, reqEndDate,
                                    blobData, dateValueArray, compressionCode);
                // resize the array so that the List that we make from it will have exactly the right size
                if(nValuesRead!=nReqValues)
                    Array.Resize<TSDateValueStruct>(ref dateValueArray, nValuesRead);
                // Convert the array of date/value pairs into the List that will be used by the caller
                dateValueList = dateValueArray
                        .Select(tsv => (TimeSeriesValue)tsv).ToList<TimeSeriesValue>();
            }
            else
            {
                // REGULAR TIME SERIES

                // If we're not limiting the output list (i.e., we're returning every time step from
                // the BLOB), then set the size of the intermediate array to match the size of the BLOB.
                if (applyLimits == false)
                    nReqValues = timeStepCount;
                // Allocate an array of values that TSBlobCoder method will fill
                double[] valueArray = new double[nReqValues];
                // Method in the TSBlobCoder class does the real work
                nValuesRead = TSBlobCoder.ConvertBlobToArrayRegular(timeStepUnit, timeStepQuantity,
                                     timeStepCount, blobStartDate, applyLimits,
                                     nReqValues, reqStartDate, reqEndDate,
                                     blobData, valueArray, compressionCode);
                // Allocate an array to hold the time series' date values
                DateTime[] dateArray = new DateTime[nValuesRead];
                // Fill the array with the date values corresponding to the time steps defined
                // for this time series in the database.
                TSDateCalculator.FillDateArray(timeStepUnit, timeStepQuantity, nValuesRead, dateArray, reqStartDate);
                // Allocate a List of date/value pairs that will be used by the caller
                dateValueList = new List<TimeSeriesValue>(nValuesRead);
                // Loop through all values, building the List of date/value pairs out of the
                // primitive array of dates and primitive array of values.
                int i;
                for (i = 0; i < nValuesRead; i++)
                {
                    dateValueList.Add(new TimeSeriesValue { Date = dateArray[i], Value = valueArray[i] });
                }
                nValuesRead = i;
            }
            return nValuesRead;
        }