public void FillDateArray( TSDateCalculator.TimeStepUnitCode timeStepUnit, short timeStepQuantity, int nReqValues, DateTime[] dateArray, DateTime reqStartDate) { TSDateCalculator.FillDateArray(timeStepUnit, timeStepQuantity, nReqValues, dateArray, reqStartDate); }
/// <summary> /// Method fills in the values of the given array of DateTime values with the dates for /// each time step in the time series that matches the given ID. The array is filled /// starting at the given start date, or the start date of the database record, whichever /// is earliest. The array is filled up the the given number of values. /// </summary> /// <param name="id">ID of the time series</param> /// <param name="nReqValues">number of values requested to be filled</param> /// <param name="dateArray">array requested to fill with values</param> /// <param name="reqStartDate">start date requested</param> public unsafe void FillDateArray(int id, int nReqValues, DateTime[] dateArray, DateTime reqStartDate) { // Initialize class fields if (!IsInitialized) { Initialize(id); } int i; DateTime revisedStartDate; // The time steps boundaries are defined by the database record, so // we can't rely on the reqStartDate to have the correct time step boundary. // Therefore, begin counting at the first date in the database record. if (reqStartDate > BlobStartDate) { i = TSDateCalculator.CountSteps(BlobStartDate, reqStartDate, TimeStepUnit, TimeStepQuantity); revisedStartDate = TSDateCalculator.IncrementDate(BlobStartDate, TimeStepUnit, TimeStepQuantity, i); } else { revisedStartDate = BlobStartDate; } TSDateCalculator.FillDateArray(TimeStepUnit, TimeStepQuantity, nReqValues, dateArray, revisedStartDate); }
/// <summary> /// 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(). /// </summary> /// <param name="timeStepUnit">TSDateCalculator.TimeStepUnitCode value for Minute,Hour,Day,Week,Month, Year, or Irregular</param> /// <param name="timeStepQuantity">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.</param> /// <param name="timeStepCount">the number of time steps that are stored in the blob</param> /// <param name="blobStartDate">The DateTime value of the first time step in the BLOB. If /// timeStepUnit is Irregular, then this value is ignored.</param> /// <param name="applyLimits">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.</param> /// <param name="nReqValues">The maximum number of time steps that should be added to dateValueList. /// If applyLimits==false, then this value is ignored.</param> /// <param name="reqStartDate">The earliest date that will be added to dateValueList. /// If applyLimits==false, then this value is ignored.</param> /// <param name="reqEndDate">The latest date that will be added to dateValueList. /// If applyLimits==false, then this value is ignored.</param> /// <param name="blobData">The BLOB (byte array) that this method will convert into a List</param> /// <param name="dateValueList">The List of TimeSeriesValues that this method will create from the BLOB.</param> /// <param name="compressionCode">a generation number that indicates what compression technique to use</param> /// <returns>The number of time steps added to dateValueList</returns> 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); }