OpendTect  6.3
groupedid.h
Go to the documentation of this file.
1 #pragma once
2 
3 /*+
4 ________________________________________________________________________
5 
6  (C) dGB Beheer B.V.; (LICENSE) http://opendtect.org/OpendTect_license.txt
7  Author: Bert
8  Date: June 2016
9 ________________________________________________________________________
10 
11 -*/
12 
13 #include "integerid.h"
14 #include "bufstring.h"
15 
16 
33 template <class GroupNrT,class ObjNrT>
35 {
36 public:
37 
38  typedef GroupNrT GroupNrType;
39  typedef ObjNrT ObjNrType;
42 
44  : groupnr_(-1), objnr_(-1) {}
45  IDWithGroup( GroupID gid, ObjID oid )
46  : groupnr_(gid.getI())
47  , objnr_(oid.getI()) {}
48  virtual ~IDWithGroup() {}
49  static inline IDWithGroup get( GroupNrT grpnr, ObjNrT objnr )
50  { return IDWithGroup(grpnr,objnr); }
51 
52  inline GroupID groupID() const
53  { return GroupID::get(groupnr_); }
54  inline ObjID objID() const
55  { return ObjID::get(objnr_); }
56  inline GroupNrT groupNr() const { return groupnr_; }
57  inline ObjNrT objNr() const { return objnr_; }
58  inline void setGroupID( GroupID id ) { groupnr_ = id.getI();}
59  inline void setObjID( ObjID id ) { objnr_ = id.getI(); }
60  inline void setGroupNr( GroupNrT nr ) { groupnr_ = nr; }
61  inline void setObjNr( ObjNrT nr ) { objnr_ = nr; }
62 
63  inline bool operator ==( const IDWithGroup& oth ) const
64  { return groupnr_ == oth.groupnr_ &&
65  objnr_ == oth.objnr_; }
66  inline bool operator !=( const IDWithGroup& oth ) const
67  { return groupnr_ != oth.groupnr_ ||
68  objnr_ != oth.objnr_; }
69 
70  virtual bool isInvalid() const
71  { return groupnr_<0 || objnr_<0; }
72  inline bool isValid() const { return !isInvalid(); }
73  inline bool hasValidGroupID() const { return groupnr_>=0; }
74  inline bool hasValidObjID() const { return objnr_>=0; }
75  inline void setInvalid()
76  { setInvalidGroup(); setInvalidObj(); }
77  inline void setInvalidGroup() { groupnr_=-1; }
78  inline void setInvalidObj() { objnr_ = -1; }
79  static inline IDWithGroup getInvalid()
80  { return IDWithGroup(-1,-1); }
81 
82  // serialization to string
83  virtual BufferString toString() const;
84  static bool isValidString(const char*);
85  virtual void fromString(const char*);
86  static IDWithGroup getFromString(const char*);
87  // serialization to int64
88  virtual od_int64 toInt64() const;
89  virtual void fromInt64(od_int64);
90  static IDWithGroup getFromInt64(od_int64);
91 
92 protected:
93 
94  GroupNrT groupnr_;
95  ObjNrT objnr_;
96 
97  inline IDWithGroup( GroupNrT gnr, ObjNrT onr )
98  : groupnr_(gnr), objnr_(onr) { /* keep private! */ }
99 
100 };
101 
102 
104 
105 
106 
107  // these functions allow a trailer afteer a pipe symbol
108  // example: 124.8|the_trailer
109 mGlobal(Basic) bool isValidGroupedIDString(const char*);
110 mGlobal(Basic) void getGroupedIDNumbers(const char*,od_int64&,od_int64&,
111  BufferString* trailer=0);
112 
113 
114 template <class GroupNrT,class ObjNrT> inline
115 BufferString IDWithGroup<GroupNrT,ObjNrT>::toString() const
116 {
117  BufferString ret;
118  ret.add( groupnr_ );
119  ret.add( "." );
120  ret.add( objnr_ );
121  return ret;
122 }
123 
124 
125 template <class GroupNrT,class ObjNrT> inline
127 {
128  return isValidGroupedIDString( str );
129 }
130 
131 
132 template <class GroupNrT,class ObjNrT> inline
134 {
135  od_int64 gnr, onr;
136  getGroupedIDNumbers( str, gnr, onr );
137  groupnr_ = (GroupNrT)gnr;
138  objnr_ = (ObjNrT)onr;
139 }
140 
141 
142 template <class GroupNrT,class ObjNrT> inline
145 {
146  IDWithGroup ret = getInvalid();
147  ret.fromString( str );
148  return ret;
149 }
150 
151 
152 template <class GroupNrT,class ObjNrT> inline
154 {
155  return (((od_uint64)groupnr_) << 32) + (((od_uint64)objnr_) & 0xFFFFFFFF);
156 }
157 
158 
159 template <class GroupNrT,class ObjNrT> inline
161 {
162  groupnr_ = (GroupNrT)(i64 >> 32);
163  objnr_ = (ObjNrT)(i64 & 0xFFFFFFFF);
164 }
165 
166 
167 template <class GroupNrT,class ObjNrT> inline
170 {
171  IDWithGroup ret = getInvalid();
172  ret.fromInt64( i64 );
173  return ret;
174 }
static IDWithGroup getInvalid()
Definition: groupedid.h:79
bool getFromString(int &, const char *, int udfval)
static IDWithGroup getFromInt64(int64_t)
Definition: groupedid.h:169
bool hasValidGroupID() const
Definition: groupedid.h:73
bool operator==(const ArrayNDInfo &a1, const ArrayNDInfo &a2)
Definition: arrayndinfo.h:51
#define mGlobal(module)
Definition: commondefs.h:160
void setGroupNr(GroupNrT nr)
Definition: groupedid.h:60
IDWithGroup()
Definition: groupedid.h:43
virtual bool isInvalid() const
Definition: groupedid.h:70
#define od_int64
Definition: plftypes.h:34
bool hasValidObjID() const
Definition: groupedid.h:74
ObjNrT objnr_
Definition: groupedid.h:95
GroupID groupID() const
Definition: groupedid.h:52
virtual void fromString(const char *)
Definition: groupedid.h:133
ObjNrT objNr() const
Definition: groupedid.h:57
int64_t toInt64(const char *s, int64_t defval=0)
Definition: string2.h:73
virtual int64_t toInt64() const
Definition: groupedid.h:153
ObjNrT ObjNrType
Definition: groupedid.h:39
IDWithGroup(GroupID gid, ObjID oid)
Definition: groupedid.h:45
Definition: groupedid.h:40
void setInvalid()
Definition: groupedid.h:75
IDWithGroup(GroupNrT gnr, ObjNrT onr)
Definition: groupedid.h:97
void setGroupID(GroupID id)
Definition: groupedid.h:58
IDWithGroup< short, int > GroupedID
Definition: groupedid.h:103
#define mDefIntegerIDType(IntType, classname)
Definition: integerid.h:83
void setInvalidGroup()
Definition: groupedid.h:77
bool operator!=(const ArrayNDInfo &a1, const ArrayNDInfo &a2)
Definition: arrayndinfo.h:60
bool isValidGroupedIDString(const char *)
BufferString toString(const DBKey &ky)
Definition: dbkey.h:115
GroupNrT groupNr() const
Definition: groupedid.h:56
void getGroupedIDNumbers(const char *, int64_t &, int64_t &, BufferString *trailer=0)
#define od_uint64
Definition: plftypes.h:35
void setObjID(ObjID id)
Definition: groupedid.h:59
static bool isValidString(const char *)
Definition: groupedid.h:126
void setObjNr(ObjNrT nr)
Definition: groupedid.h:61
GroupNrT GroupNrType
Definition: groupedid.h:38
OD::String with its own variable length buffer. The buffer has a guaranteed minimum size...
Definition: bufstring.h:38
GroupNrT groupnr_
Definition: groupedid.h:94
static IDWithGroup getFromString(const char *)
Definition: groupedid.h:144
ObjID objID() const
Definition: groupedid.h:54
BufferString & add(char)
void setInvalidObj()
Definition: groupedid.h:78
bool isValid() const
Definition: groupedid.h:72
Definition: groupedid.h:41
virtual ~IDWithGroup()
Definition: groupedid.h:48
virtual void fromInt64(int64_t)
Definition: groupedid.h:160
#define mClass(module)
Definition: commondefs.h:161
A unique identifier for an object consisting of a group and an ID within the group.
Definition: groupedid.h:34

Generated at for the OpendTect seismic interpretation project. Copyright (C): dGB Beheer B. V. 2017