| 1 | // [License]
 | 
|---|
 | 2 | // The Ariba-Underlay Copyright
 | 
|---|
 | 3 | //
 | 
|---|
 | 4 | // Copyright (c) 2008-2009, Institute of Telematics, UniversitÀt Karlsruhe (TH)
 | 
|---|
 | 5 | //
 | 
|---|
 | 6 | // Institute of Telematics
 | 
|---|
 | 7 | // UniversitÀt Karlsruhe (TH)
 | 
|---|
 | 8 | // Zirkel 2, 76128 Karlsruhe
 | 
|---|
 | 9 | // Germany
 | 
|---|
 | 10 | //
 | 
|---|
 | 11 | // Redistribution and use in source and binary forms, with or without
 | 
|---|
 | 12 | // modification, are permitted provided that the following conditions are
 | 
|---|
 | 13 | // met:
 | 
|---|
 | 14 | //
 | 
|---|
 | 15 | // 1. Redistributions of source code must retain the above copyright
 | 
|---|
 | 16 | // notice, this list of conditions and the following disclaimer.
 | 
|---|
 | 17 | // 2. Redistributions in binary form must reproduce the above copyright
 | 
|---|
 | 18 | // notice, this list of conditions and the following disclaimer in the
 | 
|---|
 | 19 | // documentation and/or other materials provided with the distribution.
 | 
|---|
 | 20 | //
 | 
|---|
 | 21 | // THIS SOFTWARE IS PROVIDED BY THE INSTITUTE OF TELEMATICS ``AS IS'' AND
 | 
|---|
 | 22 | // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
|---|
 | 23 | // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 | 
|---|
 | 24 | // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OF TELEMATICS OR
 | 
|---|
 | 25 | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 | 
|---|
 | 26 | // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 | 
|---|
 | 27 | // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 | 
|---|
 | 28 | // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 | 
|---|
 | 29 | // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 | 
|---|
 | 30 | // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | 
|---|
 | 31 | // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
|---|
 | 32 | //
 | 
|---|
 | 33 | // The views and conclusions contained in the software and documentation
 | 
|---|
 | 34 | // are those of the authors and should not be interpreted as representing
 | 
|---|
 | 35 | // official policies, either expressed or implied, of the Institute of
 | 
|---|
 | 36 | // Telematics.
 | 
|---|
 | 37 | // [License]
 | 
|---|
 | 38 | 
 | 
|---|
 | 39 | #ifndef NAME_H_
 | 
|---|
 | 40 | #define NAME_H_
 | 
|---|
 | 41 | 
 | 
|---|
 | 42 | #include <iostream>
 | 
|---|
 | 43 | #include <memory.h>
 | 
|---|
 | 44 | #include <string>
 | 
|---|
 | 45 | 
 | 
|---|
 | 46 | using std::string;
 | 
|---|
 | 47 | 
 | 
|---|
 | 48 | // forward declaration
 | 
|---|
 | 49 | namespace ariba { class Name; }
 | 
|---|
 | 50 | 
 | 
|---|
 | 51 | std::ostream& operator<<( std::ostream&, const ariba::Name& );
 | 
|---|
 | 52 | 
 | 
|---|
 | 53 | #include "Identifiers.h"
 | 
|---|
 | 54 | 
 | 
|---|
 | 55 | namespace ariba {
 | 
|---|
 | 56 | 
 | 
|---|
 | 57 | /**
 | 
|---|
 | 58 |  * \addtogroup public
 | 
|---|
 | 59 |  * @{
 | 
|---|
 | 60 |  *
 | 
|---|
 | 61 |  * This class is a wrapper for canonical names.
 | 
|---|
 | 62 |  * Currently only human readable names are supported.
 | 
|---|
 | 63 |  *
 | 
|---|
 | 64 |  * @author Sebastian Mies <mies@tm.uka.de>
 | 
|---|
 | 65 |  */
 | 
|---|
 | 66 | class Name {
 | 
|---|
 | 67 |         friend std::ostream& operator<<( std::ostream&, const ::ariba::Name& );
 | 
|---|
 | 68 | public:
 | 
|---|
 | 69 |         static const Name UNSPECIFIED;
 | 
|---|
 | 70 | 
 | 
|---|
 | 71 |         /**
 | 
|---|
 | 72 |          * Constructs a new, yet unspecified name.
 | 
|---|
 | 73 |          */
 | 
|---|
 | 74 |         Name();
 | 
|---|
 | 75 | 
 | 
|---|
 | 76 |         /**
 | 
|---|
 | 77 |          * Constructs a new name. If no length is specified, a human-readable
 | 
|---|
 | 78 |          * name is assumed.
 | 
|---|
 | 79 |          *
 | 
|---|
 | 80 |          * @param name The name
 | 
|---|
 | 81 |          * @param len The optional name length, if binary data is used as name
 | 
|---|
 | 82 |          * @param copy A flag, whether the name's memory needs to be copied
 | 
|---|
 | 83 |          */
 | 
|---|
 | 84 |         Name(const char* name, int len = -1, bool copy = false);
 | 
|---|
 | 85 | 
 | 
|---|
 | 86 |         /**
 | 
|---|
 | 87 |          * Constructs a new name out of a human readable string.
 | 
|---|
 | 88 |          *
 | 
|---|
 | 89 |          * @param name A human readable name
 | 
|---|
 | 90 |          */
 | 
|---|
 | 91 |         Name(string name);
 | 
|---|
 | 92 | 
 | 
|---|
 | 93 |         /**
 | 
|---|
 | 94 |          * The copy constructor.
 | 
|---|
 | 95 |          */
 | 
|---|
 | 96 |         Name(const Name& name);
 | 
|---|
 | 97 | 
 | 
|---|
 | 98 |         /**
 | 
|---|
 | 99 |          * Destroys the name and releases underlying memory if this name is a copy.
 | 
|---|
 | 100 |          */
 | 
|---|
 | 101 |         virtual ~Name();
 | 
|---|
 | 102 | 
 | 
|---|
 | 103 |         /**
 | 
|---|
 | 104 |          * Returns the binary bytes of the name
 | 
|---|
 | 105 |          *
 | 
|---|
 | 106 |          * @return The binary data
 | 
|---|
 | 107 |          */
 | 
|---|
 | 108 |         const uint8_t* bytes() const;
 | 
|---|
 | 109 | 
 | 
|---|
 | 110 |         /**
 | 
|---|
 | 111 |          * Returns the length of the name in bytes.
 | 
|---|
 | 112 |          *
 | 
|---|
 | 113 |          * @return The length of the name
 | 
|---|
 | 114 |          */
 | 
|---|
 | 115 |         const size_t length() const;
 | 
|---|
 | 116 | 
 | 
|---|
 | 117 |         /**
 | 
|---|
 | 118 |          * The common assign operator
 | 
|---|
 | 119 |          */
 | 
|---|
 | 120 |         Name& operator=( const Name& name );
 | 
|---|
 | 121 | 
 | 
|---|
 | 122 |         /**
 | 
|---|
 | 123 |          * The common implementation of the "equal" operator.
 | 
|---|
 | 124 |          */
 | 
|---|
 | 125 |         bool operator==(const Name& name) const;
 | 
|---|
 | 126 | 
 | 
|---|
 | 127 |         /**
 | 
|---|
 | 128 |          * The common implementation of the "unequal" operator.
 | 
|---|
 | 129 |          */
 | 
|---|
 | 130 |         bool operator!=(const Name& name) const;
 | 
|---|
 | 131 | 
 | 
|---|
 | 132 |         /**
 | 
|---|
 | 133 |          * Returns true, if the name is yet unspecified
 | 
|---|
 | 134 |          */
 | 
|---|
 | 135 |         bool isUnspecified() const;
 | 
|---|
 | 136 | 
 | 
|---|
 | 137 |         /**
 | 
|---|
 | 138 |          * Returns a random name.
 | 
|---|
 | 139 |          */
 | 
|---|
 | 140 |         static Name random();
 | 
|---|
 | 141 | 
 | 
|---|
 | 142 |         /**
 | 
|---|
 | 143 |          * Returns a human-readable representation of this name
 | 
|---|
 | 144 |          */
 | 
|---|
 | 145 |         string toString() const;
 | 
|---|
 | 146 | 
 | 
|---|
 | 147 |         // hack: to be changed!
 | 
|---|
 | 148 |         NodeID toNodeId() const;
 | 
|---|
 | 149 | 
 | 
|---|
 | 150 |         // hack: to be changed!
 | 
|---|
 | 151 |         SpoVNetID toSpoVNetId() const;
 | 
|---|
 | 152 | 
 | 
|---|
 | 153 | private:
 | 
|---|
 | 154 |         uint8_t* _bytes; //< internal pointer
 | 
|---|
 | 155 |         int _length; //< length of internal pointer
 | 
|---|
 | 156 |         bool _copy; //< is the buffer a real copy
 | 
|---|
 | 157 |         bool _hreadable; //< is the name human readable
 | 
|---|
 | 158 | 
 | 
|---|
 | 159 |         void init(const char* name, int len, bool copy, bool hreadable);
 | 
|---|
 | 160 | };
 | 
|---|
 | 161 | 
 | 
|---|
 | 162 | } // namespace ariba
 | 
|---|
 | 163 | 
 | 
|---|
 | 164 | /** @} */
 | 
|---|
 | 165 | 
 | 
|---|
 | 166 | #endif /* NAME_H_ */
 | 
|---|