#include <gdal_priv.h>
#include <iostream>
using namespace std;

int main()
{
    GDALAllRegister();

    GDALDriver *poDriver = NULL;
    GDALDataset *poSrcDS = NULL;
    GDALDataset *poVirtualDS = NULL;

    poDriver = GetGDALDriverManager()->GetDriverByName("VRT");
    if ( poDriver == NULL )
    {
       cout << "Can not get VRT driver\n"; 
       return 0;
    }

    poSrcDS = static_cast<GDALDataset*>(GDALOpenShared("historyImage0003.png.vrt", GA_ReadOnly));
    if (poSrcDS == NULL)
    {
       cout << "Can not open source dataset\n"; 
       return 0;
    }
    
    // Test case 1
    // Create copy of source .vrt dataset and save it on disk.
    //
    poVirtualDS = poDriver->CreateCopy("new.vrt", poSrcDS, FALSE, NULL, NULL, NULL);
    if ( poVirtualDS == NULL )
    {
       GDALClose(poSrcDS);
       poSrcDS = NULL;
       cout << "Can not create in-file copy\n"; 
       return 0;
    }
    cout << "Test case 1 - memory: OK\n";
    
    GDALClose(poVirtualDS);
    poVirtualDS = NULL;

    // Test case 2
    // Create copy of source .vrt to in-memory dataset.
    //
    poVirtualDS = poDriver->CreateCopy("", poSrcDS, FALSE, NULL, NULL, NULL);
    if ( poVirtualDS == NULL )
       cout << "Can not create in-memory copy\n"; 
    else
        cout << "Test case 2 - file: OK\n";
    
    GDALClose(poSrcDS);
    GDALClose(poVirtualDS);

	return 0;
}

