1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
//! Raw `AssemblyOS` table representation.
//!
//! This module provides low-level access to `AssemblyOS` metadata table data through the
//! [`crate::metadata::tables::assemblyos::raw::AssemblyOsRaw`] structure. The `AssemblyOS` table
//! contains operating system targeting information for .NET assemblies, though it is rarely
//! used in modern applications.
//!
//! # Architecture
//!
//! Unlike other metadata tables that require heap resolution, `AssemblyOS` contains only primitive
//! integer values, making the "raw" and "owned" representations functionally identical. This
//! simplifies the dual variant pattern used throughout the metadata system.
//!
//! # Key Components
//!
//! - [`crate::metadata::tables::assemblyos::raw::AssemblyOsRaw`] - Raw table row structure
//! - [`crate::metadata::tables::assemblyos::AssemblyOsRc`] - Reference-counted owned representation
//! - [`crate::metadata::tables::types::RowReadable`] - Table parsing interface implementation
//!
//! # `AssemblyOS` Table Format
//!
//! The `AssemblyOS` table (0x22) contains operating system targeting information:
//! - **`OSPlatformId`** (4 bytes): Operating system platform identifier
//! - **`OSMajorVersion`** (4 bytes): Major version number of the target OS
//! - **`OSMinorVersion`** (4 bytes): Minor version number of the target OS
//!
//! # Historical Context
//!
//! This table was designed for early .NET Framework scenarios where assemblies might
//! need explicit OS compatibility declarations. Modern .NET applications typically
//! rely on runtime platform abstraction instead of metadata-level OS targeting.
//!
//! # Integration
//!
//! This module integrates with:
//! - [`crate::metadata::tables`] - Core metadata table infrastructure
//! - [`crate::metadata::token`] - Token representation for metadata references
//! - [`crate::file::io`] - Binary data reading utilities
//!
//! # References
//!
//! - [ECMA-335 II.22.3](https://ecma-international.org/wp-content/uploads/ECMA-335_6th_edition_june_2012.pdf) - `AssemblyOS` table specification
use Arc;
use crate::;
/// Raw `AssemblyOS` table row representing operating system targeting information
///
/// Contains platform identification data for assemblies that specify explicit OS compatibility.
/// Unlike most metadata tables, `AssemblyOS` contains only primitive integer values and requires
/// no heap resolution, making this structure immediately usable without further processing.
///
/// The `AssemblyOS` table (0x22) is optional and rarely present in modern .NET assemblies,
/// which typically rely on runtime platform abstraction rather than compile-time OS targeting.
///
/// # Data Model
///
/// All fields contain direct integer values rather than heap indexes:
/// - No string heap references (unlike Assembly.Name)
/// - No blob heap references (unlike Assembly.PublicKey)
/// - All data is self-contained within the table row
///
/// # Reference
/// - [ECMA-335 II.22.3](https://ecma-international.org/wp-content/uploads/ECMA-335_6th_edition_june_2012.pdf) - `AssemblyOS` table specification