NITFAPI(nitf_ImageSegment *) nitf_ImageSegment_clone(nitf_ImageSegment * source, nitf_Error * error) { nitf_ImageSegment *segment = NULL; if (source) { segment = (nitf_ImageSegment *) NITF_MALLOC(sizeof(nitf_ImageSegment)); if (!segment) { nitf_Error_init(error, NITF_STRERROR(NITF_ERRNO), NITF_CTXT, NITF_ERR_MEMORY); return NULL; } /* Just in case we self-destruct */ segment->subheader = NULL; /* The image offset in the file */ segment->imageOffset = source->imageOffset; /* The image end (offset + length image) */ segment->imageEnd = source->imageEnd; segment->subheader = nitf_ImageSubheader_clone(source->subheader, error); if (!segment->subheader) { nitf_ImageSegment_destruct(&segment); return NULL; } } else { nitf_Error_initf(error, NITF_CTXT, NITF_ERR_INVALID_OBJECT, "Trying to clone NULL pointer"); } /* Yes! We have a success */ return segment; }
int main(int argc, char **argv) { /* This is the reader object */ nitf_Reader* reader; nitf_Record* record; /* The IO handle */ nitf_IOHandle io; /* Get the error object */ nitf_Error error; /* Check argv and make sure we are happy */ if ( argc != 2 ) { printf("Usage: %s <nitf-file>\n", argv[0]); exit(EXIT_FAILURE); } io = nitf_IOHandle_create(argv[1], NITF_ACCESS_READONLY, NITF_OPEN_EXISTING, &error); if ( NITF_INVALID_HANDLE( io ) ) { nitf_Error_print(&error, stdout, "Exiting..."); exit( EXIT_FAILURE ); } reader = nitf_Reader_construct(&error); if (!reader) { nitf_Error_print(&error, stdout, "Exiting (1) ..."); exit( EXIT_FAILURE ); } printf("Here are the loaded handlers\n"); printf("* * * * * * * * * * * * * * * *\n"); { nitf_PluginRegistry* reg = nitf_PluginRegistry_getInstance(&error); nitf_HashTable_print( reg->treHandlers); } printf("* * * * * * * * * * * * * * * *\n"); record = nitf_Reader_read(reader, io, &error); if (!record) { nitf_Error_print(&error, stderr, "Failed to read the file"); exit(EXIT_FAILURE); } /* Now show the header */ showFileHeader(record->header); /* And now show the image information */ if (record->header->numImages) { /* Walk each image and show */ nitf_ListIterator iter = nitf_List_begin(record->images); nitf_ListIterator end = nitf_List_end(record->images); while ( nitf_ListIterator_notEqualTo(&iter, &end) ) { nitf_ImageSegment* segment = (nitf_ImageSegment*)nitf_ListIterator_get(&iter); nitf_ImageSubheader* dolly = nitf_ImageSubheader_clone(segment->subheader, &error); if (!dolly) { nitf_Error_print(&error, stdout, "During cloning!"); exit(EXIT_FAILURE); } SHOW_IMSUB(segment->subheader); SHOW_IMSUB(dolly); nitf_ImageSubheader_destruct(&dolly); nitf_ListIterator_increment(&iter); } } else { printf("No image in file!\n"); } nitf_IOHandle_close(io); nitf_Record_destruct(&record); nitf_Reader_destruct(&reader); return 0; }
nitf::ImageSubheader ImageSubheader::clone() throw(nitf::NITFException) { nitf::ImageSubheader dolly(nitf_ImageSubheader_clone(getNativeOrThrow(), &error)); dolly.setManaged(false); return dolly; }