Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
Selection.h 1.81 KiB
/*
 * Distributed under the OSI-approved Apache License, Version 2.0.  See
 * accompanying file Copyright.txt for details.
 *
 *  Created on: May 17, 2017
 *      Author: Norbert Podhorszki pnorbert@ornl.gov
 *              William F Godoy godoywf@ornl.gov
 */

/*
 *   Selection API in C++
 *
 *   A SELECTION is the data ranges resulting from a QUERY over a file and
 * variable(s).
 *
 *   A SELECTION can be a list of bounding boxes and point-sets. Other data
 * structures
 *   are not supported. Any query will result in such a selection.
 *   Other selections are the write-block and auto.
 *
 *   Write block is a block of data written
 *   by a writer process, it is identified by an index. If each writer outputs
 * one block
 *   then the index equals to the rank of the write process. With multi-var
 * writing and
 *   multiple steps in a file, index runs from 0 as rank 0 process' first block.
 *
 *   Auto selection lets the read method to automatically choose what to return.
 * It will
 *   be a block / blocks of selected writers.
 *
 *   If a query is a simple bounding box, the selection is the bounding box
 * itself, so
 *   the application does not need to retrieve the selection to work on the read
 * data.
 */

#ifndef ADIOS2_CORE_SELECTION_H_
#define ADIOS2_CORE_SELECTION_H_

#include "adios2/ADIOSConfig.h"
#include "adios2/ADIOSTypes.h"

namespace adios2
{
/** Base class for Selection (query) types */
class Selection
{
public:
    /** from derived class */
    const SelectionType m_Type;

    /**
     * Unique constructor
     * @param type derived class type
     */
    Selection(const SelectionType type, const bool debugMode = false);

    virtual ~Selection() = default;

protected:
    /** true: extra checks (recommended) */
    const bool m_DebugMode;
};

} // namespace adios

#endif /* ADIOS2_CORE_SELECTION_H_ */