Program Listing for File Group.hpp¶
↰ Return to documentation for file (include/nix/Group.hpp)
// Copyright (c) 2013, German Neuroinformatics Node (G-Node)
//
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted under the terms of the BSD License. See
// LICENSE file in the root of the Project.
#ifndef NIX_GROUP_HPP
#define NIX_GROUP_HPP
#include <nix/base/EntityWithSources.hpp>
#include <nix/base/IGroup.hpp>
#include <nix/DataArray.hpp>
#include <nix/DataFrame.hpp>
#include <nix/Platform.hpp>
#include <nix/ObjectType.hpp>
#include <nix/util/util.hpp>
namespace nix {
class NIXAPI Group : public base::EntityWithSources<base::IGroup> {
public:
Group()
: EntityWithSources() { }
Group(const Group &other)
: EntityWithSources(other.impl()) {
}
Group(const std::shared_ptr<base::IGroup> &p_impl)
: EntityWithSources(p_impl) {
}
Group(std::shared_ptr<base::IGroup> &&ptr)
: EntityWithSources(std::move(ptr)) {
}
//--------------------------------------------------
// Methods concerning data arrays.
//--------------------------------------------------
// TODO syntactic sugar for creating dataArrays, tags, multiTags
bool hasDataArray(const std::string &name_or_id) const {
return backend()->hasEntity({name_or_id, ObjectType::DataArray});
}
bool hasDataArray(const DataArray &data_array) const {
if (!util::checkEntityInput(data_array, false)) {
return false;
}
return backend()->hasEntity(data_array);
}
ndsize_t dataArrayCount() const {
return backend()->entityCount(ObjectType::DataArray);
}
DataArray getDataArray(const std::string &name_or_id) const {
return backend()->getEntity<base::IDataArray>(name_or_id);
}
DataArray getDataArray(size_t index) const {
if (index >= backend()->entityCount(ObjectType::DataArray)) {
throw OutOfBounds("No DataArray at given index", index);
}
return backend()->getEntity<base::IDataArray>(index);
}
void addDataArray(const DataArray &data_array) {
if (util::checkEntityInput(data_array, true)) {
backend()->addEntity(data_array);
}
}
void addDataArray(const std::string &name_or_id) {
backend()->addEntity({name_or_id, ObjectType::DataArray});
}
bool removeDataArray(const DataArray &data_array) {
if (!util::checkEntityInput(data_array, false)) {
return false;
}
return backend()->removeEntity(data_array);
}
bool removeDataArray(const std::string &name_or_id) {
return backend()->removeEntity({name_or_id, ObjectType::DataArray});
}
std::vector<DataArray> dataArrays(const util::Filter<DataArray>::type &filter) const;
std::vector<DataArray> dataArrays() const
{
return dataArrays(util::AcceptAll<DataArray>());
}
void dataArrays(const std::vector<DataArray> &data_arrays);
//--------------------------------------------------
// Methods concerning data frames.
//--------------------------------------------------
bool hasDataFrame(const std::string &name_or_id) const {
return backend()->hasEntity({name_or_id, ObjectType::DataFrame});
}
bool hasDataFrame(const DataFrame &data_frame) const {
if (!util::checkEntityInput(data_frame, false)) {
return false;
}
return backend()->hasEntity(data_frame);
}
ndsize_t dataFrameCount() const {
return backend()->entityCount(ObjectType::DataFrame);
}
DataFrame getDataFrame(const std::string &name_or_id) const {
return backend()->getEntity<base::IDataFrame>(name_or_id);
}
DataFrame getDataFrame(ndsize_t index) const {
if (index >= backend()->entityCount(ObjectType::DataFrame)) {
throw OutOfBounds("No DataFrame at given index", index);
}
return backend()->getEntity<base::IDataFrame>(index);
}
void addDataFrame(const DataFrame &data_frame) {
if (util::checkEntityInput(data_frame, true)) {
backend()->addEntity(data_frame);
}
}
void addDataFrame(const std::string &name_or_id) {
backend()->addEntity({name_or_id, ObjectType::DataFrame});
}
bool removeDataFrame(const DataFrame &data_frame) {
if (!util::checkEntityInput(data_frame, false)) {
return false;
}
return backend()->removeEntity(data_frame);
}
bool removeDataFrame(const std::string &name_or_id) {
return backend()->removeEntity({name_or_id, ObjectType::DataFrame});
}
std::vector<DataFrame> dataFrames(const util::Filter<DataFrame>::type &filter) const;
std::vector<DataFrame> dataFrames() const
{
return dataFrames(util::AcceptAll<DataFrame>());
}
void dataFrames(const std::vector<DataFrame> &data_frames);
//--------------------------------------------------
// Methods concerning tags.
//--------------------------------------------------
bool hasTag(const std::string &name_or_id) const {
return backend()->hasEntity({name_or_id, ObjectType::Tag});
}
bool hasTag(const Tag &tag) const {
if (!util::checkEntityInput(tag, false)) {
return false;
}
return backend()->hasEntity(tag);
}
ndsize_t tagCount() const {
return backend()->entityCount(ObjectType::Tag);
}
Tag getTag(const std::string &name_or_id) const {
return backend()->getEntity<base::ITag>(name_or_id);
}
Tag getTag(size_t index) const {
if (index >= backend()->entityCount(ObjectType::Tag)) {
throw OutOfBounds("No Tag at given index", index);
}
return backend()->getEntity<base::ITag>(index);
}
void addTag(const Tag &tag) {
if (util::checkEntityInput(tag, true)) {
backend()->addEntity(tag);
}
}
void addTag(const std::string &name_or_id) {
backend()->addEntity({name_or_id, ObjectType::Tag});
}
bool removeTag(const Tag &tag) {
if (!util::checkEntityInput(tag, false)) {
return false;
}
return backend()->removeEntity(tag);
}
bool removeTag(const std::string &name_or_id) {
return backend()->removeEntity({name_or_id, ObjectType::Tag});
}
std::vector<Tag> tags(const util::Filter<Tag>::type &filter) const;
std::vector<Tag> tags() const {
return tags(util::AcceptAll<Tag>());
}
void tags(const std::vector<Tag> &tags);
//--------------------------------------------------
// Methods concerning multi tags.
//--------------------------------------------------
bool hasMultiTag(const std::string &name_or_id) const {
return backend()->hasEntity({name_or_id, ObjectType::MultiTag});
}
bool hasMultiTag(const MultiTag &tag) const {
if (!util::checkEntityInput(tag, false)) {
return false;
}
return backend()->hasEntity(tag);
}
ndsize_t multiTagCount() const {
return backend()->entityCount(ObjectType::MultiTag);
}
MultiTag getMultiTag(const std::string &name_or_id) const {
return backend()->getEntity<base::IMultiTag>(name_or_id);
}
MultiTag getMultiTag(size_t index) const {
if (index >= backend()->entityCount(ObjectType::MultiTag)) {
throw OutOfBounds("No MultiTag at given index", index);
}
return backend()->getEntity<base::IMultiTag>(index);
}
void addMultiTag(const MultiTag &multi_tag) {
if (util::checkEntityInput(multi_tag, true)) {
backend()->addEntity(multi_tag);
}
}
void addMultiTag(const std::string &name_or_id) {
backend()->addEntity({name_or_id, ObjectType::MultiTag});
}
bool removeMultiTag(const MultiTag &multi_tag) {
if (!util::checkEntityInput(multi_tag, false)) {
return false;
}
return backend()->removeEntity(multi_tag);
}
bool removeMultiTag(const std::string &name_or_id) {
return backend()->removeEntity({name_or_id, ObjectType::MultiTag});
}
std::vector<MultiTag> multiTags(const util::Filter<MultiTag>::type &filter) const;
std::vector<MultiTag> multiTags() const {
return multiTags(util::AcceptAll<MultiTag>());
}
void multiTags(const std::vector<MultiTag> &multi_tags);
Group &operator=(const none_t &t) {
ImplContainer::operator=(t);
return *this;
}
Group &operator=(const Group &other) {
ImplContainer::operator=(other);
return *this;
}
NIXAPI friend std::ostream &operator<<(std::ostream &out, const Group &ent);
private:
template<typename T>
void replaceEntities(const std::vector<T> &entitties);
};
template<>
struct objectToType<nix::Group> {
static const bool isValid = true;
static const ObjectType value = ObjectType::Group;
typedef nix::base::IGroup backendType;
};
NIXAPI std::ostream &operator<<(std::ostream &out, const Group &ent);
} // namespace nix
#endif //NIX_GROUP_HPP