Skip to content

Commit

Permalink
Fix for #379parsing a subfield of a record correctly propogates flags
Browse files Browse the repository at this point in the history
  • Loading branch information
jpswinski committed Feb 22, 2024
1 parent bbedfd4 commit e94161a
Show file tree
Hide file tree
Showing 5 changed files with 20 additions and 20 deletions.
9 changes: 4 additions & 5 deletions packages/arrow/ParquetBuilder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -428,10 +428,9 @@ struct ParquetBuilder::impl
int ParquetBuilder::luaCreate (lua_State* L)
{
ArrowParms* _parms = NULL;
geo_data_t geo = {
.x_key = NULL,
.y_key = NULL
};
geo_data_t geo;
geo.x_key = NULL;
geo.y_key = NULL;

try
{
Expand Down Expand Up @@ -1207,7 +1206,7 @@ void ParquetBuilder::processRecordBatch (int num_rows)
};
(void)builder.UnsafeAppend((uint8_t*)&point, sizeof(wkbpoint_t));
if(x_field.flags & RecordObject::BATCH) x_field.offset += batchRowSizeBytes * 8;
if(x_field.flags & RecordObject::BATCH) y_field.offset += batchRowSizeBytes * 8;
if(y_field.flags & RecordObject::BATCH) y_field.offset += batchRowSizeBytes * 8;
}
x_field.offset = starting_x_offset;
y_field.offset = starting_y_offset;
Expand Down
7 changes: 4 additions & 3 deletions packages/core/RecordObject.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1503,11 +1503,11 @@ RecordObject::field_t RecordObject::getPointedToField(field_t f, bool allow_null
/*----------------------------------------------------------------------------
* getUserField
*----------------------------------------------------------------------------*/
RecordObject::field_t RecordObject::getUserField (definition_t* def, const char* field_name)
RecordObject::field_t RecordObject::getUserField (definition_t* def, const char* field_name, uint32_t parent_flags)
{
assert(field_name);

field_t field = { INVALID_FIELD, 0, 0, NULL, NATIVE_FLAGS };
field_t field = { INVALID_FIELD, 0, 0, NULL, parent_flags };
long element = -1;

/* Sanity Check Def */
Expand Down Expand Up @@ -1585,7 +1585,7 @@ RecordObject::field_t RecordObject::getUserField (definition_t* def, const char*
else
{
definition_t* subdef = definitions[field.exttype];
field_t subfield = getUserField(subdef, subfield_name);
field_t subfield = getUserField(subdef, subfield_name, field.flags);
subfield.offset += field.offset;
field = subfield;
}
Expand All @@ -1596,6 +1596,7 @@ RecordObject::field_t RecordObject::getUserField (definition_t* def, const char*
}

/* Return Field */
field.flags |= parent_flags;
return field;
}

Expand Down
4 changes: 2 additions & 2 deletions packages/core/RecordObject.h
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ class RecordObject
int32_t offset; // bits for BITFIELD, bytes for everything else
int32_t elements;
const char* exttype;
uint64_t flags;
uint64_t flags; // 64-bits provided here to consume padding
} fieldDef_t;

typedef enum {
Expand Down Expand Up @@ -328,7 +328,7 @@ class RecordObject

/* Regular Methods */
field_t getPointedToField (field_t field, bool allow_null, int element=0);
static field_t getUserField (definition_t* def, const char* field_name);
static field_t getUserField (definition_t* def, const char* field_name, uint32_t parent_flags=NATIVE_FLAGS);
static recordDefErr_t addDefinition (definition_t** rec_def, const char* rec_type, const char* id_field, int data_size, const fieldDef_t* fields, int num_fields, int max_fields);
static recordDefErr_t addField (definition_t* def, const char* field_name, fieldType_t type, int offset, int elements, const char* exttype, unsigned int flags);

Expand Down
10 changes: 5 additions & 5 deletions plugins/icesat2/plugin/Atl03Reader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ const RecordObject::fieldDef_t Atl03Reader::exRecDef[] = {
{"pair", RecordObject::UINT8, offsetof(extent_t, pair), 1, NULL, NATIVE_FLAGS | RecordObject::AUX},
{"sc_orient", RecordObject::UINT8, offsetof(extent_t, spacecraft_orientation), 1, NULL, NATIVE_FLAGS | RecordObject::AUX},
{"rgt", RecordObject::UINT16, offsetof(extent_t, reference_ground_track), 1, NULL, NATIVE_FLAGS | RecordObject::AUX},
{"cycle", RecordObject::UINT16, offsetof(extent_t, cycle), 1, NULL, NATIVE_FLAGS | RecordObject::AUX},
{"cycle", RecordObject::UINT8, offsetof(extent_t, cycle), 1, NULL, NATIVE_FLAGS | RecordObject::AUX},
{"segment_id", RecordObject::UINT32, offsetof(extent_t, segment_id), 1, NULL, NATIVE_FLAGS},
{"segment_dist", RecordObject::DOUBLE, offsetof(extent_t, segment_distance), 1, NULL, NATIVE_FLAGS}, // distance from equator
{"background_rate", RecordObject::DOUBLE, offsetof(extent_t, background_rate), 1, NULL, NATIVE_FLAGS | RecordObject::AUX},
Expand Down Expand Up @@ -1750,7 +1750,7 @@ void Atl03Reader::postRecord (RecordObject& record, stats_t& local_stats)
* vvv - version
* ee - revision
*----------------------------------------------------------------------------*/
void Atl03Reader::parseResource (const char* _resource, int32_t& rgt, int32_t& cycle, int32_t& region)
void Atl03Reader::parseResource (const char* _resource, uint16_t& rgt, uint8_t& cycle, uint8_t& region)
{
if(StringLib::size(_resource) < 29)
{
Expand All @@ -1769,7 +1769,7 @@ void Atl03Reader::parseResource (const char* _resource, int32_t& rgt, int32_t& c
rgt_str[4] = '\0';
if(StringLib::str2long(rgt_str, &val, 10))
{
rgt = val;
rgt = (uint16_t)val;
}
else
{
Expand All @@ -1782,7 +1782,7 @@ void Atl03Reader::parseResource (const char* _resource, int32_t& rgt, int32_t& c
cycle_str[2] = '\0';
if(StringLib::str2long(cycle_str, &val, 10))
{
cycle = val;
cycle = (uint8_t)val;
}
else
{
Expand All @@ -1795,7 +1795,7 @@ void Atl03Reader::parseResource (const char* _resource, int32_t& rgt, int32_t& c
region_str[2] = '\0';
if(StringLib::str2long(region_str, &val, 10))
{
region = val;
region = (uint8_t)val;
}
else
{
Expand Down
10 changes: 5 additions & 5 deletions plugins/icesat2/plugin/Atl03Reader.h
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ class Atl03Reader: public LuaObject
uint8_t pair; // 0 (l), 1 (r)
uint8_t spacecraft_orientation; // sc_orient_t
uint16_t reference_ground_track;
uint16_t cycle;
uint8_t cycle;
uint32_t segment_id;
uint32_t photon_count;
float solar_elevation;
Expand Down Expand Up @@ -309,9 +309,9 @@ class Atl03Reader: public LuaObject
H5Coro::context_t context; // for ATL03 file
H5Coro::context_t context08; // for ATL08 file

int32_t start_rgt;
int32_t start_cycle;
int32_t start_region;
uint16_t start_rgt;
uint8_t start_cycle;
uint8_t start_region;

/*--------------------------------------------------------------------
* Methods
Expand All @@ -327,7 +327,7 @@ class Atl03Reader: public LuaObject
void generateExtentRecord (uint64_t extent_id, info_t* info, TrackState& state, const Atl03Data& atl03, vector<RecordObject*>& rec_list, int& total_size);
static void generateAncillaryRecords (uint64_t extent_id, AncillaryFields::list_t* field_list, H5DArrayDictionary* field_dict, AncillaryFields::type_t type, List<int32_t>* indices, vector<RecordObject*>& rec_list, int& total_size);
void postRecord (RecordObject& record, stats_t& local_stats);
static void parseResource (const char* resource, int32_t& rgt, int32_t& cycle, int32_t& region);
static void parseResource (const char* resource, uint16_t& rgt, uint8_t& cycle, uint8_t& region);

static int luaParms (lua_State* L);
static int luaStats (lua_State* L);
Expand Down

0 comments on commit e94161a

Please sign in to comment.