DateLog Public API Reference

Complete C header file declaration for datelog.h - Date log management library

Overview

datelog.h is the public API header for the MDTS Date Log library. It provides comprehensive functionality for managing date collections, handling market trading day validation, and performing date range operations with support for holidays and weekends.

Key Capabilities

Header File Location

C:\mdts_date\datelog.h

Dependencies

Required Includes

#ifndef _WINDOWS_
#error Microsoft header file <Windows.h> is required for this library.
#endif

#if WINVER < _WIN32_WINNT_WIN10
#error Windows 10 or later is required for this library.
#endif

#include <Windows.h>
#include <sqltypes.h>
#include "mdts_io_.h"
#include "date_item.h"
Platform Requirements: This library requires Windows 10 or later. The header enforces this requirement at compile time.

Type Definitions & Opaque Handles

Handle Types

All handles in this library are opaque pointers, providing type safety through distinct typedefs:

typedef void* DATE_LOG_HANDLE;

Handle to a complete date log collection with all operations.

typedef void* DATE_RANGE_HANDLE;

Handle to a date range subset (typically temporary or for merge operations).

typedef void* HOLIDAYS_HANDLE;

Handle to a market holidays collection for market day validation.

typedef void* DATE_COLLECTION_HANDLE;

Generic collection handle (can be any of the above types).

typedef void* DATE_ITEM_HANDLE;

Handle to an individual date item within a collection.

Opaque Handles: All handles are opaque void pointers. The actual structure definitions are internal to the library and not exposed in the public API. This provides ABI stability and implementation flexibility.

Enumerations

DateHandleType

Specifies the type of handle to create when initializing a date log:

typedef enum {
    HandleIsForDatelog = 1,     // Complete date log collection
    HandleIsForRange,           // Date range subset
    HandleIsForHolidays         // Market holidays collection
} DateHandleType;

DateGapSpec

Controls how gap calculations include or exclude date boundaries:

typedef enum {
    InclusiveDateGap,           // Both start and end dates included in gap
    ExclusiveDateGap            // Only dates between start and end included
} DateGapSpec;

Constants & Macros

Sizing Constants

Constant Value Description
DATE_LOG_MAX 0x591C8 (370,120) Maximum number of date items in a collection
DAY_IN_MILLISECONDS 0xC92A69C000 100-nanosecond intervals in one day (for FILETIME/LARGE_INTEGER arithmetic)

Merge Flags

Flag Value Description
DATE_RANGE_MERGE_FAVOR_DEST 0x04 Keep destination GUIDs when dates overlap during merge
DATE_RANGE_MERGE_FAVOR_SOURCE 0x08 Use source GUIDs when dates overlap during merge
DATE_RANGE_MERGE_RESTORE_ON_FAILURE 0x10 Restore original state if merge fails (when file info present)

Alignment Macros

#define ALIGN_DOWN(x, align) ((x) / (align) * (align))
#define ALIGN_UP(x, align) (((x) + (align) - 1) / (align) * (align))

Date Log Handle Management

Exported Functions

InitializeDateLogHandle

Creates and initializes a new date log handle.

HRESULT _Must_inspect_result_ _Success_(SUCCEEDED(return)) InitializeDateLogHandle(     _In_opt_ PSECURITY_ATTRIBUTES pSecAttr,     _In_opt_ const DWORD dwMaximumLength,     _In_opt_ HOLIDAYS_HANDLE hHolidays,     _Out_ DATE_LOG_HANDLE* hDateLogHandle,     _In_ DateHandleType HandleType );

DuplicateDateLogHandle

Creates a new handle referencing the same shared context for concurrent access.

HRESULT _Must_inspect_result_ _Success_(SUCCEEDED(return)) DuplicateDateLogHandle(     _In_ DATE_LOG_HANDLE hSourceHandle,     _Out_ DATE_LOG_HANDLE* lpTargetHandle );

CloseDateLogHandle

Frees resources and closes a handle.

HRESULT _Success_(SUCCEEDED(return)) CloseDateLogHandle(     _In_ _Post_invalid_ DATE_LOG_HANDLE hDateLogHandle );

Date Item Creation & Initialization

Exported Functions

InitializeDateItem

Creates and validates a new date item from FILETIME or LARGE_INTEGER.

HRESULT _Must_inspect_result_ _Success_(hDateItem != NULL && SUCCEEDED(return)) InitializeDateItem(     _In_ _Pre_valid_ DATE_LOG_HANDLE hDateLogHandle,     _In_opt_ PFILETIME pFileTime,     _In_opt_ PLARGE_INTEGER pLargeInteger,     _Out_ DATE_ITEM_HANDLE* hDateItem );

GetMostRecentCallendarMarketDate

Returns the most recent market trading day from the system calendar.

HRESULT _Must_inspect_result_ _Success_(SUCCEEDED(return)) GetMostRecentCallendarMarketDate(     _In_ DATE_LOG_HANDLE hDateLog,     _Out_ DATE_ITEM_HANDLE* hDateItem );

FreeDateItem

Frees resources allocated for a date item.

void FreeDateItem(     _In_ _Post_invalid_ DATE_ITEM_HANDLE hDateItem );

Date Log Loading & Merging

Exported Functions

LoadDateLogHandle

Generates or extends a date collection with dates from file or range.

HRESULT _Must_inspect_result_ _Success_(SUCCEEDED(return)) LoadDateLogHandle(     _In_opt_ PFILE_INFO pFileInfo,     _In_opt_ DATE_ITEM_HANDLE hStartDate,     _In_opt_ DATE_ITEM_HANDLE hEndDate,     _In_ DATE_LOG_HANDLE hDateLogHandle,     _In_opt_ PDATE_COLLECTION_PROGRESS pProgData,     _In_ DWORD dwFlags );

MergeDateLogHandle

Merges a source date range into a destination date log with conflict resolution.

HRESULT _Must_inspect_result_ _Success_(SUCCEEDED(return)) MergeDateLogHandle(     _Inout_ _Pre_valid_ DATE_LOG_HANDLE hDestDateLog,     _In_ __readonly _Pre_valid_ DATE_RANGE_HANDLE hSourceDateLog,     _In_ DWORD dwFlags );

ConvertToDateLogHandle

Converts and verifies a date range handle to a date log handle.

HRESULT _Must_inspect_result_ _Success_(SUCCEEDED(return)) ConvertToDateLogHandle(     _Inout_ _Pre_valid_ DATE_RANGE_HANDLE hDateRangeHandle,     _In_opt_ DATE_ITEM_HANDLE hLastDate );

Date Item Analysis & Comparison

Exported Functions

GetDateItemGap

Calculates market trading days between two dates.

signed int GetDateItemGap(     _In_ _Pre_valid_ DATE_LOG_HANDLE hDateLogHandle,     _In_ DATE_ITEM_HANDLE hStartDate,     _In_ DATE_ITEM_HANDLE hEndDate,     _In_ DateGapSpec DateGapType );

IsDateItemMarketHoliday

Checks if a date item is a weekend or market holiday.

__forceinline signed int IsDateItemMarketHoliday(     _In_ DATE_ITEM_HANDLE hDateItem,     _In_ HOLIDAYS_HANDLE hHolidays );
Return Values:
  • 1: Date is a weekend or holiday
  • 0: Date is a valid market day
  • -1: Error during validation

IsFiletimeMarketHoliday

Checks if a FILETIME is a weekend or market holiday.

signed int IsFiletimeMarketHoliday(     _In_ PFILETIME pFiletime,     _In_ HOLIDAYS_HANDLE hHolidays );

Handle Validation & Inspection

Exported Functions

IsValidDateLogHandle

Validates a DATE_LOG_HANDLE, DATE_RANGE_HANDLE, or HOLIDAYS_HANDLE.

BOOL _Check_return_ IsValidDateLogHandle(     _In_ DATE_COLLECTION_HANDLE hDateLogHandle );

IsValidHolidaysHandle

Validates a HOLIDAYS_HANDLE specifically.

BOOL IsValidHolidaysHandle(     _In_ HOLIDAYS_HANDLE hHolidays );

DateLogHasChanged

Checks if a date log has been modified since creation.

BOOL DateLogHasChanged(     _In_ _Pre_valid_ DATE_LOG_HANDLE hDateLogHandle );

Collection Metadata & Inspection

Exported Functions

GetDateCollectionLength

Returns the current number of date items in a collection.

DWORD GetDateCollectionLength(     _In_ _Pre_valid_ DATE_COLLECTION_HANDLE hDateCollection );

GetDateCollectionMaximumLength

Returns the maximum capacity of a date collection.

DWORD GetDateCollectionMaximumLength(     _In_ _Pre_valid_ DATE_COLLECTION_HANDLE hDateCollection );

GetDateLogHolidayHandle

Retrieves the holidays handle associated with a date log.

HOLIDAYS_HANDLE _Check_return_ _Success_(return != NULL) GetDateLogHolidayHandle(     _In_ _Pre_valid_ DATE_LOG_HANDLE hDatelogHandle );

Configuration & Localization

Exported Functions

SetDatelogLocale

Sets the locale for all date log operations.

HRESULT _Must_inspect_result_ _Success_(SUCCEEDED(return)) SetDatelogLocale(     _In_ PUNICODE_STRING pLocale );

SetDateLogHandleOdbcBulkInsertPort

Configures ODBC bulk insert port for SQL backend operations.

HRESULT _Must_inspect_result_ _Success_(SUCCEEDED(return)) SetDateLogHandleOdbcBulkInsertPort(     _In_ _Pre_valid_ DATE_LOG_HANDLE hDateLogHandle,     _Inout_updates_(sizeof(DWORD)) PSQL_DATE_BULK pSQLOdbcPort );

GetDateLogEncryptionPassData

Retrieves encryption key material for date item backend decryption.

HRESULT GetDateLogEncryptionPassData(     _In_ _Pre_valid_ DATE_LOG_HANDLE hDateLogHandle,     _Inout_updates_(2 * sizeof(GUID)) PATE_ITEM_OBJ_PWD pDateItemObjPwd );