59#include <lal/LALConstants.h>
60#include <lal/LALStdio.h>
61#include <lal/LIGOLwXMLRead.h>
62#include <lal/LIGOMetadataTables.h>
63#include <lal/LIGOMetadataUtils.h>
64#include <lal/XLALError.h>
87 struct MetaioParseEnvironment env;
95 XLALPrintError(
"%s(): error opening \"%s\": %s\n", __func__,
filename, env.mierrmsg.data ? env.mierrmsg.data :
"unknown reason");
105 has_table = !MetaioOpenTableOnly(&env, table_name);
106 MetaioClearErrno(&env);
112 if(MetaioClose(&env)) {
113 XLALPrintError(
"%s(): error parsing document after %s table: %s\n", __func__, table_name, env.mierrmsg.data ? env.mierrmsg.data :
"unknown reason");
137 struct MetaioParseEnvironment *env,
143 int pos = MetaioFindColumn(env,
name);
146 if(type != METAIO_TYPE_UNKNOWN && env->ligo_lw.table.col[pos].data_type != type) {
150 }
else if(required) {
169 const struct MetaioParseEnvironment *env,
171 const char *ilwd_char_table_name,
172 const char *ilwd_char_column_name
176 const char *ilwd_char = env->ligo_lw.table.elt[column_number].data.lstring.data;
184 fmt = malloc(strlen(ilwd_char_table_name ? ilwd_char_table_name :
"%*[^:]") + strlen(ilwd_char_column_name ? ilwd_char_column_name :
"%*[^:]") + 8);
188 sprintf(fmt,
"%s:%s:%%lld", ilwd_char_table_name ? ilwd_char_table_name :
"%*[^:]", ilwd_char_column_name ? ilwd_char_column_name :
"%*[^:]");
190 if(sscanf(ilwd_char, fmt, &
id) < 1) {
192 XLALPrintError(
"%s(): invalid %s \"%s\" for %s\n", __func__, ilwd_char_column_name ? ilwd_char_column_name :
"ID", ilwd_char, ilwd_char_table_name ? ilwd_char_table_name :
"table");
int XLALLIGOLwFindColumn(struct MetaioParseEnvironment *env, const char *name, unsigned int type, int required)
Convenience wrapper for MetaioFindColumn(), translating to XLAL-style error reporting and printing us...
long long XLALLIGOLwParseIlwdChar(const struct MetaioParseEnvironment *env, int column_number, const char *ilwd_char_table_name, const char *ilwd_char_column_name)
Convenience function to extract the integer part of an ilwd:char ID string with some error checking.
int XLALLIGOLwHasTable(const char *filename, const char *table_name)
Test a LIGO Light Weight XML file for the presence of a specific table.
int XLALPrintError(const char *fmt,...) _LAL_GCC_PRINTF_FORMAT_(1