blob: 2d6ad6155d3aab44c4fd291eab1645b02e3571fa [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef _ATIVEMQ_UTIL_IDGENERATOR_H_
#define _ATIVEMQ_UTIL_IDGENERATOR_H_
#include <activemq/util/Config.h>
#include <string>
namespace activemq {
namespace library {
class ActiveMQCPP;
}
namespace util {
class IdGeneratorKernel;
class AMQCPP_API IdGenerator {
private:
std::string prefix;
mutable std::string seed;
mutable long long sequence;
static IdGeneratorKernel* kernel;
private:
IdGenerator(const IdGenerator&);
IdGenerator& operator=(const IdGenerator&);
public:
IdGenerator();
IdGenerator(const std::string& prefix);
virtual ~IdGenerator();
public:
/**
* @return a newly generated unique id.
*/
std::string generateId() const;
public:
/**
* Since the initialization of this object results in the retrieval of the
* machine's host name we can quickly return it here.
*
* @return the previously retrieved host name.
*/
static std::string getHostname();
/**
* Gets the seed value from a Generated Id, the count portion is removed.
*
* @return the seed portion of the Id, minus the count value.
*/
static std::string getSeedFromId(const std::string& id);
/**
* Gets the count value from a Generated Id, the seed portion is removed.
*
* @return the sequence count portion of the id, minus the seed value.
*/
static long long getSequenceFromId(const std::string& id);
/**
* Compares two generated id values.
*
* @param id1
* The first id to compare, or left hand side.
* @param id2
* The second id to compare, or right hand side.
*
* @return zero if ids are equal or positove if id1 > id2...
*/
static int compare(const std::string& id1, const std::string& id2);
private:
static void initialize();
static void shutdown();
friend class activemq::library::ActiveMQCPP;
};
}}
#endif /* _ATIVEMQ_UTIL_IDGENERATOR_H_ */