00001 #ifndef PSANA_PARTITION_DDL_H
00002 #define PSANA_PARTITION_DDL_H 1
00003
00004
00005
00006 #include <vector>
00007 #include <iosfwd>
00008 #include <cstring>
00009 #include "ndarray/ndarray.h"
00010 #include "pdsdata/xtc/TypeId.hh"
00011 #include "pdsdata/xtc/Src.hh"
00012 namespace Psana {
00013 namespace Partition {
00014
00015
00016
00017
00018
00019
00020
00021 class Source {
00022 public:
00023 Source(const Pds::Src& arg__src, uint32_t arg__group);
00024 Source() {}
00025 const Pds::Src& src() const { return _src; }
00026 uint32_t group() const { return _group; }
00027 static uint32_t _sizeof() { return (((((0+(Pds::Src::_sizeof()))+4)+4)-1)/4)*4; }
00028 private:
00029 Pds::Src _src;
00030 uint32_t _group;
00031 };
00032
00033
00034
00035
00036
00037
00038
00039 class ConfigV1 {
00040 public:
00041 enum { TypeId = Pds::TypeId::Id_PartitionConfig };
00042 enum { Version = 1 };
00043 virtual ~ConfigV1();
00044
00045 virtual uint64_t bldMask() const = 0;
00046
00047 virtual uint32_t numSources() const = 0;
00048
00049 virtual ndarray<const Partition::Source, 1> sources() const = 0;
00050 };
00051
00052
00053
00054
00055
00056
00057
00058 class ConfigV2 {
00059 public:
00060 enum { TypeId = Pds::TypeId::Id_PartitionConfig };
00061 enum { Version = 2 };
00062 virtual ~ConfigV2();
00063
00064 virtual uint32_t numWords() const = 0;
00065
00066 virtual uint32_t numSources() const = 0;
00067
00068 virtual ndarray<const uint32_t, 1> bldMask() const = 0;
00069
00070 virtual ndarray<const Partition::Source, 1> sources() const = 0;
00071
00072 virtual uint32_t numBldMaskBits() const = 0;
00073
00074 virtual uint32_t bldMaskIsZero() const = 0;
00075
00076 virtual uint32_t bldMaskIsNotZero() const = 0;
00077
00078 virtual uint32_t bldMaskHasBitSet(uint32_t iBit) const = 0;
00079
00080 virtual uint32_t bldMaskHasBitClear(uint32_t iBit) const = 0;
00081 };
00082 }
00083 }
00084 #endif // PSANA_PARTITION_DDL_H