lib_2daq function library

Dependencies:

Description

Functions in lib_2daq act on in-game 2da files in-place, rather than the read/write paradigm used in lib_2da. They're optimized for speed insofar as I can manage it (the 'q' stands for 'quick').

Functions

2daq_copy_column(data_read:b, column:s, column_new:s="%column%")=(value:s) patch

Copies a column in the current 2da file to the right-hand side of the table, with new column name 'column_new'. Returns 1 if copy is successful. Stoically silent if it isn't.

2daq_copy_row(rowname_column:i, data_read:b, row:s, row_new:s="9")=(value:s) patch

Copies a row in the current 2da file to the bottom of the table, with new row name 'row_new'. Returns 1 if copy is successful. Stoically silent if it isn't.

If 'rowname_column' is set, the row id is looked up in that column, and column 0 is assumed to be numbered sequentially. (This is the convention for kitlist.2da.)

2daq_extract(rowname_column:i, data_read:i, row:s, column:s)=(value:s, array:a) patch
2daq_extract(rowname_column:i, data_read:b, resref:s, row:s, column:s)=(value:s, array:a) action

Given a column header and/or a row header, and a 2da file resref, (or, in patch context, the current 2da file), extract the column or row as k=>v array using the row or column headers, as appropriate, as keys.

If both row and column are set, instead return the element (if any) at (row,column)

2daq_has_column(data_read:b, column:s)=(value:s) patch

Return 1 iff the current 2da file has 'column' as a column id.

2daq_has_row(rowname_column:i, data_read:b, row:s)=(value:s) patch

Return 1 iff the current 2da file has 'row' as a row id. (Check rowname_column).

2daq_inject(reflect:b, rowname_column:i, data_read:b, array:a)=() patch
2daq_inject(reflect:b, rowname_column:i, data_read:b, array:a, resref:s)=() action

Given a 2D struct 'array' and a 2da file resref, (or, in patch context, the current 2da file) insert the elements of the struct into the 2da. (i.e. if the struct contains "array_x_y" and x and y are row and column entries in the 2da, insert the value of array_x_y at (x,y).

If reflect=1, swap rows and columns. If rowname_column is nonzero, look up the row names in that column.

2daq_insert_column(column:s, insert_loc:[l="last"ast|before_last])=() patch

Adds a new column, with header 'column', as the last column, or the second-to-last column if insert_loc is 'before_last'. All entries are filled with the 2da default value.

2daq_insert_row(rowname_column:i, row:s)=() patch

Adds a new row, with header 'row', as the last row. All entries are filled with the 2da default value. If rowname_column>0, we put the header in this column, and assume column 0 should be numbered sequentially from 0.