Carry full company issue calendar tuples
This commit is contained in:
parent
3b99f6f626
commit
126a637bc2
7 changed files with 95 additions and 10 deletions
|
|
@ -70,8 +70,9 @@ The fixed-world finance neighborhood itself is now widened to 16 dwords rooted a
|
|||
so future issue-`0x38/0x39` closure can build on a broader owned restore-state window rather than
|
||||
another narrow one-off probe. The next company-side seam is now bundled too: a shared company
|
||||
market reader now exposes outstanding shares, assigned shares, public float, rounded cached share
|
||||
price, salary lanes, bonus amount, and issue-calendar words from the owned annual-finance state
|
||||
instead of leaving that logic spread across summary helpers. The same annual-finance state now also
|
||||
price, salary lanes, bonus amount, and the full two-word current/prior issue-calendar tuples from
|
||||
the owned annual-finance state instead of leaving that logic spread across summary helpers. The
|
||||
same annual-finance state now also
|
||||
derives elapsed years since founding, last dividend, and last bankruptcy from the runtime calendar,
|
||||
which lines up directly with the grounded annual finance-policy gates in the atlas. Live bond-slot
|
||||
count is now carried through the same owned company market and annual-finance state too, which
|
||||
|
|
|
|||
|
|
@ -5057,7 +5057,9 @@ mod tests {
|
|||
last_bankruptcy_year: 0,
|
||||
last_dividend_year: 1837,
|
||||
current_issue_calendar_word: 5,
|
||||
current_issue_calendar_word_2: 6,
|
||||
prior_issue_calendar_word: 4,
|
||||
prior_issue_calendar_word_2: 5,
|
||||
city_connection_latch: true,
|
||||
linked_transit_latch: false,
|
||||
stat_band_root_0cfb_candidates: Vec::new(),
|
||||
|
|
@ -5106,7 +5108,9 @@ mod tests {
|
|||
last_bankruptcy_year: 0,
|
||||
last_dividend_year: 0,
|
||||
current_issue_calendar_word: 3,
|
||||
current_issue_calendar_word_2: 4,
|
||||
prior_issue_calendar_word: 2,
|
||||
prior_issue_calendar_word_2: 3,
|
||||
city_connection_latch: false,
|
||||
linked_transit_latch: true,
|
||||
stat_band_root_0cfb_candidates: Vec::new(),
|
||||
|
|
@ -6398,7 +6402,9 @@ mod tests {
|
|||
last_bankruptcy_year: 0,
|
||||
last_dividend_year: 1838,
|
||||
current_issue_calendar_word: 4,
|
||||
current_issue_calendar_word_2: 5,
|
||||
prior_issue_calendar_word: 3,
|
||||
prior_issue_calendar_word_2: 4,
|
||||
city_connection_latch: false,
|
||||
linked_transit_latch: true,
|
||||
stat_band_root_0cfb_candidates: Vec::new(),
|
||||
|
|
|
|||
|
|
@ -85,8 +85,12 @@ pub struct RuntimeCompanyMarketState {
|
|||
#[serde(default)]
|
||||
pub current_issue_calendar_word: u32,
|
||||
#[serde(default)]
|
||||
pub current_issue_calendar_word_2: u32,
|
||||
#[serde(default)]
|
||||
pub prior_issue_calendar_word: u32,
|
||||
#[serde(default)]
|
||||
pub prior_issue_calendar_word_2: u32,
|
||||
#[serde(default)]
|
||||
pub city_connection_latch: bool,
|
||||
#[serde(default)]
|
||||
pub linked_transit_latch: bool,
|
||||
|
|
@ -125,7 +129,11 @@ pub struct RuntimeCompanyAnnualFinanceState {
|
|||
#[serde(default)]
|
||||
pub years_since_last_dividend: Option<u32>,
|
||||
pub current_issue_calendar_word: u32,
|
||||
#[serde(default)]
|
||||
pub current_issue_calendar_word_2: u32,
|
||||
pub prior_issue_calendar_word: u32,
|
||||
#[serde(default)]
|
||||
pub prior_issue_calendar_word_2: u32,
|
||||
pub city_connection_latch: bool,
|
||||
pub linked_transit_latch: bool,
|
||||
}
|
||||
|
|
@ -373,7 +381,9 @@ pub enum RuntimeCompanyMarketMetric {
|
|||
ChairmanSalaryCurrent,
|
||||
ChairmanBonusAmount,
|
||||
CurrentIssueCalendarWord,
|
||||
CurrentIssueCalendarWord2,
|
||||
PriorIssueCalendarWord,
|
||||
PriorIssueCalendarWord2,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
|
||||
|
|
@ -1955,7 +1965,9 @@ pub fn runtime_company_annual_finance_state(
|
|||
years_since_last_bankruptcy,
|
||||
years_since_last_dividend,
|
||||
current_issue_calendar_word: market_state.current_issue_calendar_word,
|
||||
current_issue_calendar_word_2: market_state.current_issue_calendar_word_2,
|
||||
prior_issue_calendar_word: market_state.prior_issue_calendar_word,
|
||||
prior_issue_calendar_word_2: market_state.prior_issue_calendar_word_2,
|
||||
city_connection_latch: market_state.city_connection_latch,
|
||||
linked_transit_latch: market_state.linked_transit_latch,
|
||||
})
|
||||
|
|
@ -1997,9 +2009,15 @@ pub fn runtime_company_market_value(
|
|||
RuntimeCompanyMarketMetric::CurrentIssueCalendarWord => {
|
||||
Some(annual_finance_state.current_issue_calendar_word as i64)
|
||||
}
|
||||
RuntimeCompanyMarketMetric::CurrentIssueCalendarWord2 => {
|
||||
Some(annual_finance_state.current_issue_calendar_word_2 as i64)
|
||||
}
|
||||
RuntimeCompanyMarketMetric::PriorIssueCalendarWord => {
|
||||
Some(annual_finance_state.prior_issue_calendar_word as i64)
|
||||
}
|
||||
RuntimeCompanyMarketMetric::PriorIssueCalendarWord2 => {
|
||||
Some(annual_finance_state.prior_issue_calendar_word_2 as i64)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -4262,7 +4280,9 @@ mod tests {
|
|||
last_bankruptcy_year: 0,
|
||||
last_dividend_year: 1841,
|
||||
current_issue_calendar_word: 5,
|
||||
current_issue_calendar_word_2: 6,
|
||||
prior_issue_calendar_word: 4,
|
||||
prior_issue_calendar_word_2: 5,
|
||||
city_connection_latch: true,
|
||||
linked_transit_latch: false,
|
||||
..RuntimeCompanyMarketState::default()
|
||||
|
|
@ -4295,7 +4315,9 @@ mod tests {
|
|||
years_since_last_bankruptcy: None,
|
||||
years_since_last_dividend: None,
|
||||
current_issue_calendar_word: 5,
|
||||
current_issue_calendar_word_2: 6,
|
||||
prior_issue_calendar_word: 4,
|
||||
prior_issue_calendar_word_2: 5,
|
||||
city_connection_latch: true,
|
||||
linked_transit_latch: false,
|
||||
})
|
||||
|
|
@ -4390,7 +4412,9 @@ mod tests {
|
|||
last_bankruptcy_year: 0,
|
||||
last_dividend_year: 1842,
|
||||
current_issue_calendar_word: 9,
|
||||
current_issue_calendar_word_2: 10,
|
||||
prior_issue_calendar_word: 8,
|
||||
prior_issue_calendar_word_2: 9,
|
||||
..RuntimeCompanyMarketState::default()
|
||||
},
|
||||
)]),
|
||||
|
|
@ -4446,6 +4470,14 @@ mod tests {
|
|||
),
|
||||
Some(9)
|
||||
);
|
||||
assert_eq!(
|
||||
runtime_company_market_value(
|
||||
&state,
|
||||
7,
|
||||
RuntimeCompanyMarketMetric::CurrentIssueCalendarWord2
|
||||
),
|
||||
Some(10)
|
||||
);
|
||||
assert_eq!(
|
||||
runtime_company_market_value(
|
||||
&state,
|
||||
|
|
@ -4454,6 +4486,14 @@ mod tests {
|
|||
),
|
||||
Some(8)
|
||||
);
|
||||
assert_eq!(
|
||||
runtime_company_market_value(
|
||||
&state,
|
||||
7,
|
||||
RuntimeCompanyMarketMetric::PriorIssueCalendarWord2
|
||||
),
|
||||
Some(9)
|
||||
);
|
||||
assert_eq!(
|
||||
runtime_company_market_value(
|
||||
&state,
|
||||
|
|
|
|||
|
|
@ -3497,7 +3497,9 @@ const SAVE_COMPANY_RECORD_MERGER_COOLDOWN_OFFSET: usize = 0x15f;
|
|||
const SAVE_COMPANY_RECORD_FOUNDING_YEAR_OFFSET: usize = 0x157;
|
||||
const SAVE_COMPANY_RECORD_LAST_BANKRUPTCY_YEAR_OFFSET: usize = 0x163;
|
||||
const SAVE_COMPANY_RECORD_CURRENT_ISSUE_CALENDAR_OFFSET: usize = 0x16b;
|
||||
const SAVE_COMPANY_RECORD_CURRENT_ISSUE_CALENDAR_OFFSET_2: usize = 0x16f;
|
||||
const SAVE_COMPANY_RECORD_PRIOR_ISSUE_CALENDAR_OFFSET: usize = 0x173;
|
||||
const SAVE_COMPANY_RECORD_PRIOR_ISSUE_CALENDAR_OFFSET_2: usize = 0x177;
|
||||
const SAVE_COMPANY_RECORD_TAKEOVER_COOLDOWN_OFFSET: usize = 0x289;
|
||||
const SAVE_COMPANY_RECORD_LAST_DIVIDEND_YEAR_OFFSET: usize = 0x0d2d;
|
||||
const SAVE_COMPANY_RECORD_CITY_CONNECTION_LATCH_OFFSET: usize = 0x0d18;
|
||||
|
|
@ -3511,7 +3513,7 @@ const SAVE_COMPANY_RECORD_STAT_BAND_ROOT_0CFB_OFFSET: usize = 0x0cfb;
|
|||
const SAVE_COMPANY_RECORD_STAT_BAND_ROOT_0D7F_OFFSET: usize = 0x0d7f;
|
||||
const SAVE_COMPANY_RECORD_STAT_BAND_ROOT_1C47_OFFSET: usize = 0x1c47;
|
||||
const SAVE_COMPANY_RECORD_STAT_BAND_ROOT_WINDOW_LEN_DWORDS: usize = 32;
|
||||
const SAVE_COMPANY_RECORD_SCALAR_CANDIDATE_FIELDS: [(&str, usize); 7] = [
|
||||
const SAVE_COMPANY_RECORD_SCALAR_CANDIDATE_FIELDS: [(&str, usize); 9] = [
|
||||
("mutable_support_scalar", 0x4f),
|
||||
("young_company_support_scalar", 0x57),
|
||||
(
|
||||
|
|
@ -3527,10 +3529,18 @@ const SAVE_COMPANY_RECORD_SCALAR_CANDIDATE_FIELDS: [(&str, usize); 7] = [
|
|||
"current_issue_calendar_word",
|
||||
SAVE_COMPANY_RECORD_CURRENT_ISSUE_CALENDAR_OFFSET,
|
||||
),
|
||||
(
|
||||
"current_issue_calendar_word_2",
|
||||
SAVE_COMPANY_RECORD_CURRENT_ISSUE_CALENDAR_OFFSET_2,
|
||||
),
|
||||
(
|
||||
"prior_issue_calendar_word",
|
||||
SAVE_COMPANY_RECORD_PRIOR_ISSUE_CALENDAR_OFFSET,
|
||||
),
|
||||
(
|
||||
"prior_issue_calendar_word_2",
|
||||
SAVE_COMPANY_RECORD_PRIOR_ISSUE_CALENDAR_OFFSET_2,
|
||||
),
|
||||
];
|
||||
const SAVE_COMPANY_RECORD_POST_CAPACITY_CANDIDATE_FIELDS: [(&str, usize); 6] = [
|
||||
("post_capacity_word_1", 0x7684),
|
||||
|
|
@ -3650,10 +3660,18 @@ fn parse_save_company_roster_probe(
|
|||
bytes,
|
||||
record_offset + SAVE_COMPANY_RECORD_CURRENT_ISSUE_CALENDAR_OFFSET,
|
||||
)?;
|
||||
let current_issue_calendar_word_2 = read_u32_at(
|
||||
bytes,
|
||||
record_offset + SAVE_COMPANY_RECORD_CURRENT_ISSUE_CALENDAR_OFFSET_2,
|
||||
)?;
|
||||
let prior_issue_calendar_word = read_u32_at(
|
||||
bytes,
|
||||
record_offset + SAVE_COMPANY_RECORD_PRIOR_ISSUE_CALENDAR_OFFSET,
|
||||
)?;
|
||||
let prior_issue_calendar_word_2 = read_u32_at(
|
||||
bytes,
|
||||
record_offset + SAVE_COMPANY_RECORD_PRIOR_ISSUE_CALENDAR_OFFSET_2,
|
||||
)?;
|
||||
let city_connection_latch = read_u8_at(
|
||||
bytes,
|
||||
record_offset + SAVE_COMPANY_RECORD_CITY_CONNECTION_LATCH_OFFSET,
|
||||
|
|
@ -3725,7 +3743,9 @@ fn parse_save_company_roster_probe(
|
|||
last_bankruptcy_year,
|
||||
last_dividend_year,
|
||||
current_issue_calendar_word,
|
||||
current_issue_calendar_word_2,
|
||||
prior_issue_calendar_word,
|
||||
prior_issue_calendar_word_2,
|
||||
city_connection_latch,
|
||||
linked_transit_latch,
|
||||
stat_band_root_0cfb_candidates: stat_band_root_0cfb_candidates
|
||||
|
|
@ -15958,7 +15978,9 @@ mod tests {
|
|||
last_bankruptcy_year,
|
||||
last_dividend_year,
|
||||
current_issue_calendar_word,
|
||||
current_issue_calendar_word_2,
|
||||
prior_issue_calendar_word,
|
||||
prior_issue_calendar_word_2,
|
||||
city_connection_latch,
|
||||
linked_transit_latch,
|
||||
),
|
||||
|
|
@ -15984,7 +16006,9 @@ mod tests {
|
|||
1851u32,
|
||||
1848u32,
|
||||
7u32,
|
||||
8u32,
|
||||
6u32,
|
||||
7u32,
|
||||
true,
|
||||
false,
|
||||
),
|
||||
|
|
@ -16009,7 +16033,9 @@ mod tests {
|
|||
0u32,
|
||||
1850u32,
|
||||
3u32,
|
||||
4u32,
|
||||
2u32,
|
||||
3u32,
|
||||
false,
|
||||
true,
|
||||
),
|
||||
|
|
@ -16095,9 +16121,15 @@ mod tests {
|
|||
bytes[record_offset + SAVE_COMPANY_RECORD_CURRENT_ISSUE_CALENDAR_OFFSET
|
||||
..record_offset + SAVE_COMPANY_RECORD_CURRENT_ISSUE_CALENDAR_OFFSET + 4]
|
||||
.copy_from_slice(¤t_issue_calendar_word.to_le_bytes());
|
||||
bytes[record_offset + SAVE_COMPANY_RECORD_CURRENT_ISSUE_CALENDAR_OFFSET_2
|
||||
..record_offset + SAVE_COMPANY_RECORD_CURRENT_ISSUE_CALENDAR_OFFSET_2 + 4]
|
||||
.copy_from_slice(¤t_issue_calendar_word_2.to_le_bytes());
|
||||
bytes[record_offset + SAVE_COMPANY_RECORD_PRIOR_ISSUE_CALENDAR_OFFSET
|
||||
..record_offset + SAVE_COMPANY_RECORD_PRIOR_ISSUE_CALENDAR_OFFSET + 4]
|
||||
.copy_from_slice(&prior_issue_calendar_word.to_le_bytes());
|
||||
bytes[record_offset + SAVE_COMPANY_RECORD_PRIOR_ISSUE_CALENDAR_OFFSET_2
|
||||
..record_offset + SAVE_COMPANY_RECORD_PRIOR_ISSUE_CALENDAR_OFFSET_2 + 4]
|
||||
.copy_from_slice(&prior_issue_calendar_word_2.to_le_bytes());
|
||||
bytes[record_offset + SAVE_COMPANY_RECORD_CITY_CONNECTION_LATCH_OFFSET] =
|
||||
u8::from(city_connection_latch);
|
||||
bytes[record_offset + SAVE_COMPANY_RECORD_LINKED_TRANSIT_LATCH_OFFSET] =
|
||||
|
|
@ -16177,7 +16209,9 @@ mod tests {
|
|||
assert_eq!(market_state.last_bankruptcy_year, 1851);
|
||||
assert_eq!(market_state.last_dividend_year, 1848);
|
||||
assert_eq!(market_state.current_issue_calendar_word, 7);
|
||||
assert_eq!(market_state.current_issue_calendar_word_2, 8);
|
||||
assert_eq!(market_state.prior_issue_calendar_word, 6);
|
||||
assert_eq!(market_state.prior_issue_calendar_word_2, 7);
|
||||
assert!(market_state.city_connection_latch);
|
||||
assert!(!market_state.linked_transit_latch);
|
||||
assert_eq!(
|
||||
|
|
@ -16221,7 +16255,9 @@ mod tests {
|
|||
assert_eq!(second_market_state.chairman_bonus_amount, 0);
|
||||
assert_eq!(second_market_state.last_dividend_year, 1850);
|
||||
assert_eq!(second_market_state.current_issue_calendar_word, 3);
|
||||
assert_eq!(second_market_state.current_issue_calendar_word_2, 4);
|
||||
assert_eq!(second_market_state.prior_issue_calendar_word, 2);
|
||||
assert_eq!(second_market_state.prior_issue_calendar_word_2, 3);
|
||||
assert!(!second_market_state.city_connection_latch);
|
||||
assert!(second_market_state.linked_transit_latch);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1981,7 +1981,9 @@ mod tests {
|
|||
last_bankruptcy_year: 0,
|
||||
last_dividend_year: 1841,
|
||||
current_issue_calendar_word: 5,
|
||||
current_issue_calendar_word_2: 6,
|
||||
prior_issue_calendar_word: 4,
|
||||
prior_issue_calendar_word_2: 5,
|
||||
city_connection_latch: true,
|
||||
linked_transit_latch: false,
|
||||
stat_band_root_0cfb_candidates: vec![
|
||||
|
|
|
|||
|
|
@ -124,9 +124,9 @@ The highest-value next passes are now:
|
|||
reader seam for assigned shares, public float, and rounded cached share price; the fixed-world
|
||||
finance neighborhood is now widened to 16 dwords rooted at `[world+0x11]` so later issue-family
|
||||
closure can target a broader owned restore-state window; the same annual-finance state now also
|
||||
feeds a shared company market reader for stock-capital, salary, bonus, and issue-calendar values,
|
||||
and now derives elapsed years since founding, last dividend, and last bankruptcy for later annual
|
||||
finance-policy rehosting; live bond-slot count now travels through that same owned annual-finance
|
||||
feeds a shared company market reader for stock-capital, salary, bonus, and the full two-word
|
||||
current/prior issue-calendar tuples, and now derives elapsed years since founding, last dividend,
|
||||
and last bankruptcy for later annual finance-policy rehosting; live bond-slot count now travels through that same owned annual-finance
|
||||
state for the stock-capital branch gate, and the grounded bond table now also contributes both
|
||||
the largest live bond principal and the chosen highest-coupon live bond principal into that same
|
||||
owner-state surface
|
||||
|
|
|
|||
|
|
@ -212,10 +212,10 @@ cached share price, which is a better base for later dividend / issue-calendar s
|
|||
scattered single-field helpers. The fixed-world finance neighborhood is now widened to 16 dwords
|
||||
rooted at `[world+0x11]`, so later issue-`0x38/0x39` closure can build on a broader owned
|
||||
restore-state window instead of another narrow probe. The same owned company annual-finance state
|
||||
now also drives a shared company market reader seam for stock-capital, salary, bonus, and
|
||||
issue-calendar values, which is a better base for shellless finance simulation than summary-only
|
||||
helpers. That same owned annual-finance state now also derives elapsed years since founding, last
|
||||
dividend, and last bankruptcy from the runtime calendar, which lines up directly with the grounded
|
||||
now also drives a shared company market reader seam for stock-capital, salary, bonus, and the full
|
||||
two-word current/prior issue-calendar tuples, which is a better base for shellless finance
|
||||
simulation than summary-only helpers. That same owned annual-finance state now also derives elapsed
|
||||
years since founding, last dividend, and last bankruptcy from the runtime calendar, which lines up directly with the grounded
|
||||
annual finance-policy gates in the atlas. Live bond-slot count now also flows through that same
|
||||
owned company market and annual-finance state, matching the stock-capital branch gate that needs
|
||||
at least two live bonds. The same grounded bond table now also contributes both the largest live
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue