Compare commits

...

No commits in common. "main" and "gh-pages" have entirely different histories.

371 changed files with 9382 additions and 6527 deletions

32
.gitignore vendored
View File

@ -1,32 +0,0 @@
###################################
# backup files
###################################
*~
*.swp
*.old
*.bck
###################################
# compiled files
###################################
*.pyc
###################################
# Packages #
###################################
# it's better to unpack these files and commit the raw source
# git has its own built in compression methods
*.7z
*.dmg
*.gz
*.iso
*.jar
*.rar
*.tar
*.zip
###################################
# out folder
###################################
out/

373
LICENSE
View File

@ -1,373 +0,0 @@
Mozilla Public License Version 2.0
==================================
1. Definitions
--------------
1.1. "Contributor"
means each individual or legal entity that creates, contributes to
the creation of, or owns Covered Software.
1.2. "Contributor Version"
means the combination of the Contributions of others (if any) used
by a Contributor and that particular Contributor's Contribution.
1.3. "Contribution"
means Covered Software of a particular Contributor.
1.4. "Covered Software"
means Source Code Form to which the initial Contributor has attached
the notice in Exhibit A, the Executable Form of such Source Code
Form, and Modifications of such Source Code Form, in each case
including portions thereof.
1.5. "Incompatible With Secondary Licenses"
means
(a) that the initial Contributor has attached the notice described
in Exhibit B to the Covered Software; or
(b) that the Covered Software was made available under the terms of
version 1.1 or earlier of the License, but not also under the
terms of a Secondary License.
1.6. "Executable Form"
means any form of the work other than Source Code Form.
1.7. "Larger Work"
means a work that combines Covered Software with other material, in
a separate file or files, that is not Covered Software.
1.8. "License"
means this document.
1.9. "Licensable"
means having the right to grant, to the maximum extent possible,
whether at the time of the initial grant or subsequently, any and
all of the rights conveyed by this License.
1.10. "Modifications"
means any of the following:
(a) any file in Source Code Form that results from an addition to,
deletion from, or modification of the contents of Covered
Software; or
(b) any new file in Source Code Form that contains any Covered
Software.
1.11. "Patent Claims" of a Contributor
means any patent claim(s), including without limitation, method,
process, and apparatus claims, in any patent Licensable by such
Contributor that would be infringed, but for the grant of the
License, by the making, using, selling, offering for sale, having
made, import, or transfer of either its Contributions or its
Contributor Version.
1.12. "Secondary License"
means either the GNU General Public License, Version 2.0, the GNU
Lesser General Public License, Version 2.1, the GNU Affero General
Public License, Version 3.0, or any later versions of those
licenses.
1.13. "Source Code Form"
means the form of the work preferred for making modifications.
1.14. "You" (or "Your")
means an individual or a legal entity exercising rights under this
License. For legal entities, "You" includes any entity that
controls, is controlled by, or is under common control with You. For
purposes of this definition, "control" means (a) the power, direct
or indirect, to cause the direction or management of such entity,
whether by contract or otherwise, or (b) ownership of more than
fifty percent (50%) of the outstanding shares or beneficial
ownership of such entity.
2. License Grants and Conditions
--------------------------------
2.1. Grants
Each Contributor hereby grants You a world-wide, royalty-free,
non-exclusive license:
(a) under intellectual property rights (other than patent or trademark)
Licensable by such Contributor to use, reproduce, make available,
modify, display, perform, distribute, and otherwise exploit its
Contributions, either on an unmodified basis, with Modifications, or
as part of a Larger Work; and
(b) under Patent Claims of such Contributor to make, use, sell, offer
for sale, have made, import, and otherwise transfer either its
Contributions or its Contributor Version.
2.2. Effective Date
The licenses granted in Section 2.1 with respect to any Contribution
become effective for each Contribution on the date the Contributor first
distributes such Contribution.
2.3. Limitations on Grant Scope
The licenses granted in this Section 2 are the only rights granted under
this License. No additional rights or licenses will be implied from the
distribution or licensing of Covered Software under this License.
Notwithstanding Section 2.1(b) above, no patent license is granted by a
Contributor:
(a) for any code that a Contributor has removed from Covered Software;
or
(b) for infringements caused by: (i) Your and any other third party's
modifications of Covered Software, or (ii) the combination of its
Contributions with other software (except as part of its Contributor
Version); or
(c) under Patent Claims infringed by Covered Software in the absence of
its Contributions.
This License does not grant any rights in the trademarks, service marks,
or logos of any Contributor (except as may be necessary to comply with
the notice requirements in Section 3.4).
2.4. Subsequent Licenses
No Contributor makes additional grants as a result of Your choice to
distribute the Covered Software under a subsequent version of this
License (see Section 10.2) or under the terms of a Secondary License (if
permitted under the terms of Section 3.3).
2.5. Representation
Each Contributor represents that the Contributor believes its
Contributions are its original creation(s) or it has sufficient rights
to grant the rights to its Contributions conveyed by this License.
2.6. Fair Use
This License is not intended to limit any rights You have under
applicable copyright doctrines of fair use, fair dealing, or other
equivalents.
2.7. Conditions
Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
in Section 2.1.
3. Responsibilities
-------------------
3.1. Distribution of Source Form
All distribution of Covered Software in Source Code Form, including any
Modifications that You create or to which You contribute, must be under
the terms of this License. You must inform recipients that the Source
Code Form of the Covered Software is governed by the terms of this
License, and how they can obtain a copy of this License. You may not
attempt to alter or restrict the recipients' rights in the Source Code
Form.
3.2. Distribution of Executable Form
If You distribute Covered Software in Executable Form then:
(a) such Covered Software must also be made available in Source Code
Form, as described in Section 3.1, and You must inform recipients of
the Executable Form how they can obtain a copy of such Source Code
Form by reasonable means in a timely manner, at a charge no more
than the cost of distribution to the recipient; and
(b) You may distribute such Executable Form under the terms of this
License, or sublicense it under different terms, provided that the
license for the Executable Form does not attempt to limit or alter
the recipients' rights in the Source Code Form under this License.
3.3. Distribution of a Larger Work
You may create and distribute a Larger Work under terms of Your choice,
provided that You also comply with the requirements of this License for
the Covered Software. If the Larger Work is a combination of Covered
Software with a work governed by one or more Secondary Licenses, and the
Covered Software is not Incompatible With Secondary Licenses, this
License permits You to additionally distribute such Covered Software
under the terms of such Secondary License(s), so that the recipient of
the Larger Work may, at their option, further distribute the Covered
Software under the terms of either this License or such Secondary
License(s).
3.4. Notices
You may not remove or alter the substance of any license notices
(including copyright notices, patent notices, disclaimers of warranty,
or limitations of liability) contained within the Source Code Form of
the Covered Software, except that You may alter any license notices to
the extent required to remedy known factual inaccuracies.
3.5. Application of Additional Terms
You may choose to offer, and to charge a fee for, warranty, support,
indemnity or liability obligations to one or more recipients of Covered
Software. However, You may do so only on Your own behalf, and not on
behalf of any Contributor. You must make it absolutely clear that any
such warranty, support, indemnity, or liability obligation is offered by
You alone, and You hereby agree to indemnify every Contributor for any
liability incurred by such Contributor as a result of warranty, support,
indemnity or liability terms You offer. You may include additional
disclaimers of warranty and limitations of liability specific to any
jurisdiction.
4. Inability to Comply Due to Statute or Regulation
---------------------------------------------------
If it is impossible for You to comply with any of the terms of this
License with respect to some or all of the Covered Software due to
statute, judicial order, or regulation then You must: (a) comply with
the terms of this License to the maximum extent possible; and (b)
describe the limitations and the code they affect. Such description must
be placed in a text file included with all distributions of the Covered
Software under this License. Except to the extent prohibited by statute
or regulation, such description must be sufficiently detailed for a
recipient of ordinary skill to be able to understand it.
5. Termination
--------------
5.1. The rights granted under this License will terminate automatically
if You fail to comply with any of its terms. However, if You become
compliant, then the rights granted under this License from a particular
Contributor are reinstated (a) provisionally, unless and until such
Contributor explicitly and finally terminates Your grants, and (b) on an
ongoing basis, if such Contributor fails to notify You of the
non-compliance by some reasonable means prior to 60 days after You have
come back into compliance. Moreover, Your grants from a particular
Contributor are reinstated on an ongoing basis if such Contributor
notifies You of the non-compliance by some reasonable means, this is the
first time You have received notice of non-compliance with this License
from such Contributor, and You become compliant prior to 30 days after
Your receipt of the notice.
5.2. If You initiate litigation against any entity by asserting a patent
infringement claim (excluding declaratory judgment actions,
counter-claims, and cross-claims) alleging that a Contributor Version
directly or indirectly infringes any patent, then the rights granted to
You by any and all Contributors for the Covered Software under Section
2.1 of this License shall terminate.
5.3. In the event of termination under Sections 5.1 or 5.2 above, all
end user license agreements (excluding distributors and resellers) which
have been validly granted by You or Your distributors under this License
prior to termination shall survive termination.
************************************************************************
* *
* 6. Disclaimer of Warranty *
* ------------------------- *
* *
* Covered Software is provided under this License on an "as is" *
* basis, without warranty of any kind, either expressed, implied, or *
* statutory, including, without limitation, warranties that the *
* Covered Software is free of defects, merchantable, fit for a *
* particular purpose or non-infringing. The entire risk as to the *
* quality and performance of the Covered Software is with You. *
* Should any Covered Software prove defective in any respect, You *
* (not any Contributor) assume the cost of any necessary servicing, *
* repair, or correction. This disclaimer of warranty constitutes an *
* essential part of this License. No use of any Covered Software is *
* authorized under this License except under this disclaimer. *
* *
************************************************************************
************************************************************************
* *
* 7. Limitation of Liability *
* -------------------------- *
* *
* Under no circumstances and under no legal theory, whether tort *
* (including negligence), contract, or otherwise, shall any *
* Contributor, or anyone who distributes Covered Software as *
* permitted above, be liable to You for any direct, indirect, *
* special, incidental, or consequential damages of any character *
* including, without limitation, damages for lost profits, loss of *
* goodwill, work stoppage, computer failure or malfunction, or any *
* and all other commercial damages or losses, even if such party *
* shall have been informed of the possibility of such damages. This *
* limitation of liability shall not apply to liability for death or *
* personal injury resulting from such party's negligence to the *
* extent applicable law prohibits such limitation. Some *
* jurisdictions do not allow the exclusion or limitation of *
* incidental or consequential damages, so this exclusion and *
* limitation may not apply to You. *
* *
************************************************************************
8. Litigation
-------------
Any litigation relating to this License may be brought only in the
courts of a jurisdiction where the defendant maintains its principal
place of business and such litigation shall be governed by laws of that
jurisdiction, without reference to its conflict-of-law provisions.
Nothing in this Section shall prevent a party's ability to bring
cross-claims or counter-claims.
9. Miscellaneous
----------------
This License represents the complete agreement concerning the subject
matter hereof. If any provision of this License is held to be
unenforceable, such provision shall be reformed only to the extent
necessary to make it enforceable. Any law or regulation which provides
that the language of a contract shall be construed against the drafter
shall not be used to construe this License against a Contributor.
10. Versions of the License
---------------------------
10.1. New Versions
Mozilla Foundation is the license steward. Except as provided in Section
10.3, no one other than the license steward has the right to modify or
publish new versions of this License. Each version will be given a
distinguishing version number.
10.2. Effect of New Versions
You may distribute the Covered Software under the terms of the version
of the License under which You originally received the Covered Software,
or under the terms of any subsequent version published by the license
steward.
10.3. Modified Versions
If you create software not governed by this License, and you want to
create a new license for such software, you may create and use a
modified version of this License if you rename the license and remove
any references to the name of the license steward (except to note that
such modified license differs from this License).
10.4. Distributing Source Code Form that is Incompatible With Secondary
Licenses
If You choose to distribute Source Code Form that is Incompatible With
Secondary Licenses under the terms of this version of the License, the
notice described in Exhibit B of this License must be attached.
Exhibit A - Source Code Form License Notice
-------------------------------------------
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
If it is not possible or desirable to put the notice in a particular
file, then You may include the notice in a location (such as a LICENSE
file in a relevant directory) where a recipient would be likely to look
for such a notice.
You may add additional accurate notices of copyright ownership.
Exhibit B - "Incompatible With Secondary Licenses" Notice
---------------------------------------------------------
This Source Code Form is "Incompatible With Secondary Licenses", as
defined by the Mozilla Public License, v. 2.0.

View File

@ -1,20 +1,4 @@
# audio-drain
(MPL v2.0) audio: processing pipe for simple agorithms (resampling, change format, reorder channel, volume ...) 1 flow
------------------------------
[![Build Status](https://travis-ci.org/musicdsp/audio-drain.svg?branch=master)](https://travis-ci.org/musicdsp/audio-drain)
Nothing else ...
License (MPL v2.0)
=====================
Copyright audio Edouard DUPIN
Licensed under the Mozilla Public 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
https://www.mozilla.org/MPL/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.

View File

@ -1,127 +0,0 @@
/** @file
* @author Edouard DUPIN
* @copyright 2011, Edouard DUPIN, all right reserved
* @license MPL v2.0 (see license file)
*/
#include <audio/drain/Algo.hpp>
#include <etk/Function.hpp>
#include "debug.hpp"
audio::drain::Algo::Algo() :
m_temporary(false),
m_outputData(),
m_formatSize(0),
m_needProcess(false) {
}
void audio::drain::Algo::init() {
// set notification callback :
m_input.setCallback([=](){audio::drain::Algo::configurationChangeLocal();});
m_output.setCallback([=](){audio::drain::Algo::configurationChangeLocal();});
// first configure ==> update the internal parameters
configurationChange();
}
void audio::drain::Algo::configurationChange() {
m_needProcess = false;
if (m_input.getFormat() != m_output.getFormat()) {
m_needProcess = true;
}
if (m_input.getMap() != m_output.getMap()) {
m_needProcess = true;
}
if (m_input.getFrequency() != m_output.getFrequency()) {
m_needProcess = true;
}
switch (m_output.getFormat()) {
case audio::format_int8:
m_formatSize = sizeof(int8_t);
break;
case audio::format_int16:
m_formatSize = sizeof(int16_t);
break;
case audio::format_int24:
case audio::format_int16_on_int32:
case audio::format_int32:
m_formatSize = sizeof(int32_t);
break;
case audio::format_float:
m_formatSize = sizeof(float);
break;
case audio::format_double:
m_formatSize = sizeof(double);
break;
case audio::format_unknow:
DRAIN_VERBOSE("format not configured...");
m_formatSize = 8;
break;
}
}
etk::String audio::drain::Algo::getDotDesc() {
etk::String out;
if (m_input.getFormat() != m_output.getFormat()) {
out += "\\nformat: " + etk::toString(m_input.getFormat()) + "->" + etk::toString(m_output.getFormat());
}
if (m_input.getMap() != m_output.getMap()) {
out += "\\nmap: " + etk::toString(m_input.getMap()) + "->" + etk::toString(m_output.getMap());
}
if (m_input.getFrequency() != m_output.getFrequency()) {
out += "\\nsamplerate: " + etk::toString(m_input.getFrequency()) + "->" + etk::toString(m_output.getFrequency());
}
return out;
}
size_t audio::drain::Algo::needInputData(size_t _output) {
size_t input = _output;
/* NOT good at all ...
if (m_input.getFormat() != m_output.getFormat()) {
int32_t inputSize = 3;
switch (m_input.getFormat()) {
case format_int16:
inputSize = sizeof(int16_t);
break;
case format_int16_on_int32:
case format_int32:
inputSize = sizeof(int32_t);
break;
case format_float:
inputSize = sizeof(float);
break;
}
if (inputSize != m_formatSize) {
input *= inputSize;
input /= m_formatSize;
}
}
*/
/*
if (m_input.getMap().size() != m_output.getMap().size()) {
input *= m_input.getMap().size();
input /= m_output.getMap().size();
}
*/
if (m_input.getFrequency() != m_output.getFrequency()) {
input *= m_input.getFrequency();
input /= m_output.getFrequency();
// to prevent missing data in the resampler
input += 2;
}
return input;
}
void audio::drain::Algo::setStatusFunction(algoStatusFunction _newFunction) {
m_statusFunction = _newFunction;
}
void audio::drain::Algo::generateStatus(const etk::String& _status) {
if (m_statusFunction != null) {
if (m_name.size() == 0) {
m_statusFunction(m_type, _status);
} else {
m_statusFunction(m_name, _status);
}
}
}

View File

@ -1,221 +0,0 @@
/** @file
* @author Edouard DUPIN
* @copyright 2011, Edouard DUPIN, all right reserved
* @license MPL v2.0 (see license file)
*/
#pragma once
#include <etk/String.hpp>
#include <etk/Vector.hpp>
#include <audio/format.hpp>
#include <audio/channel.hpp>
#include <echrono/Steady.hpp>
#include <etk/Function.hpp>
#include <ememory/memory.hpp>
#include "AutoLogInOut.hpp"
#include "IOFormatInterface.hpp"
#include <audio/Time.hpp>
#include <audio/Duration.hpp>
#include "debug.hpp"
/**
* @brief Audio library namespace
*/
namespace audio {
/**
* @brief audio-algo library namespace
*/
namespace drain{
typedef etk::Function<void (const etk::String& _origin, const etk::String& _status)> algoStatusFunction;
class Algo : public ememory::EnableSharedFromThis<Algo> {
private:
etk::String m_name;
public:
const etk::String& getName() const {
return m_name;
}
void setName(const etk::String& _name) {
m_name = _name;
}
protected:
etk::String m_type;
public:
const etk::String& getType() const {
return m_type;
}
void setType(const etk::String& _type) {
m_type = _type;
}
public:
virtual etk::String getDotDesc();
private:
bool m_temporary;
public:
void setTemporary() {
m_temporary = true;
}
bool getTemporary() const {
return m_temporary;
}
private:
algoStatusFunction m_statusFunction;
public:
void setStatusFunction(algoStatusFunction _newFunction);
protected:
void generateStatus(const etk::String& _status);
protected:
etk::Vector<int8_t> m_outputData;
int8_t m_formatSize; //!< sample size
/**
* @brief Constructor
*/
Algo();
void init();
public:
/**
* @brief Destructor
*/
virtual ~Algo() {};
protected:
bool m_needProcess; //!< if no change, then no need to process, just forward buffer...
IOFormatInterface m_input; //!< Input audio property
public:
void setInputFormat(const IOFormatInterface& _format) {
m_input.set(_format.getMap(), _format.getFormat(), _format.getFrequency());
}
const IOFormatInterface& getInputFormat() const {
return m_input;
}
IOFormatInterface& getInputFormat() {
return m_input;
}
protected:
IOFormatInterface m_output; //!< Output audio property
public:
void setOutputFormat(const IOFormatInterface& _format) {
m_output.set(_format.getMap(), _format.getFormat(), _format.getFrequency());
}
const IOFormatInterface& getOutputFormat() const {
return m_output;
}
IOFormatInterface& getOutputFormat() {
return m_output;
}
private:
void configurationChangeLocal() {
if ( m_output.getConfigured() == true
&& m_output.getConfigured() == true) {
configurationChange();
}
}
public:
/**
* @brief Called when a parameter change
*/
virtual void configurationChange();
public:
/**
* @brief Process Algorithm
* @param[in] _time Current buffer Time
* @param[in] _input input pointer data (not free)
* @param[in] _inputNbChunk Number of chunk in the buffer
* @param[in] _output Output buffer (provide here) Do not free (can be the input buffer)
* @param[in] _outputNbChunk Number of chunk in the output buffer
* @return true The process is done corectly
* @return false An error occured
*/
virtual bool process(audio::Time& _time,
void* _input,
size_t _inputNbChunk,
void*& _output,
size_t& _outputNbChunk) = 0;
/**
* @brief To approximatively have the correct input of data of every algo ge call it to have an aproxomation of input data needed.
* @param[in] _output number of chunk estimate in output
* @return number of sample needed to have nearly the good number of sample
*/
// TODO : Manage the change of the timestamp ...
virtual size_t needInputData(size_t _output);
protected: // note when nothing ==> support all type
etk::Vector<audio::format> m_supportedFormat;
public:
virtual etk::Vector<audio::format> getFormatSupportedInput() {
if (m_output.getConfigured() == true) {
etk::Vector<audio::format> out;
out.pushBack(m_output.getFormat());
return out;
}
return m_supportedFormat;
};
virtual etk::Vector<audio::format> getFormatSupportedOutput() {
if (m_input.getConfigured() == true) {
etk::Vector<audio::format> out;
out.pushBack(m_input.getFormat());
return out;
}
return m_supportedFormat;
};
protected: // note when nothing ==> support all type
etk::Vector<etk::Vector<audio::channel> > m_supportedMap;
public:
virtual etk::Vector<etk::Vector<audio::channel> > getMapSupportedInput() {
if (m_output.getConfigured() == true) {
etk::Vector<etk::Vector<audio::channel> > out;
out.pushBack(m_output.getMap());
return out;
}
return m_supportedMap;
};
virtual etk::Vector<etk::Vector<audio::channel> > getMapSupportedOutput() {
if (m_input.getConfigured() == true) {
etk::Vector<etk::Vector<audio::channel> > out;
out.pushBack(m_input.getMap());
return out;
}
return m_supportedMap;
};
protected: // note when nothing ==> support all type
etk::Vector<float> m_supportedFrequency;
public:
virtual etk::Vector<float> getFrequencySupportedInput() {
if (m_output.getConfigured() == true) {
etk::Vector<float> out;
out.pushBack(m_output.getFrequency());
return out;
}
return m_supportedFrequency;
};
virtual etk::Vector<float> getFrequencySupportedOutput() {
if (m_input.getConfigured() == true) {
etk::Vector<float> out;
out.pushBack(m_input.getFrequency());
return out;
}
return m_supportedFrequency;
};
public:
/**
* @brief Set a parameter in the stream flow
* @param[in] _parameter Parameter name.
* @param[in] _value Value to set.
* @return true set done
* @return false An error occured
*/
virtual bool setParameter(const etk::String& _parameter, const etk::String& _value) { return false; }
/**
* @brief Get a parameter value
* @param[in] _parameter Parameter name.
* @return The requested value.
*/
virtual etk::String getParameter(const etk::String& _parameter) const { return "[ERROR]"; }
/**
* @brief Get a parameter value
* @param[in] _parameter Parameter name.
* @return The requested value.
*/
virtual etk::String getParameterProperty(const etk::String& _parameter) const { return "[ERROR]"; };
};
}
}
#include "debugRemove.hpp"

View File

@ -1,17 +0,0 @@
/** @file
* @author Edouard DUPIN
* @copyright 2011, Edouard DUPIN, all right reserved
* @license MPL v2.0 (see license file)
*/
#include "AutoLogInOut.hpp"
#include "debug.hpp"
audio::drain::AutoLogInOut::AutoLogInOut(const etk::String& _value) :
m_value(_value) {
DRAIN_VERBOSE(" '" << m_value << "' [START]");
}
audio::drain::AutoLogInOut::~AutoLogInOut() {
DRAIN_VERBOSE(" '" << m_value << "' [STOP]");
}

View File

@ -1,24 +0,0 @@
/** @file
* @author Edouard DUPIN
* @copyright 2011, Edouard DUPIN, all right reserved
* @license MPL v2.0 (see license file)
*/
#pragma once
#include <etk/String.hpp>
#include "debug.hpp"
namespace audio {
namespace drain{
class AutoLogInOut {
private:
etk::String m_value;
public:
AutoLogInOut(const etk::String& _value);
~AutoLogInOut();
};
}
}
#include "debugRemove.hpp"

View File

@ -1,208 +0,0 @@
/** @file
* @author Edouard DUPIN
* @copyright 2011, Edouard DUPIN, all right reserved
* @license MPL v2.0 (see license file)
*/
#include <audio/drain/ChannelReorder.hpp>
#include "debug.hpp"
audio::drain::ChannelReorder::ChannelReorder() {
}
void audio::drain::ChannelReorder::init() {
audio::drain::Algo::init();
m_type = "ChannelReorder";
}
ememory::SharedPtr<audio::drain::ChannelReorder> audio::drain::ChannelReorder::create() {
ememory::SharedPtr<audio::drain::ChannelReorder> tmp(ETK_NEW(audio::drain::ChannelReorder));
tmp->init();
return tmp;
}
void audio::drain::ChannelReorder::configurationChange() {
audio::drain::AutoLogInOut("ChannelReorder (config)");
audio::drain::Algo::configurationChange();
if (m_input.getFormat() != m_output.getFormat()) {
DRAIN_ERROR("can not support Format Change ...");
m_needProcess = false;
}
if (m_input.getFrequency() != m_output.getFrequency()) {
DRAIN_ERROR("can not support frequency Change ...");
m_needProcess = false;
}
if (m_input.getMap() == m_output.getMap()) {
// nothing to process...
m_needProcess = false;
DRAIN_INFO(" no need to convert ... " << m_input.getMap() << " ==> " << m_output.getMap());
return;
}
}
bool audio::drain::ChannelReorder::process(audio::Time& _time,
void* _input,
size_t _inputNbChunk,
void*& _output,
size_t& _outputNbChunk) {
audio::drain::AutoLogInOut tmpLog("ChannelReorder");
_outputNbChunk = _inputNbChunk;
// check if we need to process:
if (m_needProcess == false) {
_output = _input;
return true;
}
if (_input == null) {
_output = &(m_outputData[0]);
_outputNbChunk = 0;
DRAIN_ERROR("null pointer input ... ");
return false;
}
m_outputData.resize(_outputNbChunk*m_output.getMap().size()*m_formatSize);
_output = &(m_outputData[0]);
// real process: (only depend of data size):
switch (m_output.getFormat()) {
case audio::format_int8:
{
DRAIN_VERBOSE("convert " << m_input.getMap() << " ==> " << m_output.getMap() << " format=" << int32_t(m_formatSize));
int8_t* in = static_cast<int8_t*>(_input);
int8_t* out = static_cast<int8_t*>(_output);
for (size_t kkk=0; kkk<m_output.getMap().size(); ++kkk) {
int32_t convertId = -1;
if ( m_input.getMap().size() == 1
&& m_input.getMap()[0] == audio::channel_frontCenter) {
convertId = 0;
} else {
for (size_t jjj=0; jjj<m_input.getMap().size(); ++jjj) {
if (m_output.getMap()[kkk] == m_input.getMap()[jjj]) {
convertId = jjj;
break;
}
}
}
DRAIN_VERBOSE(" " << convertId << " ==> " << kkk);
if (convertId == -1) {
for (size_t iii=0; iii<_outputNbChunk; ++iii) {
out[iii*m_output.getMap().size()+kkk] = 0;
}
} else {
for (size_t iii=0; iii<_outputNbChunk; ++iii) {
out[iii*m_output.getMap().size()+kkk] = in[iii*m_input.getMap().size()+convertId];
}
}
}
}
break;
default:
case audio::format_int16:
if (m_output.getMap().size() == 1) {
DRAIN_VERBOSE("convert " << m_input.getMap() << " ==> " << m_output.getMap() << " format=" << int32_t(m_formatSize));
int16_t* in = static_cast<int16_t*>(_input);
int16_t* out = static_cast<int16_t*>(_output);
for (size_t iii=0; iii<_outputNbChunk; ++iii) {
int32_t val = 0;
for (size_t jjj=0; jjj<m_input.getMap().size(); ++jjj) {
val += in[iii*m_input.getMap().size()+jjj];
}
out[iii] = val/m_input.getMap().size();
}
} else {
DRAIN_VERBOSE("convert " << m_input.getMap() << " ==> " << m_output.getMap() << " format=" << int32_t(m_formatSize));
int16_t* in = static_cast<int16_t*>(_input);
int16_t* out = static_cast<int16_t*>(_output);
for (size_t kkk=0; kkk<m_output.getMap().size(); ++kkk) {
int32_t convertId = -1;
if ( m_input.getMap().size() == 1
&& m_input.getMap()[0] == audio::channel_frontCenter) {
convertId = 0;
} else {
for (size_t jjj=0; jjj<m_input.getMap().size(); ++jjj) {
if (m_output.getMap()[kkk] == m_input.getMap()[jjj]) {
convertId = jjj;
break;
}
}
}
DRAIN_VERBOSE(" " << convertId << " ==> " << kkk);
if (convertId == -1) {
for (size_t iii=0; iii<_outputNbChunk; ++iii) {
out[iii*m_output.getMap().size()+kkk] = 0;
}
} else {
for (size_t iii=0; iii<_outputNbChunk; ++iii) {
out[iii*m_output.getMap().size()+kkk] = in[iii*m_input.getMap().size()+convertId];
}
}
}
}
break;
case audio::format_int16_on_int32:
case audio::format_int24:
case audio::format_int32:
case audio::format_float:
{
DRAIN_VERBOSE("convert (2) " << m_input.getMap() << " ==> " << m_output.getMap());
uint32_t* in = static_cast<uint32_t*>(_input);
uint32_t* out = static_cast<uint32_t*>(_output);
for (size_t kkk=0; kkk<m_output.getMap().size(); ++kkk) {
int32_t convertId = -1;
if ( m_input.getMap().size() == 1
&& m_input.getMap()[0] == audio::channel_frontCenter) {
convertId = 0;
} else {
for (size_t jjj=0; jjj<m_input.getMap().size(); ++jjj) {
if (m_output.getMap()[kkk] == m_input.getMap()[jjj]) {
convertId = jjj;
break;
}
}
}
if (convertId == -1) {
for (size_t iii=0; iii<_outputNbChunk; ++iii) {
out[iii*m_output.getMap().size()+kkk] = 0;
}
} else {
for (size_t iii=0; iii<_outputNbChunk; ++iii) {
out[iii*m_output.getMap().size()+kkk] = in[iii*m_input.getMap().size()+convertId];
}
}
}
}
break;
case audio::format_double:
{
DRAIN_VERBOSE("convert (2) " << m_input.getMap() << " ==> " << m_output.getMap());
uint64_t* in = static_cast<uint64_t*>(_input);
uint64_t* out = static_cast<uint64_t*>(_output);
for (size_t kkk=0; kkk<m_output.getMap().size(); ++kkk) {
int32_t convertId = -1;
if ( m_input.getMap().size() == 1
&& m_input.getMap()[0] == audio::channel_frontCenter) {
convertId = 0;
} else {
for (size_t jjj=0; jjj<m_input.getMap().size(); ++jjj) {
if (m_output.getMap()[kkk] == m_input.getMap()[jjj]) {
convertId = jjj;
break;
}
}
}
if (convertId == -1) {
for (size_t iii=0; iii<_outputNbChunk; ++iii) {
out[iii*m_output.getMap().size()+kkk] = 0;
}
} else {
for (size_t iii=0; iii<_outputNbChunk; ++iii) {
out[iii*m_output.getMap().size()+kkk] = in[iii*m_input.getMap().size()+convertId];
}
}
}
}
break;
}
return true;
}

View File

@ -1,36 +0,0 @@
/** @file
* @author Edouard DUPIN
* @copyright 2011, Edouard DUPIN, all right reserved
* @license MPL v2.0 (see license file)
*/
#pragma once
#include <audio/drain/Algo.hpp>
namespace audio {
namespace drain{
class ChannelReorder : public audio::drain::Algo {
protected:
/**
* @brief Constructor
*/
ChannelReorder();
void init();
public:
static ememory::SharedPtr<audio::drain::ChannelReorder> create();
/**
* @brief Destructor
*/
virtual ~ChannelReorder() {};
protected:
virtual void configurationChange();
public:
virtual bool process(audio::Time& _time,
void* _input,
size_t _inputNbChunk,
void*& _output,
size_t& _outputNbChunk);
};
}
}

View File

@ -1,295 +0,0 @@
/** @file
* @author Edouard DUPIN
* @copyright 2011, Edouard DUPIN, all right reserved
* @license MPL v2.0 (see license file)
*/
#include <audio/drain/CircularBuffer.hpp>
#include <audio/drain/debug.hpp>
audio::drain::CircularBuffer::CircularBuffer(const audio::drain::CircularBuffer& _obj) :
m_data(),
m_write(null),
m_read(null),
m_timeRead(),
m_capacity(0),
m_sizeChunk(0),
m_size(0) {
DRAIN_CRITICAL("error");
};
/**
* @brief copy operator.
*/
audio::drain::CircularBuffer& audio::drain::CircularBuffer::operator=(const audio::drain::CircularBuffer& _obj) {
DRAIN_CRITICAL("error");
return *this;
};
audio::drain::CircularBuffer::CircularBuffer() :
m_data(),
m_write(null),
m_read(null),
m_timeRead(),
m_capacity(0),
m_sizeChunk(0),
m_size(0) {
// nothing to do ...
}
audio::drain::CircularBuffer::~CircularBuffer() {
m_data.clear();
m_read = null;
m_write = null;
}
void audio::drain::CircularBuffer::setCapacity(size_t _capacity, size_t _chunkSize, uint32_t _frequency) {
if ( _chunkSize == m_sizeChunk
&& _capacity == m_capacity) {
clear();
return;
}
DRAIN_DEBUG("buffer setCapacity(" << _capacity << "," << _chunkSize << ")");
if (_capacity == 0) {
DRAIN_ERROR("set a buffer capacity with 0 data ... (reset default at 4096)");
_capacity = 4096;
}
if (_chunkSize == 0) {
DRAIN_ERROR("set a buffer capacity with chunksize = 0 ... (reset default at 8)");
_chunkSize = 8;
}
m_data.clear();
m_write = null;
m_read = null;
m_frequency = _frequency;
m_capacity = _capacity;
m_sizeChunk = _chunkSize;
m_size = 0;
if ( _capacity == 0
|| _chunkSize == 0) {
m_capacity = 0;
m_sizeChunk = 0;
return;
}
m_data.resize(m_capacity*m_sizeChunk, 0);
m_read = &m_data[0];
m_write = &m_data[0];
}
void audio::drain::CircularBuffer::setCapacity(echrono::Duration _capacity, size_t _chunkSize, uint32_t _frequency) {
uint32_t nbSampleNeeded = _frequency*_capacity.get()/1000000000LL;
DRAIN_DEBUG("buffer setCapacity(" << _capacity << " ," << _chunkSize << ")");
setCapacity(nbSampleNeeded, _chunkSize, _frequency);
}
size_t audio::drain::CircularBuffer::getUsedSizeBeforEnd() const {
size_t size;
if (m_read < m_write) {
size = static_cast<uint8_t*>(m_write) - static_cast<uint8_t*>(m_read);
// the size result is in bytes we need to have it in element
size /= m_sizeChunk;
} else if ( m_read == m_write
&& m_size == 0) {
// no element in the buffer
size = 0;
} else {
size = &m_data[0] + (m_capacity*m_sizeChunk) - static_cast<uint8_t*>(m_read);
// the size result is in bytes we need to have it in element
size /= m_sizeChunk;
}
return size;
}
size_t audio::drain::CircularBuffer::getFreeSizeBeforEnd() const {
size_t size;
size = &m_data[0]
+ (m_capacity*m_sizeChunk)
- static_cast<uint8_t*>(m_write);
// the size result is in Octet we need to have it in element
size /= m_sizeChunk;
return size;
}
size_t audio::drain::CircularBuffer::write(const void* _data, size_t _nbChunk) {
return write(_data, _nbChunk, audio::Time::now());//m_timeRead + )
}
size_t audio::drain::CircularBuffer::write(const void* _data, size_t _nbChunk, const audio::Time& _time) {
if (m_data.size() == 0) {
DRAIN_ERROR("EMPTY Buffer");
return _nbChunk;
}
size_t nbElementDrop = 0;
size_t freeSizeBeforeEnd = getFreeSizeBeforEnd();
size_t freeSize = m_capacity - m_size;
// Write element in all case
// calculate the number of element that are overwritten
if (freeSize < _nbChunk) {
nbElementDrop = _nbChunk - freeSize;
}
// if User Request a write more important than the size of the buffer ==> update the pointer to feet only on the buffer size
if (m_capacity < _nbChunk) {
DRAIN_WARNING("CircularBuffer Write too BIG " << _nbChunk << " buffer max size : " << m_capacity << " (keep last Elements)");
// Move data pointer
_data = static_cast<const uint8_t*>(_data) + (_nbChunk - m_capacity) * m_sizeChunk;
// update size
_nbChunk = m_capacity;
}
// if no element in the FIFO ==> first time write or no more data inside ==> start set the file of the read data ...
if (m_size == 0) {
m_timeRead = _time;
}
// TODO : Check time to push continuous data ...
if (freeSizeBeforeEnd >= _nbChunk) {
// all Data will be copy
memcpy(m_write, _data, _nbChunk * m_sizeChunk);
// update Writing pointer
if (freeSizeBeforeEnd == _nbChunk) {
// update to the end of FIFO ==> update to the start
m_write = &m_data[0];
} else {
m_write = static_cast<uint8_t*>(m_write) + _nbChunk * m_sizeChunk;
}
// Update the number of element in the buffer.
m_size += _nbChunk;
} else {
// copy data to the end of buffer
memcpy(m_write, _data, freeSizeBeforeEnd * m_sizeChunk);
// update Writing pointer ==> end of buffer ==> go to the start
m_write = &m_data[0];
// update data pointer
_data = static_cast<const uint8_t*>(_data) + freeSizeBeforeEnd * m_sizeChunk;
m_size += freeSizeBeforeEnd;
// get the number of element we need to write
_nbChunk -= freeSizeBeforeEnd;
// Copy the las data if needed
if (_nbChunk != 0) {
memcpy(m_write, _data, _nbChunk * m_sizeChunk);
// update Writing pointer
m_write = static_cast<uint8_t*>(m_write) + _nbChunk * m_sizeChunk;
m_size += _nbChunk;
}
}
if (nbElementDrop > 0) {
// if drop element we need to update the reading pointer
m_read = m_write;
m_size = m_capacity;
}
// return the number of element Overwrite
return nbElementDrop;
}
size_t audio::drain::CircularBuffer::read(void* _data, size_t _nbChunk) {
return read(_data, _nbChunk, m_timeRead);
}
size_t audio::drain::CircularBuffer::read(void* _data, size_t _nbChunk, const audio::Time& _time) {
size_t nbElementDrop = 0;
// Critical section (theoriquely protected by Mutex)
size_t usedSizeBeforeEnd = getUsedSizeBeforEnd();
// verify if we have elements in the Buffer
if (0 < m_size) {
// check the time of the read :
audio::Duration deltaTime = m_timeRead - _time;
if (deltaTime.get() == 0) {
// nothing to do ==> just copy data ...
} else if (deltaTime.get() > 0) {
// Add empty sample in the output buffer ...
size_t nbSampleEmpty = m_frequency*deltaTime.get()/1000000000LL;
nbSampleEmpty = etk::min(nbSampleEmpty, _nbChunk);
DRAIN_WARNING("add Empty sample in the output buffer " << nbSampleEmpty << " / " << _nbChunk);
memset(_data, 0, nbSampleEmpty * m_sizeChunk);
if (nbSampleEmpty == _nbChunk) {
return 0;
}
_nbChunk -= nbSampleEmpty;
} else {
// Remove data from the FIFO
setReadPosition(_time);
}
if (m_size < _nbChunk) {
nbElementDrop = _nbChunk - m_size;
DRAIN_VERBOSE("crop nb sample : m_size=" << m_size << " _nbChunk=" << _nbChunk);
_nbChunk = m_size;
}
m_timeRead += echrono::microseconds(_nbChunk*1000000/m_frequency);
if (usedSizeBeforeEnd >= _nbChunk) {
// all Data will be copy
memcpy(_data, m_read, _nbChunk * m_sizeChunk);
// update Writing pointer
m_read = static_cast<uint8_t*>(m_read) + _nbChunk * m_sizeChunk;
m_size -= _nbChunk;
// update output pointer in case of flush with 0 data
_data = static_cast<uint8_t*>(_data) + _nbChunk * m_sizeChunk;
} else {
// copy data to the end of buffer
memcpy(_data, m_read, usedSizeBeforeEnd * m_sizeChunk);
// update Writing pointer ==> end of buffer ==> go to the start
m_read = &m_data[0];
_data = static_cast<uint8_t*>(_data) + usedSizeBeforeEnd * m_sizeChunk;
m_size -= usedSizeBeforeEnd;
// get the number of element we need to write
_nbChunk -= usedSizeBeforeEnd;
// Copy the last data if needed
if (0 != _nbChunk) {
memcpy(_data, m_read, _nbChunk * m_sizeChunk);
// update Writing pointer
m_read = static_cast<uint8_t*>(m_read) + _nbChunk * m_sizeChunk;
m_size -= _nbChunk;
// update output pointer in case of flush with 0 data
_data = static_cast<uint8_t*>(_data) + _nbChunk * m_sizeChunk;
}
}
} else {
nbElementDrop = _nbChunk;
}
if (0 < nbElementDrop) {
// set 0 in last element of the output
memset(_data, 0, m_sizeChunk * nbElementDrop);
}
// return the number of element droped
return nbElementDrop;
}
void audio::drain::CircularBuffer::setReadPosition(const audio::Time& _time) {
// Critical section (theoriquely protected by Mutex)
size_t usedSizeBeforeEnd = getUsedSizeBeforEnd();
if (0 < m_size) {
// check the time of the read :
audio::Duration deltaTime = _time - m_timeRead;
size_t nbSampleToRemove = int64_t(m_frequency)*int64_t(deltaTime.get())/1000000000LL;
nbSampleToRemove = etk::min(nbSampleToRemove, m_size);
DRAIN_VERBOSE("Remove sample in the buffer " << nbSampleToRemove << " / " << m_size);
audio::Duration updateTime(0,(int64_t(nbSampleToRemove)*1000000000LL)/int64_t(m_frequency));
DRAIN_VERBOSE(" add time : " << updateTime << " / " << deltaTime);
if (usedSizeBeforeEnd >= nbSampleToRemove) {
usedSizeBeforeEnd -= nbSampleToRemove;
m_size -= nbSampleToRemove;
m_read = static_cast<uint8_t*>(m_read) + nbSampleToRemove * m_sizeChunk;
} else {
nbSampleToRemove -= usedSizeBeforeEnd;
m_size -= nbSampleToRemove;
m_read = &m_data[0] + nbSampleToRemove*m_sizeChunk;
}
m_timeRead += updateTime;
//m_timeRead += deltaTime;
} else {
m_timeRead = audio::Time();
}
}
size_t audio::drain::CircularBuffer::getFreeSize() const {
return m_capacity - m_size;
}
void audio::drain::CircularBuffer::clear() {
DRAIN_DEBUG("buffer clear()");
// set pointer to the start
m_read = &m_data[0];
m_write = &m_data[0];
// Clean the number of element in the buffer
m_size = 0;
// Clean all element inside :
memset(&m_data[0], 0, m_sizeChunk * m_capacity);
}

View File

@ -1,140 +0,0 @@
/** @file
* @author Edouard DUPIN
* @copyright 2011, Edouard DUPIN, all right reserved
* @license MPL v2.0 (see license file)
*/
#pragma once
#include <etk/types.hpp>
#include <etk/Vector.hpp>
#include <echrono/Steady.hpp>
#include <audio/Time.hpp>
#include <audio/Duration.hpp>
namespace audio {
namespace drain {
/**
* For these functions we have 4 solutions :
* - Free Buffer
* ----------------------------------------------------------
* m_data | | |
* ----------------------------------------------------------
* m_write
* m_read
* - Full Buffer
* ----------------------------------------------------------
* m_data |****************************|***************************|
* ----------------------------------------------------------
* m_write
* m_read
* - Buffer in used
* ----------------------------------------------------------
* m_data | |********************| |
* ----------------------------------------------------------
* m_read m_write
* - Buffer out used
* ----------------------------------------------------------
* m_data |****************| |******************|
* ----------------------------------------------------------
* m_read m_write
*/
class CircularBuffer {
private:
etk::Vector<uint8_t> m_data; //!< data pointer
void* m_write; //!< write pointer
void* m_read; //!< read pointer
audio::Time m_timeRead; //!< current read time
uint32_t m_frequency;
// TODO : Remove the m_size ==> this is a bad element to be mutex-less
size_t m_size; //!< number of chunk availlable in this buffer
size_t m_capacity; //!< number of chunk available in this Buffer
size_t m_sizeChunk; //!< Size of one chunk (in byte)
public:
CircularBuffer();
~CircularBuffer();
/**
* @brief copy contructor.
* @param[in] _obj Circular buffer object
*/
CircularBuffer(const audio::drain::CircularBuffer& _obj);
/**
* @brief copy operator.
* @param[in] _obj Circular buffer object
*/
CircularBuffer& operator=(const audio::drain::CircularBuffer& _obj);
/**
* @brief set the capacity of the circular buffer.
* @param[in] _capacity Number of chunk in the buffer.
* @param[in] _chunkSize Size of one chunk.
* @param[in] _frequency Frequency of the buffer
*/
void setCapacity(size_t _capacity, size_t _chunkSize, uint32_t _frequency);
/**
* @brief set the capacity of the circular buffer.
* @param[in] _capacity Duration stored in the buffer.
* @param[in] _chunkSize Size of one chunk.
* @param[in] _frequency Frequency of the buffer
*/
void setCapacity(echrono::Duration _capacity, size_t _chunkSize, uint32_t _frequency);
/**
* @brief get free size of the buffer.
* @return Number of free chunk.
*/
size_t getFreeSize() const;
/**
* @brief Get number of chunk in the buffer.
* @return number of chunk.
*/
size_t getSize() const {
return m_size;
}
/**
* @brief Get number of chunk that can be set in the buffer.
* @return number of chunk.
*/
size_t getCapacity() const {
return m_capacity;
}
/**
* @brief Write chunk in the buffer.
* @param[in] _data Pointer on the data.
* @param[in] _nbChunk number of chunk to copy.
* @param[in] _time Time to start write data (if before end ==> not replace data, write only if after end)
* @return Number of chunk copied.
*/
size_t write(const void* _data, size_t _nbChunk, const audio::Time& _time);
size_t write(const void* _data, size_t _nbChunk);
/**
* @brief Read Chunk from the buffer to the pointer data.
* @param[out] _data Pointer on the data.
* @param[in] _nbChunk number of chunk to copy.
* @param[in] _time Time to start read data (if before start ==> add 0 at start, if after, remove unread data)
* @return Number of chunk copied.
*/
size_t read(void* _data, size_t _nbChunk, const audio::Time& _time);
//! @previous
size_t read(void* _data, size_t _nbChunk);
void setReadPosition(const audio::Time& _time);
audio::Time getReadTimeStamp() {
return m_timeRead;
}
/**
* @brief Clear the buffer.
*/
void clear();
private:
/**
* @brief Get number of free chunks before end of buffer.
* @return Number of chunk.
*/
size_t getFreeSizeBeforEnd() const;
/**
* @brief Get number of used chunks before end of buffer.
* @return Number of chunk.
*/
size_t getUsedSizeBeforEnd() const;
};
}
}

View File

@ -1,31 +0,0 @@
/** @file
* @author Edouard DUPIN
* @copyright 2011, Edouard DUPIN, all right reserved
* @license MPL v2.0 (see license file)
*/
#pragma once
#include <audio/drain/Algo.hpp>
namespace audio {
namespace drain{
class EndPoint : public Algo {
protected:
/**
* @brief Constructor
*/
EndPoint() {};
void init() {
drain::Algo::init();
};
public:
/**
* @brief Destructor
*/
virtual ~EndPoint() {
};
};
}
}

View File

@ -1,87 +0,0 @@
/** @file
* @author Edouard DUPIN
* @copyright 2011, Edouard DUPIN, all right reserved
* @license MPL v2.0 (see license file)
*/
#include <audio/drain/EndPointCallback.hpp>
#include <audio/drain/debug.hpp>
audio::drain::EndPointCallback::EndPointCallback() :
m_outputFunction(null),
m_inputFunction(null) {
}
void audio::drain::EndPointCallback::init(playbackFunction _callback) {
m_outputFunction = _callback;
audio::drain::EndPoint::init();
m_type = "EndPointCallback";
}
void audio::drain::EndPointCallback::init(recordFunction _callback) {
m_inputFunction = _callback;
audio::drain::EndPoint::init();
m_type = "EndPointCallback";
}
ememory::SharedPtr<audio::drain::EndPointCallback> audio::drain::EndPointCallback::create(playbackFunction _callback) {
ememory::SharedPtr<audio::drain::EndPointCallback> tmp(ETK_NEW(audio::drain::EndPointCallback));
tmp->init(_callback);
return tmp;
}
ememory::SharedPtr<audio::drain::EndPointCallback> audio::drain::EndPointCallback::create(recordFunction _callback) {
ememory::SharedPtr<audio::drain::EndPointCallback> tmp(ETK_NEW(audio::drain::EndPointCallback));
tmp->init(_callback);
return tmp;
}
void audio::drain::EndPointCallback::configurationChange() {
audio::drain::EndPoint::configurationChange();
DRAIN_INFO("update : format=" << m_output.getFormat() << " map=" << m_input.getMap() << " freq=" << m_input.getFrequency() << " size=" << int32_t(m_formatSize));
m_needProcess = true;
}
bool audio::drain::EndPointCallback::process(audio::Time& _time,
void* _input,
size_t _inputNbChunk,
void*& _output,
size_t& _outputNbChunk){
audio::drain::AutoLogInOut tmpLog("EndPointCallback");
if (m_inputFunction != null) {
// Call user ...
DRAIN_VERBOSE("call user set " << _inputNbChunk << "*" << m_input.getMap().size());
m_inputFunction(_input,
_time,
_inputNbChunk,
m_output.getFormat(),
m_output.getFrequency(),
m_output.getMap());
return true;
}
if (m_outputFunction != null) {
// update buffer size ...
m_outputData.resize(_inputNbChunk*m_output.getMap().size()*m_formatSize);
// clean output to prevent errors ...
memset(&m_outputData[0], 0, m_outputData.size());
// call user
DRAIN_VERBOSE("call user get " << _inputNbChunk << "*" << m_output.getMap().size() << " map=" << m_output.getMap() << " datasize=" << int32_t(m_formatSize));
m_outputFunction(&m_outputData[0],
_time,
_inputNbChunk,
m_output.getFormat(),
m_output.getFrequency(),
m_output.getMap());
if (m_outputData.size() != _inputNbChunk*m_output.getMap().size()*m_formatSize) {
DRAIN_ERROR(" can not get enough data from user ... " << m_outputData.size() << " != " << _inputNbChunk*m_output.getMap().size());
return false;
}
_output = &m_outputData[0];
_outputNbChunk = _inputNbChunk;
return true;
}
return false;
}

View File

@ -1,52 +0,0 @@
/** @file
* @author Edouard DUPIN
* @copyright 2011, Edouard DUPIN, all right reserved
* @license MPL v2.0 (see license file)
*/
#pragma once
#include <audio/drain/EndPoint.hpp>
#include <etk/Function.hpp>
namespace audio {
namespace drain {
typedef etk::Function<void (void* _data,
const audio::Time& _playTime,
size_t _nbChunk,
enum audio::format _format,
uint32_t _frequency,
const etk::Vector<audio::channel>& _map)> playbackFunction;
typedef etk::Function<void (const void* _data,
const audio::Time& _readTime,
size_t _nbChunk,
enum audio::format _format,
uint32_t _frequency,
const etk::Vector<audio::channel>& _map)> recordFunction;
class EndPointCallback : public EndPoint {
private:
playbackFunction m_outputFunction;
recordFunction m_inputFunction;
protected:
/**
* @brief Constructor
*/
EndPointCallback();
void init(playbackFunction _callback);
void init(recordFunction _callback);
public:
static ememory::SharedPtr<EndPointCallback> create(playbackFunction _callback);
static ememory::SharedPtr<EndPointCallback> create(recordFunction _callback);
/**
* @brief Destructor
*/
virtual ~EndPointCallback() {};
virtual void configurationChange();
virtual bool process(audio::Time& _time,
void* _input,
size_t _inputNbChunk,
void*& _output,
size_t& _outputNbChunk);
};
}
}

View File

@ -1,69 +0,0 @@
/** @file
* @author Edouard DUPIN
* @copyright 2011, Edouard DUPIN, all right reserved
* @license MPL v2.0 (see license file)
*/
#include <audio/drain/EndPointRead.hpp>
#include <audio/drain/debug.hpp>
audio::drain::EndPointRead::EndPointRead() {
}
void audio::drain::EndPointRead::init() {
audio::drain::EndPoint::init();
m_type = "EndPointRead";
}
ememory::SharedPtr<audio::drain::EndPointRead> audio::drain::EndPointRead::create() {
ememory::SharedPtr<audio::drain::EndPointRead> tmp(ETK_NEW(audio::drain::EndPointRead));
tmp->init();
return tmp;
}
void audio::drain::EndPointRead::configurationChange() {
audio::drain::EndPoint::configurationChange();
m_needProcess = true;
}
bool audio::drain::EndPointRead::process(audio::Time& _time,
void* _input,
size_t _inputNbChunk,
void*& _output,
size_t& _outputNbChunk){
audio::drain::AutoLogInOut tmpLog("EndPointRead");
return false;
}
void audio::drain::EndPointRead::setBufferSize(size_t _nbChunk) {
DRAIN_TODO("...");
}
void audio::drain::EndPointRead::setBufferSize(const echrono::microseconds& _time) {
DRAIN_TODO("...");
}
size_t audio::drain::EndPointRead::getBufferSize() {
DRAIN_TODO("...");
return 0;
}
echrono::microseconds audio::drain::EndPointRead::getBufferSizeMicrosecond() {
DRAIN_TODO("...");
return echrono::microseconds(0);
}
size_t audio::drain::EndPointRead::getBufferFillSize() {
DRAIN_TODO("...");
return 0;
}
echrono::microseconds audio::drain::EndPointRead::getBufferFillSizeMicrosecond() {
DRAIN_TODO("...");
return echrono::microseconds(0);
}

View File

@ -1,64 +0,0 @@
/** @file
* @author Edouard DUPIN
* @copyright 2011, Edouard DUPIN, all right reserved
* @license MPL v2.0 (see license file)
*/
#pragma once
#include <audio/drain/EndPoint.hpp>
namespace audio {
namespace drain{
class EndPointRead : public EndPoint {
protected:
/**
* @brief Constructor
*/
EndPointRead();
void init();
public:
static ememory::SharedPtr<EndPointRead> create();
/**
* @brief Destructor
*/
virtual ~EndPointRead() {};
virtual void configurationChange();
virtual bool process(audio::Time& _time,
void* _input,
size_t _inputNbChunk,
void*& _output,
size_t& _outputNbChunk);
/**
* @brief Set buffer size in chunk number
* @param[in] _nbChunk Number of chunk in the buffer
*/
virtual void setBufferSize(size_t _nbChunk);
/**
* @brief Set buffer size size of the buffer with the stored time in µs
* @param[in] _time Time in microsecond of the buffer
*/
virtual void setBufferSize(const echrono::microseconds& _time);
/**
* @brief get buffer size in chunk number
* @return Number of chunk that can be written in the buffer
*/
virtual size_t getBufferSize();
/**
* @brief Set buffer size size of the buffer with the stored time in µs
* @return Time in microsecond that can be written in the buffer
*/
virtual echrono::microseconds getBufferSizeMicrosecond();
/**
* @brief Get buffer size filled in chunk number
* @return Number of chunk in the buffer (that might be read/write)
*/
virtual size_t getBufferFillSize();
/**
* @brief Set buffer size size of the buffer with the stored time in µs
* @return Time in microsecond of the buffer (that might be read/write)
*/
virtual echrono::microseconds getBufferFillSizeMicrosecond();
};
}
}

View File

@ -1,160 +0,0 @@
/** @file
* @author Edouard DUPIN
* @copyright 2011, Edouard DUPIN, all right reserved
* @license MPL v2.0 (see license file)
*/
#include <audio/drain/EndPointWrite.hpp>
#include <audio/drain/debug.hpp>
audio::drain::EndPointWrite::EndPointWrite() :
m_function(null),
m_bufferSizeMicroseconds(1000000),
m_bufferSizeChunk(32),
m_bufferUnderFlowSize(0) {
}
void audio::drain::EndPointWrite::init() {
audio::drain::EndPoint::init();
m_type = "EndPoint";
if ( audio::getFormatBytes(m_output.getFormat())*m_output.getMap().size() != 0
&& m_output.getFrequency() != 0) {
m_buffer.setCapacity(m_bufferSizeMicroseconds,
audio::getFormatBytes(m_output.getFormat())*m_output.getMap().size(),
m_output.getFrequency());
}
}
ememory::SharedPtr<audio::drain::EndPointWrite> audio::drain::EndPointWrite::create() {
ememory::SharedPtr<audio::drain::EndPointWrite> tmp(ETK_NEW(audio::drain::EndPointWrite));
tmp->init();
return tmp;
}
void audio::drain::EndPointWrite::configurationChange() {
audio::drain::EndPoint::configurationChange();
// update the buffer size ...
if ( audio::getFormatBytes(m_output.getFormat())*m_output.getMap().size() != 0
&& m_output.getFrequency() != 0) {
if (m_bufferSizeMicroseconds.get() != 0) {
m_buffer.setCapacity(m_bufferSizeMicroseconds,
audio::getFormatBytes(m_output.getFormat())*m_output.getMap().size(),
m_output.getFrequency());
} else {
m_buffer.setCapacity(m_bufferSizeChunk,
audio::getFormatBytes(m_output.getFormat())*m_output.getMap().size(),
m_output.getFrequency());
}
}
m_needProcess = true;
}
bool audio::drain::EndPointWrite::process(audio::Time& _time,
void* _input,
size_t _inputNbChunk,
void*& _output,
size_t& _outputNbChunk){
audio::drain::AutoLogInOut tmpLog("EndPointWrite");
//DRAIN_INFO(" nb Sample in buffer : " << m_buffer.size());
if (m_function != null) {
// TODO : Rework this ...
if (m_buffer.getSize() <= 20000) {
m_function(_time, _inputNbChunk, m_output.getFormat(), m_output.getFrequency(), m_output.getMap());
}
}
// resize output buffer:
//DRAIN_INFO(" resize : " << (int32_t)m_formatSize << "*" << (int32_t)_inputNbChunk << "*" << (int32_t)m_outputMap.size());
m_outputData.resize(m_formatSize*_inputNbChunk*m_output.getMap().size());
// set output pointer:
_outputNbChunk = m_outputData.size()/(m_formatSize*m_output.getMap().size());
_output = &m_outputData[0];
ethread::UniqueLock lock(m_mutex);
// check if data in the tmpBuffer
if (m_buffer.getSize() == 0) {
if (m_bufferUnderFlowSize == 0) {
DRAIN_WARNING("No data in the user buffer (write null data ... " << _outputNbChunk << " chunks)");
m_bufferUnderFlowSize = 1;
} else {
if (m_bufferUnderFlowSize == 1) {
m_bufferUnderFlowSize = 0;
}
m_bufferUnderFlowSize += _outputNbChunk;
}
// clear the buffer to force the flush on the next elements ...
m_outputData.clear();
_outputNbChunk = 0;
generateStatus("EPW_UNDERFLOW");
// just send no data ...
return true;
} else if (m_bufferUnderFlowSize > 1) {
DRAIN_WARNING("No data in the user buffer (write null data ... " << m_bufferUnderFlowSize << " chunks [In the past])");
}
m_bufferUnderFlowSize = 0;
DRAIN_VERBOSE("Write " << _outputNbChunk << " chunks");
// check if we have enought data:
int32_t nbChunkToCopy = etk::min(_inputNbChunk, m_buffer.getSize());
if (nbChunkToCopy != _inputNbChunk) {
generateStatus("EPW_UNDERFLOW");
}
DRAIN_VERBOSE(" " << nbChunkToCopy << " chunks ==> " << nbChunkToCopy*m_output.getMap().size()*m_formatSize << " Byte sizeBuffer=" << m_buffer.getSize());
_outputNbChunk = nbChunkToCopy;
// copy data to the output:
int32_t nbUnderflow = m_buffer.read(_output, nbChunkToCopy);
if (nbUnderflow != 0) {
DRAIN_WARNING("Undeflow in FIFO ...");
_outputNbChunk -= nbUnderflow;
}
return true;
}
void audio::drain::EndPointWrite::write(const void* _value, size_t _nbChunk) {
ethread::UniqueLock lock(m_mutex);
DRAIN_VERBOSE("[ASYNC] Write data : " << _nbChunk << " chunks" << " ==> " << m_output);
int32_t nbOverflow = m_buffer.write(_value, _nbChunk);
if (nbOverflow > 0) {
DRAIN_ERROR("Overflow in output buffer : " << nbOverflow << " / " << _nbChunk);
}
}
void audio::drain::EndPointWrite::setBufferSize(size_t _nbChunk) {
m_bufferSizeMicroseconds = echrono::microseconds(0);
m_bufferSizeChunk = _nbChunk;
if ( audio::getFormatBytes(m_output.getFormat())*m_output.getMap().size() != 0
&& m_output.getFrequency() != 0) {
m_buffer.setCapacity(_nbChunk,
audio::getFormatBytes(m_output.getFormat())*m_output.getMap().size(),
float(m_output.getFrequency()));
}
}
void audio::drain::EndPointWrite::setBufferSize(const echrono::microseconds& _time) {
m_bufferSizeMicroseconds = _time;
m_bufferSizeChunk = 0;
m_buffer.setCapacity(_time,
audio::getFormatBytes(m_output.getFormat())*m_output.getMap().size(),
float(m_output.getFrequency()));
}
size_t audio::drain::EndPointWrite::getBufferSize() {
if (m_bufferSizeChunk != 0) {
return m_bufferSizeChunk;
}
return (int64_t(m_output.getFrequency())*m_bufferSizeMicroseconds.get())/1000000000LL;
}
echrono::microseconds audio::drain::EndPointWrite::getBufferSizeMicrosecond() {
if (m_bufferSizeMicroseconds.get() != 0) {
return m_bufferSizeMicroseconds;
}
return echrono::microseconds(m_bufferSizeChunk*1000000LL/int64_t(m_output.getFrequency()));
}
size_t audio::drain::EndPointWrite::getBufferFillSize() {
return m_buffer.getSize()/(audio::getFormatBytes(m_output.getFormat())*m_output.getMap().size());
}
echrono::microseconds audio::drain::EndPointWrite::getBufferFillSizeMicrosecond() {
return echrono::microseconds(getBufferFillSize()*1000000LL/int64_t(m_output.getFrequency()));
}

View File

@ -1,85 +0,0 @@
/** @file
* @author Edouard DUPIN
* @copyright 2011, Edouard DUPIN, all right reserved
* @license MPL v2.0 (see license file)
*/
#pragma once
#include <audio/drain/EndPoint.hpp>
#include <etk/Function.hpp>
#include <ethread/Mutex.hpp>
#include <audio/drain/CircularBuffer.hpp>
namespace audio {
namespace drain{
typedef etk::Function<void (const audio::Time& _time,
size_t _nbChunk,
enum audio::format _format,
uint32_t _frequency,
const etk::Vector<audio::channel>& _map)> playbackFunctionWrite;
class EndPointWrite : public EndPoint {
private:
audio::drain::CircularBuffer m_buffer;
playbackFunctionWrite m_function;
ethread::Mutex m_mutex;
protected:
/**
* @brief Constructor
*/
EndPointWrite();
void init();
public:
static ememory::SharedPtr<audio::drain::EndPointWrite> create();
/**
* @brief Destructor
*/
virtual ~EndPointWrite() {};
virtual void configurationChange();
virtual bool process(audio::Time& _time,
void* _input,
size_t _inputNbChunk,
void*& _output,
size_t& _outputNbChunk);
virtual void write(const void* _value, size_t _nbChunk);
virtual void setCallback(playbackFunctionWrite _function) {
m_function = _function;
}
protected:
echrono::microseconds m_bufferSizeMicroseconds; // 0 if m_bufferSizeChunk != 0
size_t m_bufferSizeChunk; // 0 if m_bufferSizeMicroseconds != 0
size_t m_bufferUnderFlowSize; //!< Limit display of underflow in the write callback
public:
/**
* @brief Set buffer size in chunk number
* @param[in] _nbChunk Number of chunk in the buffer
*/
virtual void setBufferSize(size_t _nbChunk);
/**
* @brief Set buffer size size of the buffer with the stored time in µs
* @param[in] _time Time in microsecond of the buffer
*/
virtual void setBufferSize(const echrono::microseconds& _time);
/**
* @brief get buffer size in chunk number
* @return Number of chunk that can be written in the buffer
*/
virtual size_t getBufferSize();
/**
* @brief Set buffer size size of the buffer with the stored time in µs
* @return Time in microsecond that can be written in the buffer
*/
virtual echrono::microseconds getBufferSizeMicrosecond();
/**
* @brief Get buffer size filled in chunk number
* @return Number of chunk in the buffer (that might be read/write)
*/
virtual size_t getBufferFillSize();
/**
* @brief Set buffer size size of the buffer with the stored time in µs
* @return Time in microsecond of the buffer (that might be read/write)
*/
virtual echrono::microseconds getBufferFillSizeMicrosecond();
};
}
}

View File

@ -1,150 +0,0 @@
/** @file
* @author Edouard DUPIN
* @copyright 2011, Edouard DUPIN, all right reserved
* @license MPL v2.0 (see license file)
*/
#include <audio/drain/Equalizer.hpp>
#include <audio/drain/Algo.hpp>
#include <audio/drain/debug.hpp>
// see http://www.musicdsp.org/files/Audio-EQ-Cookbook.txt
// see http://www.earlevel.com/main/2013/10/13/biquad-calculator-v2/
audio::drain::Equalizer::Equalizer() {
}
void audio::drain::Equalizer::init() {
audio::drain::Algo::init();
audio::drain::Algo::m_type = "Equalizer";
m_supportedFormat.pushBack(audio::format_int16);
m_supportedFormat.pushBack(audio::format_int16);
configureBiQuad();
}
ememory::SharedPtr<audio::drain::Equalizer> audio::drain::Equalizer::create() {
ememory::SharedPtr<audio::drain::Equalizer> tmp(ETK_NEW(audio::drain::Equalizer));
tmp->init();
return tmp;
}
audio::drain::Equalizer::~Equalizer() {
}
void audio::drain::Equalizer::configurationChange() {
audio::drain::Algo::configurationChange();
configureBiQuad();
}
bool audio::drain::Equalizer::process(audio::Time& _time,
void* _input,
size_t _inputNbChunk,
void*& _output,
size_t& _outputNbChunk) {
_outputNbChunk = _inputNbChunk;
_output = _input;
if (_input == null) {
return false;
}
m_algo.process(_output, _input, _inputNbChunk);
return true;
}
bool audio::drain::Equalizer::setParameter(const etk::String& _parameter, const etk::String& _value) {
//DRAIN_WARNING("set : " << _parameter << " " << _value);
if (_parameter == "config") {
m_config = ejson::Object(_value);
configureBiQuad();
} else if (_parameter == "reset") {
// TODO : m_algo.reset();
return true;
}
return false;
}
etk::String audio::drain::Equalizer::getParameter(const etk::String& _parameter) const {
return "error";
}
etk::String audio::drain::Equalizer::getParameterProperty(const etk::String& _parameter) const {
return "error";
}
void audio::drain::Equalizer::addBiquad(int32_t _idBiquad, const ejson::Object& _object) {
// get type:
etk::String typeString = _object["type"].toString().get("none");
if (typeString == "direct-value") {
double a0 = _object["a0"].toNumber().get(0.0);
double a1 = _object["a1"].toNumber().get(0.0);
double a2 = _object["a2"].toNumber().get(0.0);
double b0 = _object["b0"].toNumber().get(0.0);
double b1 = _object["b1"].toNumber().get(0.0);
if (_idBiquad < 0) {
m_algo.addBiquad(a0, a1, a2, b0, b1);
} else {
m_algo.addBiquad(_idBiquad, a0, a1, a2, b0, b1);
}
} else {
enum audio::algo::drain::biQuadType type;
if (etk::from_string(type, typeString) == false) {
DRAIN_ERROR("Can not parse equalizer type:'" << typeString << "'");
}
double gain = _object["gain"].toNumber().get(0.0);
double frequency = _object["cut-frequency"].toNumber().get(0.0);
double quality = _object["quality"].toNumber().get(0.0);
if (_idBiquad < 0) {
m_algo.addBiquad(type, frequency, quality, gain);
} else {
m_algo.addBiquad(_idBiquad, type, frequency, quality, gain);
}
}
}
void audio::drain::Equalizer::configureBiQuad() {
m_algo.init(getOutputFormat().getFrequency(),
getOutputFormat().getMap().size(),
getOutputFormat().getFormat());
if (m_config.exist() == false) {
return;
}
// check for a global config:
const ejson::Array global = m_config["global"].toArray();
if (global.exist() == true) {
// only global configuration get all elements:
for (size_t kkk=0; kkk<global.size(); ++kkk) {
const ejson::Object tmpObject = global[kkk].toObject();
if (tmpObject.exist() == false) {
DRAIN_ERROR("Parse the configuration error : not a correct parameter:" << kkk);
continue;
}
// Add biquad...
addBiquad(-1, tmpObject);
}
return;
}
for (size_t iii=0; iii<getOutputFormat().getMap().size(); ++iii) {
etk::String channelName = etk::toString(getOutputFormat().getMap()[iii]);
const ejson::Array channelConfig = m_config[channelName].toArray();
if (channelConfig.exist() == false) {
// no config ... not a problem ...
continue;
}
// only global configuration get all elements:
for (size_t kkk=0; kkk<channelConfig.size(); ++kkk) {
const ejson::Object tmpObject = channelConfig[kkk].toObject();
if (tmpObject.exist() == false) {
DRAIN_ERROR("Parse the configuration error : not a correct parameter:" << kkk);
continue;
}
// add biquad:
addBiquad(kkk, tmpObject);
}
}
return;
}
etk::Vector<etk::Pair<float,float> > audio::drain::Equalizer::calculateTheory() {
return m_algo.calculateTheory();
}

View File

@ -1,55 +0,0 @@
/** @file
* @author Edouard DUPIN
* @copyright 2011, Edouard DUPIN, all right reserved
* @license MPL v2.0 (see license file)
*/
#pragma once
#include <audio/drain/Algo.hpp>
#include <ememory/memory.hpp>
#include <ejson/Object.hpp>
#include <audio/algo/drain/Equalizer.hpp>
namespace audio {
namespace drain {
class Equalizer : public Algo {
protected:
/**
* @brief Constructor
*/
Equalizer();
void init();
public:
static ememory::SharedPtr<audio::drain::Equalizer> create();
/**
* @brief Destructor
*/
virtual ~Equalizer();
protected:
virtual void configurationChange();
public:
virtual bool process(audio::Time& _time,
void* _input,
size_t _inputNbChunk,
void*& _output,
size_t& _outputNbChunk);
protected:
ejson::Object m_config; // configuration of the equalizer.
public:
virtual bool setParameter(const etk::String& _parameter, const etk::String& _value);
virtual etk::String getParameter(const etk::String& _parameter) const;
virtual etk::String getParameterProperty(const etk::String& _parameter) const;
protected:
void addBiquad(int32_t _idBiquad, const ejson::Object& _object);
audio::algo::drain::Equalizer m_algo;
/**
* @brief Configure biquad with the user spec.
*/
void configureBiQuad();
public:
// for debug & tools only
etk::Vector<etk::Pair<float,float> > calculateTheory();
};
}
}

View File

@ -1,269 +0,0 @@
/** @file
* @author Edouard DUPIN
* @copyright 2011, Edouard DUPIN, all right reserved
* @license MPL v2.0 (see license file)
*/
#include <audio/drain/FormatUpdate.hpp>
#include <audio/drain/debug.hpp>
#ifndef INT16_MAX
#define INT16_MAX 0x7fff
#endif
#ifndef INT16_MIN
#define INT16_MIN (-INT16_MAX - 1)
#endif
#ifndef INT32_MAX
#define INT32_MAX 0x7fffffffL
#endif
#ifndef INT32_MIN
#define INT32_MIN (-INT32_MAX - 1L)
#endif
static void convert__int16__to__int16_on_int32(void* _input, void* _output, size_t _nbSample) {
int16_t* in = static_cast<int16_t*>(_input);
int32_t* out = static_cast<int32_t*>(_output);
for (size_t iii=0; iii<_nbSample; ++iii) {
out[iii] = in[iii];
}
}
static void convert__int16__to__int32(void* _input, void* _output, size_t _nbSample) {
int16_t* in = static_cast<int16_t*>(_input);
int32_t* out = static_cast<int32_t*>(_output);
for (size_t iii=0; iii<_nbSample; ++iii) {
out[iii] = in[iii]<<16;
}
}
static void convert__int16__to__float(void* _input, void* _output, size_t _nbSample) {
int16_t* in = static_cast<int16_t*>(_input);
float* out = static_cast<float*>(_output);
for (size_t iii=0; iii<_nbSample; ++iii) {
// TODO : Set * intead of /
out[iii] = static_cast<float>(in[iii])/static_cast<float>(INT16_MAX);
}
}
static void convert__int16_on_int32__to__int16(void* _input, void* _output, size_t _nbSample) {
int32_t* in = static_cast<int32_t*>(_input);
int16_t* out = static_cast<int16_t*>(_output);
for (size_t iii=0; iii<_nbSample; ++iii) {
out[iii] = static_cast<int16_t>(etk::min(etk::max(INT16_MIN, in[iii]), INT16_MAX));
}
}
static void convert__int16_on_int32__to__int32(void* _input, void* _output, size_t _nbSample) {
int32_t* in = static_cast<int32_t*>(_input);
int32_t* out = static_cast<int32_t*>(_output);
for (size_t iii=0; iii<_nbSample; ++iii) {
int32_t value = etk::min(etk::max(INT16_MIN, in[iii]), INT16_MAX);
out[iii] = value << 16;
}
}
static void convert__int16_on_int32__to__float(void* _input, void* _output, size_t _nbSample) {
int32_t* in = static_cast<int32_t*>(_input);
float* out = static_cast<float*>(_output);
for (size_t iii=0; iii<_nbSample; ++iii) {
// TODO : Set * intead of /
out[iii] = static_cast<float>(in[iii])/static_cast<float>(INT16_MAX);
}
}
static void convert__int32__to__int16(void* _input, void* _output, size_t _nbSample) {
int32_t* in = static_cast<int32_t*>(_input);
int16_t* out = static_cast<int16_t*>(_output);
for (size_t iii=0; iii<_nbSample; ++iii) {
int32_t value = in[iii] >> 16;
out[iii] = static_cast<int16_t>(etk::min(etk::max(INT16_MIN, value), INT16_MAX));
}
}
static void convert__int32__to__int16_on_int32(void* _input, void* _output, size_t _nbSample) {
int32_t* in = static_cast<int32_t*>(_input);
int16_t* out = static_cast<int16_t*>(_output);
for (size_t iii=0; iii<_nbSample; ++iii) {
out[iii] = in[iii] >> 16;
}
}
static void convert__int32__to__float(void* _input, void* _output, size_t _nbSample) {
int32_t* in = static_cast<int32_t*>(_input);
float* out = static_cast<float*>(_output);
for (size_t iii=0; iii<_nbSample; ++iii) {
// TODO : Set * intead of /
out[iii] = static_cast<float>(in[iii])/static_cast<float>(INT32_MAX);
}
}
static void convert__float__to__int16(void* _input, void* _output, size_t _nbSample) {
float* in = static_cast<float*>(_input);
int16_t* out = static_cast<int16_t*>(_output);
for (size_t iii=0; iii<_nbSample; ++iii) {
float value = in[iii] * static_cast<float>(INT16_MAX);
value = etk::min(etk::max(static_cast<float>(INT16_MIN), value), static_cast<float>(INT16_MAX));
out[iii] = static_cast<int16_t>(value);
//DRAIN_DEBUG(iii << " in=" << in[iii] << " out=" << out[iii]);
}
}
static void convert__float__to__int16_on_int32(void* _input, void* _output, size_t _nbSample) {
float* in = static_cast<float*>(_input);
int32_t* out = static_cast<int32_t*>(_output);
for (size_t iii=0; iii<_nbSample; ++iii) {
float value = in[iii] * static_cast<float>(INT16_MAX);
value = etk::min(etk::max(static_cast<float>(INT32_MIN), value), static_cast<float>(INT32_MAX));
out[iii] = static_cast<int32_t>(value);
}
}
static void convert__float__to__int32(void* _input, void* _output, size_t _nbSample) {
float* in = static_cast<float*>(_input);
int32_t* out = static_cast<int32_t*>(_output);
for (size_t iii=0; iii<_nbSample; ++iii) {
float value = in[iii] * static_cast<float>(INT32_MAX);
value = etk::min(etk::max(static_cast<float>(INT32_MIN), value), static_cast<float>(INT32_MAX));
out[iii] = static_cast<int32_t>(value);
}
}
audio::drain::FormatUpdate::FormatUpdate() :
m_functionConvert(null) {
}
void audio::drain::FormatUpdate::init() {
audio::drain::Algo::init();
m_type = "FormatUpdate";
}
ememory::SharedPtr<audio::drain::FormatUpdate> audio::drain::FormatUpdate::create() {
ememory::SharedPtr<audio::drain::FormatUpdate> tmp(ETK_NEW(audio::drain::FormatUpdate));
tmp->init();
return tmp;
}
void audio::drain::FormatUpdate::configurationChange() {
audio::drain::Algo::configurationChange();
if (m_input.getMap() != m_output.getMap()) {
DRAIN_ERROR("can not support Map Change ...");
m_needProcess = false;
}
if (m_input.getFrequency() != m_output.getFrequency()) {
DRAIN_ERROR("can not support frequency Change ...");
m_needProcess = false;
}
if (m_input.getFormat() == m_output.getFormat()) {
// nothing to process...
m_needProcess = false;
return;
}
switch (m_input.getFormat()) {
default:
case audio::format_int16:
switch (m_output.getFormat()) {
default:
case audio::format_int16:
DRAIN_ERROR(" Impossible case 1");
break;
case audio::format_int16_on_int32:
m_functionConvert = &convert__int16__to__int16_on_int32;
DRAIN_DEBUG(" use converter : 'convert__int16__to__int16_on_int32' for " << m_input.getFormat() << " to " << m_output.getFormat());
break;
case audio::format_int32:
m_functionConvert = &convert__int16__to__int32;
DRAIN_DEBUG(" use converter : 'convert__int16__to__int32' for " << m_input.getFormat() << " to " << m_output.getFormat());
break;
case audio::format_float:
m_functionConvert = &convert__int16__to__float;
DRAIN_DEBUG(" use converter : 'convert__int16__to__float' for " << m_input.getFormat() << " to " << m_output.getFormat());
break;
}
break;
case audio::format_int16_on_int32:
switch (m_output.getFormat()) {
default:
case audio::format_int16:
m_functionConvert = &convert__int16_on_int32__to__int16;
DRAIN_DEBUG(" use converter : 'convert__int16_on_int32__to__int16' for " << m_input.getFormat() << " to " << m_output.getFormat());
break;
case audio::format_int16_on_int32:
DRAIN_ERROR(" Impossible case 2");
break;
case audio::format_int32:
m_functionConvert = &convert__int16_on_int32__to__int32;
DRAIN_DEBUG(" use converter : 'convert__int16_on_int32__to__int32' for " << m_input.getFormat() << " to " << m_output.getFormat());
break;
case audio::format_float:
m_functionConvert = &convert__int16_on_int32__to__float;
DRAIN_DEBUG(" use converter : 'convert__int16_on_int32__to__float' for " << m_input.getFormat() << " to " << m_output.getFormat());
break;
}
break;
case audio::format_int32:
switch (m_output.getFormat()) {
default:
case audio::format_int16:
m_functionConvert = &convert__int32__to__int16;
DRAIN_DEBUG(" use converter : 'convert__int32__to__int16' for " << m_input.getFormat() << " to " << m_output.getFormat());
break;
case audio::format_int16_on_int32:
m_functionConvert = &convert__int32__to__int16_on_int32;
DRAIN_DEBUG(" use converter : 'convert__int32__to__int16_on_int32' for " << m_input.getFormat() << " to " << m_output.getFormat());
break;
case audio::format_int32:
DRAIN_ERROR(" Impossible case 3");
break;
case audio::format_float:
m_functionConvert = &convert__int32__to__float;
DRAIN_DEBUG(" use converter : 'convert__int32__to__float' for " << m_input.getFormat() << " to " << m_output.getFormat());
break;
}
break;
case audio::format_float:
switch (m_output.getFormat()) {
default:
case audio::format_int16:
m_functionConvert = &convert__float__to__int16;
DRAIN_DEBUG(" use converter : 'convert__float__to__int16' for " << m_input.getFormat() << " to " << m_output.getFormat());
break;
case audio::format_int16_on_int32:
m_functionConvert = &convert__float__to__int16_on_int32;
DRAIN_DEBUG(" use converter : 'convert__float__to__int16_on_int32' for " << m_input.getFormat() << " to " << m_output.getFormat());
break;
case audio::format_int32:
m_functionConvert = &convert__float__to__int32;
DRAIN_DEBUG(" use converter : 'convert__float__to__int32' for " << m_input.getFormat() << " to " << m_output.getFormat());
break;
case audio::format_float:
DRAIN_ERROR(" Impossible case 4");
break;
}
break;
}
}
bool audio::drain::FormatUpdate::process(audio::Time& _time,
void* _input,
size_t _inputNbChunk,
void*& _output,
size_t& _outputNbChunk) {
audio::drain::AutoLogInOut tmpLog("FormatUpdate");
// chack if we need to process:
if (m_needProcess == false) {
_output = _input;
_outputNbChunk = _inputNbChunk;
return true;
}
if (_input == null) {
_output = &(m_outputData[0]);
_outputNbChunk = 0;
DRAIN_ERROR("null pointer input ... ");
return false;
}
_outputNbChunk = _inputNbChunk;
m_outputData.resize(_outputNbChunk*m_input.getMap().size()*m_formatSize);
_output = &(m_outputData[0]);
if (m_functionConvert == null) {
DRAIN_ERROR("null function ptr");
return false;
}
m_functionConvert(_input, _output, _outputNbChunk*m_input.getMap().size());
return true;
}

View File

@ -1,38 +0,0 @@
/** @file
* @author Edouard DUPIN
* @copyright 2011, Edouard DUPIN, all right reserved
* @license MPL v2.0 (see license file)
*/
#pragma once
#include <audio/drain/Algo.hpp>
namespace audio {
namespace drain {
class FormatUpdate : public Algo {
protected:
/**
* @brief Constructor
*/
FormatUpdate();
void init();
public:
static ememory::SharedPtr<audio::drain::FormatUpdate> create();
/**
* @brief Destructor
*/
virtual ~FormatUpdate() {};
protected:
virtual void configurationChange();
public:
virtual bool process(audio::Time& _time,
void* _input,
size_t _inputNbChunk,
void*& _output,
size_t& _outputNbChunk);
private:
void (*m_functionConvert)(void* _input, void* _output, size_t _nbSample);
};
}
}

View File

@ -1,119 +0,0 @@
/** @file
* @author Edouard DUPIN
* @copyright 2011, Edouard DUPIN, all right reserved
* @license MPL v2.0 (see license file)
*/
#include "IOFormatInterface.hpp"
#include "debug.hpp"
etk::Stream& audio::drain::operator <<(etk::Stream& _os, const IOFormatInterface& _obj) {
_os << "{";
if (_obj.getConfigured() == false) {
_os << "Not configured";
} else {
_os << "format=" << _obj.getFormat();
_os << ", frequency=" << _obj.getFrequency();
_os << ", map=" << _obj.getMap();
}
_os << "}";
return _os;
}
audio::drain::IOFormatInterface::IOFormatInterface() :
m_configured(false),
m_format(audio::format_unknow),
m_map(),
m_frequency(0) {
m_map.pushBack(audio::channel_frontLeft);
m_map.pushBack(audio::channel_frontRight);
}
audio::drain::IOFormatInterface::IOFormatInterface(etk::Vector<enum audio::channel> _map, enum audio::format _format, float _frequency) :
m_configured(true),
m_format(_format),
m_map(_map),
m_frequency(_frequency) {
}
void audio::drain::IOFormatInterface::set(etk::Vector<enum audio::channel> _map, enum audio::format _format, float _frequency) {
bool hasChange = false;
if (m_map != _map) {
m_map = _map;
hasChange = true;
}
if (m_format != _format) {
m_format = _format;
hasChange = true;
}
if (m_frequency != _frequency) {
m_frequency = _frequency;
hasChange = true;
}
if (hasChange == true) {
m_configured = true;
configurationChange();
}
}
void audio::drain::IOFormatInterface::setConfigured(bool _value) {
m_configured = _value;
}
bool audio::drain::IOFormatInterface::getConfigured() const {
return m_configured;
}
enum audio::format audio::drain::IOFormatInterface::getFormat() const {
return m_format;
}
void audio::drain::IOFormatInterface::setFormat(enum audio::format _value) {
if (m_format == _value) {
return;
}
m_format = _value;
m_configured = true;
configurationChange();
}
const etk::Vector<enum audio::channel>& audio::drain::IOFormatInterface::getMap() const{
return m_map;
}
void audio::drain::IOFormatInterface::setMap(const etk::Vector<enum audio::channel>& _value) {
if (m_map == _value) {
return;
}
m_map = _value;
m_configured = true;
configurationChange();
}
float audio::drain::IOFormatInterface::getFrequency() const{
return m_frequency;
}
void audio::drain::IOFormatInterface::setFrequency(float _value) {
if (m_frequency == _value) {
return;
}
m_configured = true;
m_frequency = _value;
configurationChange();
}
void audio::drain::IOFormatInterface::configurationChange() {
if (m_ioChangeFunctor != null) {
m_ioChangeFunctor();
}
}
void audio::drain::IOFormatInterface::setCallback(const etk::Function<void()>& _functor) {
m_ioChangeFunctor = _functor;
}
int32_t audio::drain::IOFormatInterface::getChunkSize() const {
return m_map.size() * audio::getFormatBytes(m_format);
}

View File

@ -1,88 +0,0 @@
/** @file
* @author Edouard DUPIN
* @copyright 2011, Edouard DUPIN, all right reserved
* @license MPL v2.0 (see license file)
*/
#pragma once
#include <etk/String.hpp>
#include <etk/Vector.hpp>
#include <audio/format.hpp>
#include <audio/channel.hpp>
#include <echrono/Steady.hpp>
#include <etk/Function.hpp>
#include <ememory/memory.hpp>
#include "AutoLogInOut.hpp"
#include "debug.hpp"
namespace audio {
namespace drain{
class IOFormatInterface {
public:
IOFormatInterface();
IOFormatInterface(etk::Vector<enum audio::channel> _map, enum audio::format _format=audio::format_int16, float _frequency=48000.0f);
void set(etk::Vector<enum audio::channel> _map, enum audio::format _format=audio::format_int16, float _frequency=48000.0f);
protected:
bool m_configured;
public:
void setConfigured(bool _value);
bool getConfigured() const;
protected:
enum audio::format m_format; //!< input Algo Format
public:
/**
* @brief Get the algo format.
* @return the current Format.
*/
enum audio::format getFormat() const;
/**
* @brief Set the algo format.
* @param[in] _value New Format.
*/
void setFormat(enum audio::format _value);
protected:
etk::Vector<enum audio::channel> m_map; //!< input channel Map
public:
/**
* @brief Get the algo channel Map.
* @return the current channel Map.
*/
const etk::Vector<enum audio::channel>& getMap() const;
/**
* @brief Set the algo channel Map.
* @param[in] _value New channel Map.
*/
void setMap(const etk::Vector<enum audio::channel>& _value);
protected:
float m_frequency; //!< input Algo Format
public:
/**
* @brief Get the algo frequency.
* @return the current frequency.
*/
float getFrequency() const;
/**
* @brief Set the algo frequency.
* @param[in] _value New frequency.
*/
void setFrequency(float _value);
public:
/**
* @brief Get the Chunk size in byte.
* @return the number of byte used by chunk.
*/
int32_t getChunkSize() const;
protected:
etk::Function<void()> m_ioChangeFunctor; //!< function pointer on the upper class
void configurationChange();
public:
/**
* @brief Set the callback function to be notify when the arameter change.
* @param[in] _functor Function to call.
*/
void setCallback(const etk::Function<void()>& _functor);
};
etk::Stream& operator <<(etk::Stream& _os, const audio::drain::IOFormatInterface& _obj);
}
}

View File

@ -1,658 +0,0 @@
/** @file
* @author Edouard DUPIN
* @copyright 2011, Edouard DUPIN, all right reserved
* @license MPL v2.0 (see license file)
*/
#include <etk/String.hpp>
#include <etk/Vector.hpp>
#include <audio/format.hpp>
#include <audio/channel.hpp>
#include <audio/drain/Process.hpp>
#include <audio/drain/ChannelReorder.hpp>
#include <audio/drain/FormatUpdate.hpp>
#include <audio/drain/Resampler.hpp>
#include <audio/drain/debug.hpp>
audio::drain::Process::Process() :
m_isConfigured(false) {
m_data.clear();
}
audio::drain::Process::~Process() {
for (size_t iii=0; iii<m_listAlgo.size(); ++iii) {
m_listAlgo[iii].reset();
}
}
bool audio::drain::Process::push(audio::Time& _time,
void* _data,
size_t _nbChunk) {
void* out = null;
size_t nbChunkOut;
DRAIN_VERBOSE(" Process push");
process(_time, _data, _nbChunk, out, nbChunkOut);
return true;
}
bool audio::drain::Process::pull(audio::Time& _time,
void* _data,
size_t _nbChunk,
size_t _chunkSize) {
//DRAIN_DEBUG("Execute:");
while(m_data.size() < _nbChunk*_chunkSize) {
void* in = null;
size_t nbChunkIn = _nbChunk - m_data.size()/_chunkSize;
void* out = null;
size_t nbChunkOut;
if (nbChunkIn < 128) {
nbChunkIn = 128;
}
// TODO : maybe remove this for input data ...
for (int32_t iii=m_listAlgo.size()-1; iii >=0; --iii) {
if (m_listAlgo[iii] != null) {
nbChunkIn = m_listAlgo[iii]->needInputData(nbChunkIn);
}
}
if (nbChunkIn < 32) {
nbChunkIn = 32;
}
//DRAIN_DEBUG(" process:" << _time << " in=" << in << " nbChunkIn=" << nbChunkIn << " out=" << out << " nbChunkOut=" << nbChunkOut);
// get data from the upstream
process(_time, in, nbChunkIn, out, nbChunkOut);
if (nbChunkOut > 0) {
size_t position = m_data.size();
m_data.resize(m_data.size() + nbChunkOut*_chunkSize);
memcpy(&m_data[position], out, nbChunkOut*_chunkSize);
} else {
// No more data in the process stream (0 input data might have flush data)
break;
}
}
// copy only data availlable :
int32_t minByTeSize = etk::min(m_data.size(), _nbChunk*_chunkSize);
if (minByTeSize >= 0) {
memcpy(_data, &m_data[0], minByTeSize);
m_data.erase(m_data.begin(), m_data.begin()+minByTeSize);
}
return true;
}
bool audio::drain::Process::process(audio::Time& _time,
void* _inData,
size_t _inNbChunk,
void*& _outData,
size_t& _outNbChunk) {
updateInterAlgo();
if (m_listAlgo.size() == 0) {
_outData = _inData;
_outNbChunk = _inNbChunk;
return true;
}
DRAIN_VERBOSE(" process : " << m_listAlgo.size() << " algos nbChunk=" << _inNbChunk);
for (size_t iii=0; iii<m_listAlgo.size(); ++iii) {
DRAIN_VERBOSE(" Algo " << iii+1 << "/" << m_listAlgo.size());
if (m_listAlgo[iii] != null) {
m_listAlgo[iii]->process(_time, _inData, _inNbChunk, _outData, _outNbChunk);
_inData = _outData;
_inNbChunk = _outNbChunk;
}
}
return true;
}
void audio::drain::Process::pushBack(ememory::SharedPtr<audio::drain::Algo> _algo) {
removeAlgoDynamic();
_algo->setStatusFunction([=](const etk::String& _origin, const etk::String& _status) { generateStatus(_origin, _status);});
m_listAlgo.pushBack(_algo);
}
void audio::drain::Process::pushFront(ememory::SharedPtr<audio::drain::Algo> _algo) {
removeAlgoDynamic();
_algo->setStatusFunction([=](const etk::String& _origin, const etk::String& _status) { generateStatus(_origin, _status);});
m_listAlgo.pushFront(_algo);
}
template<typename DRAIN_TYPE>
etk::Vector<DRAIN_TYPE> getUnion(const etk::Vector<DRAIN_TYPE>& _out, const etk::Vector<DRAIN_TYPE>& _in) {
etk::Vector<DRAIN_TYPE> out;
if (_out.size() == 0) {
// Last is ok for all format
// ==> set the limit with the next element
out = _in;
} else if (_in.size() == 0) {
// next is ok for all format
} else {
// must check all values
for (size_t ooo=0; ooo<_out.size(); ++ooo) {
for (size_t iii=0; iii<_in.size(); ++iii) {
if (_out[ooo] == _in[iii]) {
out.pushBack(_out[ooo]);
}
}
}
}
return out;
}
void audio::drain::Process::displayAlgo() {
DRAIN_DEBUG(" Input : " << m_inputConfig);
for (size_t iii=0; iii<m_listAlgo.size(); ++iii) {
DRAIN_DEBUG(" [" << m_listAlgo[iii]->getType() << "] '" << m_listAlgo[iii]->getName() << "'");
if (m_listAlgo[iii]->getInputFormat().getConfigured() == true) {
DRAIN_DEBUG(" Input : " << m_listAlgo[iii]->getInputFormat());
} else {
DRAIN_DEBUG(" Input : Not configured");
DRAIN_DEBUG(" format : " << m_listAlgo[iii]->getFormatSupportedInput());
DRAIN_DEBUG(" frequency : " << m_listAlgo[iii]->getFrequencySupportedInput());
DRAIN_DEBUG(" map : " << m_listAlgo[iii]->getMapSupportedInput());
}
if (m_listAlgo[iii]->getOutputFormat().getConfigured() == true) {
DRAIN_DEBUG(" Output: " << m_listAlgo[iii]->getOutputFormat());
} else {
DRAIN_DEBUG(" Output : Not configured");
DRAIN_DEBUG(" format : " << m_listAlgo[iii]->getFormatSupportedOutput());
DRAIN_DEBUG(" frequency : " << m_listAlgo[iii]->getFrequencySupportedOutput());
DRAIN_DEBUG(" map : " << m_listAlgo[iii]->getMapSupportedOutput());
}
}
DRAIN_DEBUG(" Output : " << m_outputConfig);
}
void audio::drain::Process::updateAlgo(size_t _position) {
DRAIN_VERBOSE(" id = " << _position);
if ( ( _position == 0
|| ( _position > 0
&& m_listAlgo[_position-1]->getOutputFormat().getConfigured() == false
)
)
&& ( _position == m_listAlgo.size()
|| ( _position < m_listAlgo.size()
&& m_listAlgo[_position]->getInputFormat().getConfigured() == false
)
)
) {
// step 1 : check frequency:
etk::Vector<float> freqOut;
etk::Vector<float> freqIn;
if (_position == 0) {
freqOut.pushBack(m_inputConfig.getFrequency());
} else {
freqOut = m_listAlgo[_position-1]->getFrequencySupportedOutput();
}
if (_position == m_listAlgo.size()) {
freqIn.pushBack(m_outputConfig.getFrequency());
} else {
freqIn = m_listAlgo[_position]->getFrequencySupportedInput();
}
etk::Vector<float> freq = getUnion<float>(freqOut, freqIn);
DRAIN_VERBOSE(" freq out :" << freqOut);
DRAIN_VERBOSE(" freq in :" << freqIn);
DRAIN_VERBOSE(" freq union :" << freq);
// step 2 : Check map:
etk::Vector<etk::Vector<audio::channel> > mapOut;
etk::Vector<etk::Vector<audio::channel> > mapIn;
if (_position == 0) {
mapOut.pushBack(m_inputConfig.getMap());
} else {
mapOut = m_listAlgo[_position-1]->getMapSupportedOutput();
}
if (_position == m_listAlgo.size()) {
mapIn.pushBack(m_outputConfig.getMap());
} else {
mapIn = m_listAlgo[_position]->getMapSupportedInput();
}
etk::Vector<etk::Vector<audio::channel> > map = getUnion<etk::Vector<audio::channel> >(mapOut, mapIn);
DRAIN_VERBOSE(" map out :" << mapOut);
DRAIN_VERBOSE(" map in :" << mapIn);
DRAIN_VERBOSE(" map union :" << map);
// step 3 : Check Format:
etk::Vector<audio::format> formatOut;
etk::Vector<audio::format> formatIn;
if (_position == 0) {
formatOut.pushBack(m_inputConfig.getFormat());
} else {
formatOut = m_listAlgo[_position-1]->getFormatSupportedOutput();
}
if (_position == m_listAlgo.size()) {
formatIn.pushBack(m_outputConfig.getFormat());
} else {
formatIn = m_listAlgo[_position]->getFormatSupportedInput();
}
etk::Vector<audio::format> format = getUnion<audio::format>(formatOut, formatIn);
DRAIN_VERBOSE(" format out :" << formatOut);
DRAIN_VERBOSE(" format in :" << formatIn);
DRAIN_VERBOSE(" format union :" << format);
if ( freq.size() >= 1
&& map.size() >= 1
&& format.size() >= 1) {
DRAIN_VERBOSE(" find 1 compatibility :{format=" << format << ",frequency=" << freq << ",map=" << map << "}");
drain::IOFormatInterface tmp(map[0], format[0], freq[0]);
if (_position > 0) {
m_listAlgo[_position-1]->setOutputFormat(tmp);
}
if (_position <m_listAlgo.size()) {
m_listAlgo[_position]->setInputFormat(tmp);
}
return;
}
// create mapping to transform:
audio::drain::IOFormatInterface out;
audio::drain::IOFormatInterface in;
if (freq.size() > 0) {
out.setFrequency(freq[0]);
in.setFrequency(freq[0]);
} else {
if (freqOut.size() == 0) {
if (freqIn.size() == 0) {
if (_position == 0) {
DRAIN_ERROR("IMPOSSIBLE CASE");
} else {
out.setFrequency(m_listAlgo[_position-1]->getInputFormat().getFrequency());
in.setFrequency(m_listAlgo[_position-1]->getInputFormat().getFrequency());
}
} else {
out.setFrequency(freqIn[0]);
in.setFrequency(freqIn[0]);
}
} else {
if (freqIn.size() == 0) {
out.setFrequency(freqOut[0]);
in.setFrequency(freqOut[0]);
} else {
out.setFrequency(freqOut[0]);
in.setFrequency(freqIn[0]);
}
}
}
if (map.size() > 0) {
out.setMap(map[0]);
in.setMap(map[0]);
} else {
if (mapOut.size() == 0) {
if (mapIn.size() == 0) {
if (_position == 0) {
DRAIN_ERROR("IMPOSSIBLE CASE");
} else {
out.setMap(m_listAlgo[_position-1]->getInputFormat().getMap());
in.setMap(m_listAlgo[_position-1]->getInputFormat().getMap());
}
} else {
out.setMap(mapIn[0]);
in.setMap(mapIn[0]);
}
} else {
if (mapIn.size() == 0) {
out.setMap(mapOut[0]);
in.setMap(mapOut[0]);
} else {
out.setMap(mapOut[0]);
in.setMap(mapIn[0]);
}
}
}
if (format.size() > 0) {
out.setFormat(format[0]);
in.setFormat(format[0]);
} else {
if (formatOut.size() == 0) {
if (formatIn.size() == 0) {
if (_position == 0) {
DRAIN_ERROR("IMPOSSIBLE CASE");
} else {
out.setFormat(m_listAlgo[_position-1]->getInputFormat().getFormat());
in.setFormat(m_listAlgo[_position-1]->getInputFormat().getFormat());
}
} else {
out.setFormat(formatIn[0]);
in.setFormat(formatIn[0]);
}
} else {
if (formatIn.size() == 0) {
out.setFormat(formatOut[0]);
in.setFormat(formatOut[0]);
} else {
out.setFormat(formatOut[0]);
in.setFormat(formatIn[0]);
}
}
}
DRAIN_VERBOSE(" update: out=" << out);
DRAIN_VERBOSE(" in=" << in);
if (_position > 0) {
m_listAlgo[_position-1]->setOutputFormat(out);
}
if (_position < m_listAlgo.size()) {
m_listAlgo[_position]->setInputFormat(in);
}
// TODO : Add updater with an optimisation of CPU
if (out.getFrequency() != in.getFrequency()) {
// TODO : Do it better: special check for resampler : only support int16_t
if ( out.getFormat() != audio::format_int16
/* && out.getFormat() != format_float */) {
// need add a format Updater
ememory::SharedPtr<audio::drain::FormatUpdate> algo = audio::drain::FormatUpdate::create();
algo->setTemporary();
algo->setInputFormat(out);
out.setFormat(audio::format_int16);
algo->setOutputFormat(out);
algo->setStatusFunction([=](const etk::String& _origin, const etk::String& _status) { generateStatus(_origin, _status);});
m_listAlgo.insert(m_listAlgo.begin()+_position, algo);
DRAIN_VERBOSE("convert " << out.getFormat() << " -> " << in.getFormat());
_position++;
}
// need add a resampler
ememory::SharedPtr<audio::drain::Resampler> algo = audio::drain::Resampler::create();
algo->setTemporary();
algo->setInputFormat(out);
out.setFrequency(in.getFrequency());
algo->setOutputFormat(out);
algo->setStatusFunction([=](const etk::String& _origin, const etk::String& _status) { generateStatus(_origin, _status);});
m_listAlgo.insert(m_listAlgo.begin()+_position, algo);
DRAIN_VERBOSE("convert " << out.getFrequency() << " -> " << in.getFrequency());
out.setFrequency(in.getFrequency());
_position++;
}
if (out.getMap() != in.getMap()) {
// need add a channel Reorder
ememory::SharedPtr<audio::drain::ChannelReorder> algo = audio::drain::ChannelReorder::create();
algo->setTemporary();
algo->setInputFormat(out);
out.setMap(in.getMap());
algo->setOutputFormat(out);
algo->setStatusFunction([=](const etk::String& _origin, const etk::String& _status) { generateStatus(_origin, _status);});
m_listAlgo.insert(m_listAlgo.begin()+_position, algo);
DRAIN_VERBOSE("convert " << out.getMap() << " -> " << in.getMap());
_position++;
}
if (out.getFormat() != in.getFormat()) {
// need add a format Updater
ememory::SharedPtr<audio::drain::FormatUpdate> algo = audio::drain::FormatUpdate::create();
algo->setTemporary();
algo->setInputFormat(out);
out.setFormat(in.getFormat());
algo->setOutputFormat(out);
algo->setStatusFunction([=](const etk::String& _origin, const etk::String& _status) { generateStatus(_origin, _status);});
m_listAlgo.insert(m_listAlgo.begin()+_position, algo);
DRAIN_VERBOSE("convert " << out.getFormat() << " -> " << in.getFormat());
_position++;
}
} else if ( ( _position > 0
&& m_listAlgo[_position-1]->getOutputFormat().getConfigured() == false
)
|| ( _position < m_listAlgo.size()
&& m_listAlgo[_position]->getInputFormat().getConfigured() == false
)
) {
DRAIN_ERROR(" configuration error mode in " << _position-1 << " && " << _position );
}
}
void audio::drain::Process::updateInterAlgo() {
if (m_isConfigured == true) {
// cahin is already configured
return ;
}
DRAIN_VERBOSE("Display properties : nbAlgo : " << m_listAlgo.size());
displayAlgo();
DRAIN_VERBOSE("********* configuration START *************");
// configure first the endpoint ...
if (m_listAlgo.size() >= 1) {
updateAlgo(m_listAlgo.size());
}
for (size_t iii=0; iii<=m_listAlgo.size(); ++iii) {
updateAlgo(iii);
}
DRAIN_VERBOSE("********* configuration will be done *************");
displayAlgo();
m_isConfigured = true;
//exit(-1);
}
void audio::drain::Process::removeAlgoDynamic() {
if (m_isConfigured == true) {
// chain is already unconfigured.
return;
}
m_isConfigured = false;
}
bool audio::drain::Process::processIn(void* _inData,
size_t _inNbChunk,
void* _outData,
size_t _outNbChunk){
void* outData = null;
size_t outSize = 0;
bool error = process(_inData, _inNbChunk, outData, outSize);
if (outSize != _outNbChunk) {
DRAIN_ERROR("can not copy data to output (not the same chunk number : out=" << outSize << " chunks != request=" << _outNbChunk << " chunks");
return false;
}
// TODO : Do it better ...
DRAIN_VERBOSE("Copy " << _outNbChunk << " chunks byte size=" << audio::getFormatBytes(m_outputConfig.getFormat()) << " nbChan=" << m_outputConfig.getMap().size() << " format=" << m_outputConfig.getFormat());
memcpy(_outData, outData, _outNbChunk*audio::getFormatBytes(m_outputConfig.getFormat()) * m_outputConfig.getMap().size());
return false;
}
static void link(ememory::SharedPtr<etk::io::Interface>& _io, const etk::String& _first, const etk::String& _op, const etk::String& _second, bool _isLink=true) {
if (_op == "->") {
if (_isLink) {
*_io << " " << _first << " -> " << _second << ";\n";
} else {
*_io << " " << _first << " -> " << _second << " [style=dashed];\n";
}
} else if (_op == "<-") {
*_io << " " << _first << " -> " <<_second<< " [color=transparent];\n";
if (_isLink) {
*_io << " " << _second << " -> " << _first << " [constraint=false];\n";
} else {
*_io << " " << _second << " -> " << _first << " [constraint=false, style=dashed];\n";
}
}
}
void audio::drain::Process::generateDot(ememory::SharedPtr<etk::io::Interface>& _io,
int32_t _offset,
int32_t _basicID,
etk::String& _nameIn,
etk::String& _nameOut,
bool _reserseGraph) {
*_io << " subgraph clusterNode_" << _basicID << "_process {\n";
*_io << " label=\"Drain::Process" << (_reserseGraph?"_R":"_N") << "\";\n";
*_io << " node [shape=ellipse];\n";
if (_reserseGraph == false) {
// ----------------------
// -- STEP 1 --
// ----------------------
_nameIn = "INTERFACE_ALGO_" + etk::toString(_basicID) + "_in";
*_io << " " << _nameIn << " [ label=\"format=" << etk::toString(getInputConfig().getFormat())
<< "\\n freq=" << getInputConfig().getFrequency()
<< "\\n channelMap=" << etk::toString(getInputConfig().getMap()) << "\\n in\" ];\n";
// ----------------------
// -- STEP 2 --
// ----------------------
etk::String connectString = _nameIn;
*_io << " node [shape=box];\n";
// ----------------------
// -- STEP 3 --
// ----------------------
for (size_t iii=0; iii<m_listAlgo.size(); ++iii) {
if (m_listAlgo[iii] == null) {
continue;
}
etk::String connectStringSecond = "ALGO_" + etk::toString(_basicID) + "__" + etk::toString(iii);
*_io << " " << connectStringSecond << " [label=\"ALGO\\ntype='" << m_listAlgo[iii]->getType() << "'";
if (m_listAlgo[iii]->getName() != "") {
*_io << "\\nname='" << m_listAlgo[iii]->getName() << "'";
}
etk::String tmpDesc = m_listAlgo[iii]->getDotDesc();
if (tmpDesc.size() != 0) {
*_io << tmpDesc;
}
*_io << "\" ];\n";
link(_io, connectString, "->", connectStringSecond);
connectString = connectStringSecond;
}
// ----------------------
// -- STEP 4 --
// ----------------------
*_io << " node [shape=ellipse];\n";
// ----------------------
// -- STEP 5 --
// ----------------------
_nameOut = "INTERFACE_ALGO_" + etk::toString(_basicID) + "_out";
*_io << " " << _nameOut << " [ label=\"format=" << etk::toString(getOutputConfig().getFormat())
<< "\\n freq=" << getOutputConfig().getFrequency()
<< "\\n channelMap=" << etk::toString(getOutputConfig().getMap()) << "\\n out\" ];\n";
// ----------------------
// -- STEP 6 --
// ----------------------
link(_io, connectString, "->", _nameOut);
} else {
// ----------------------
// -- STEP 1 --
// ----------------------
_nameIn = "INTERFACE_ALGO_" + etk::toString(_basicID) + "_out";
*_io << " " << _nameIn << " [ label=\"format=" << etk::toString(getOutputConfig().getFormat())
<< "\\n freq=" << getOutputConfig().getFrequency()
<< "\\n channelMap=" << etk::toString(getOutputConfig().getMap()) << "\\n out\" ];\n";
// ----------------------
// -- STEP 2 --
// ----------------------
etk::String connectString = _nameIn;
*_io << " node [shape=box];\n";
// ----------------------
// -- STEP 3 --
// ----------------------
for (int32_t iii=m_listAlgo.size()-1; iii>=0; --iii) {
//for (size_t iii=0; iii<m_listAlgo.size(); ++iii) {
if (m_listAlgo[iii] == null) {
continue;
}
etk::String connectStringSecond = "ALGO_" + etk::toString(_basicID) + "__" + etk::toString(iii);
*_io << " " << connectStringSecond << " [label=\"ALGO\\ntype='" << m_listAlgo[iii]->getType() << "'";
if (m_listAlgo[iii]->getName() != "") {
*_io << "\\nname='" << m_listAlgo[iii]->getName() << "'";
}
etk::String tmpDesc = m_listAlgo[iii]->getDotDesc();
if (tmpDesc.size() != 0) {
*_io << tmpDesc;
}
*_io << "\" ];\n";
//link(_io, connectStringSecond, "<-", connectString);
link(_io, connectString, "<-", connectStringSecond);
//link(_io, connectStringSecond, "->", connectString);
connectString = connectStringSecond;
}
// ----------------------
// -- STEP 4 --
// ----------------------
*_io << " node [shape=ellipse];\n";
// ----------------------
// -- STEP 5 --
// ----------------------
_nameOut = "INTERFACE_ALGO_" + etk::toString(_basicID) + "_in";
*_io << " " << _nameOut << " [ label=\"format=" << etk::toString(getInputConfig().getFormat())
<< "\\n freq=" << getInputConfig().getFrequency()
<< "\\n channelMap=" << etk::toString(getInputConfig().getMap()) << "\\n in\" ];\n";
// ----------------------
// -- STEP 6 --
// ----------------------
link(_io, connectString, "<-", _nameOut);
}
*_io << " }\n";
}
void audio::drain::Process::generateDotProcess(ememory::SharedPtr<etk::io::Interface>& _io, int32_t _offset, int32_t _basicID, etk::String& _nameIn, etk::String& _nameOut, bool _reserseGraph) {
*_io << " subgraph clusterNode_" << _basicID << "_process {\n";
*_io << " label=\"Drain::Process" << (_reserseGraph?"_R":"_N") << "\";\n";
*_io << " node [shape=ellipse];\n";
if (_reserseGraph == true) {
_nameIn = "INTERFACE_ALGO_" + etk::toString(_basicID) + "_in";
*_io << " " << _nameIn << " [ label=\"format=" << etk::toString(getInputConfig().getFormat())
<< "\\n freq=" << getInputConfig().getFrequency()
<< "\\n channelMap=" << etk::toString(getInputConfig().getMap()) << "\\n in\" ];\n";
} else {
_nameIn = "INTERFACE_ALGO_" + etk::toString(_basicID) + "_out";
*_io << " " << _nameIn << " [ label=\"format=" << etk::toString(getOutputConfig().getFormat())
<< "\\n freq=" << getOutputConfig().getFrequency()
<< "\\n channelMap=" << etk::toString(getOutputConfig().getMap()) << "\\n out\" ];\n";
}
etk::String connectString = _nameIn;
*_io << " node [shape=box];\n";
if (_reserseGraph == false) {
for (size_t iii=0; iii<m_listAlgo.size(); ++iii) {
if (m_listAlgo[iii] == null) {
continue;
}
etk::String connectStringSecond = "ALGO_" + etk::toString(_basicID) + "__" + etk::toString(iii);
*_io << " " << connectStringSecond << " [label=\"ALGO\\ntype='" << m_listAlgo[iii]->getType() << "'";
if (m_listAlgo[iii]->getName() != "") {
*_io << "\\nname='" << m_listAlgo[iii]->getName() << "'";
}
etk::String tmpDesc = m_listAlgo[iii]->getDotDesc();
if (tmpDesc.size() != 0) {
*_io << tmpDesc;
}
*_io << "\" ];\n";
link(_io, connectString, "->", connectStringSecond);
connectString = connectStringSecond;
}
} else {
//for (int32_t iii=m_listAlgo.size()-1; iii>=0; --iii) {
for (size_t iii=0; iii<m_listAlgo.size(); ++iii) {
if (m_listAlgo[iii] == null) {
continue;
}
etk::String connectStringSecond = "ALGO_" + etk::toString(_basicID) + "__" + etk::toString(iii);
*_io << " " << connectStringSecond << " [label=\"ALGO\\ntype='" << m_listAlgo[iii]->getType() << "'";
if (m_listAlgo[iii]->getName() != "") {
*_io << "\\nname='" << m_listAlgo[iii]->getName() << "'";
}
etk::String tmpDesc = m_listAlgo[iii]->getDotDesc();
if (tmpDesc.size() != 0) {
*_io << tmpDesc;
}
*_io << "\" ];\n";
link(_io, connectStringSecond, "<-", connectString);
connectString = connectStringSecond;
}
}
*_io << " node [shape=ellipse];\n";
if (_reserseGraph == true) {
_nameOut = "INTERFACE_ALGO_" + etk::toString(_basicID) + "_out";
*_io << " " << _nameOut << " [ label=\"format=" << etk::toString(getOutputConfig().getFormat())
<< "\\n freq=" << getOutputConfig().getFrequency()
<< "\\n channelMap=" << etk::toString(getOutputConfig().getMap()) << "\\n out\" ];\n";
} else {
_nameOut = "INTERFACE_ALGO_" + etk::toString(_basicID) + "_in";
*_io << " " << _nameOut << " [ label=\"format=" << etk::toString(getInputConfig().getFormat())
<< "\\n freq=" << getInputConfig().getFrequency()
<< "\\n channelMap=" << etk::toString(getInputConfig().getMap()) << "\\n in\" ];\n";
}
if (_reserseGraph == false) {
link(_io, connectString, "->", _nameOut);
} else {
link(_io, _nameOut, "<-", connectString);
}
*_io << " }\n";
}
void audio::drain::Process::generateStatus(const etk::String& _origin, const etk::String& _status) {
if (m_statusFunction != null) {
m_statusFunction(_origin, _status);
}
}
void audio::drain::Process::setStatusFunction(statusFunction _newFunction) {
m_statusFunction = _newFunction;
}

View File

@ -1,187 +0,0 @@
/** @file
* @author Edouard DUPIN
* @copyright 2011, Edouard DUPIN, all right reserved
* @license MPL v2.0 (see license file)
*/
#pragma once
#include <etk/String.hpp>
#include <etk/Vector.hpp>
#include <etk/io/Interface.hpp>
#include <audio/format.hpp>
#include <audio/channel.hpp>
#include <audio/drain/Algo.hpp>
#include <echrono/Steady.hpp>
#include <ememory/memory.hpp>
namespace audio {
namespace drain{
typedef etk::Function<void (const etk::String& _origin, const etk::String& _status)> statusFunction;
class Process {
protected:
etk::Vector<int8_t> m_data; //!< temporary overlap output buffer (change size of the output data)
public:
Process();
virtual ~Process();
public:
/**
* @brief Push data in the algo stream.
* @param[in] _time Time of the first sample pushed.
* @param[in] _data Pointer on the data pushed.
* @param[in] _nbChunk Number of chunk present in the pointer.
* @return true The procress is done corectly.
* @return false An error occured.
*/
bool push(audio::Time& _time,
void* _data,
size_t _nbChunk);
/**
* @brief Push data in the algo stream.
* @param[in] _time Time of the first sample requested.
* @param[in] _data Pointer on the data pushed.
* @param[in,out] _nbChunk Number of chunk present in the pointer (set at the number of chunk requested(hope)).
* @param[out] _chunkSize size of a single chunk. TODO : Not needed ... Remove it ...
* @return true The procress is done corectly.
* @return false An error occured.
*/
bool pull(audio::Time& _time,
void* _data,
size_t _nbChunk,
size_t _chunkSize);
/**
* @brief Push data in the algo stream.
* @param[in] _time Time of the first sample pushed.
* @param[in] _inData Pointer on the data pushed.
* @param[in] _inNbChunk Number of chunk present in the input pointer.
* @param[out] _outData Pointer on the data geted.
* @param[out] _outNbChunk Number of chunk present in the output pointer.
* @return true The procress is done corectly.
* @return false An error occured.
*/
bool process(audio::Time& _time,
void* _inData,
size_t _inNbChunk,
void*& _outData,
size_t& _outNbChunk);
bool process(void* _inData,
size_t _inNbChunk,
void*& _outData,
size_t& _outNbChunk) {
audio::Time time;
return process(time, _inData, _inNbChunk, _outData, _outNbChunk);
}
bool processIn(void* _inData,
size_t _inNbChunk,
void* _outData,
size_t _outNbChunk);
protected:
IOFormatInterface m_inputConfig;
public:
const IOFormatInterface& getInputConfig() const {
return m_inputConfig;
}
void setInputConfig(const IOFormatInterface& _interface) {
m_inputConfig = _interface;
}
protected:
IOFormatInterface m_outputConfig;
public:
const IOFormatInterface& getOutputConfig() const {
return m_outputConfig;
}
void setOutputConfig(const IOFormatInterface& _interface) {
m_outputConfig = _interface;
}
protected:
etk::Vector<ememory::SharedPtr<drain::Algo> > m_listAlgo;
public:
void pushBack(ememory::SharedPtr<drain::Algo> _algo);
void pushFront(ememory::SharedPtr<drain::Algo> _algo);
void clear() {
m_isConfigured = false;
m_listAlgo.clear();
}
size_t size() {
return m_listAlgo.size();
}
etk::Vector<ememory::SharedPtr<drain::Algo>>::Iterator begin() {
return m_listAlgo.begin();
}
etk::Vector<ememory::SharedPtr<drain::Algo>>::Iterator end() {
return m_listAlgo.end();
}
ememory::SharedPtr<drain::Algo> operator[](int32_t _id) {
return m_listAlgo[_id];
}
template<typename T> ememory::SharedPtr<T> get(const etk::String& _name) {
for (size_t iii=0; iii<m_listAlgo.size(); ++iii) {
if (m_listAlgo[iii] == null) {
continue;
}
if (m_listAlgo[iii]->getName() == _name) {
return ememory::dynamicPointerCast<T>(m_listAlgo[iii]);
}
}
return ememory::SharedPtr<T>();
}
template<typename T> ememory::SharedPtr<const T> get(const etk::String& _name) const {
for (size_t iii=0; iii<m_listAlgo.size(); ++iii) {
if (m_listAlgo[iii] == null) {
continue;
}
if (m_listAlgo[iii]->getName() == _name) {
return ememory::dynamicPointerCast<T>(m_listAlgo[iii]);
}
}
return ememory::SharedPtr<const T>();
}
template<typename T> ememory::SharedPtr<T> get(int32_t _id) {
return ememory::dynamicPointerCast<T>(m_listAlgo[_id]);
}
template<typename T> void removeIfFirst() {
if (m_listAlgo.size() > 0) {
ememory::SharedPtr<T> algoEP = get<T>(0);
if (algoEP != null) {
m_listAlgo.erase(m_listAlgo.begin());
}
}
}
template<typename T> void removeIfLast() {
if (m_listAlgo.size() > 0) {
ememory::SharedPtr<T> algoEP = get<T>(m_listAlgo.size()-1);
if (algoEP != null) {
m_listAlgo.erase(m_listAlgo.begin()+m_listAlgo.size()-1);
}
}
}
template<typename T> bool hasType() {
for (size_t iii=0; iii<m_listAlgo.size(); ++iii) {
ememory::SharedPtr<T> tmp = ememory::dynamicPointerCast<T>(m_listAlgo[iii]);
if (tmp != null) {
return true;
}
}
return false;
}
private:
statusFunction m_statusFunction;
public:
void generateStatus(const etk::String& _origin, const etk::String& _status);
void setStatusFunction(statusFunction _newFunction);
private:
bool m_isConfigured;
public:
void updateInterAlgo();
void removeAlgoDynamic();
private:
void displayAlgo();
void updateAlgo(size_t _position);
public:
void generateDot(ememory::SharedPtr<etk::io::Interface>& _io, int32_t _offset, int32_t _basicID, etk::String& _nameIn, etk::String& _nameOut, bool _reserseGraph);
// TODO : Remove this one when we find a good way to do it ...
void generateDotProcess(ememory::SharedPtr<etk::io::Interface>& _io, int32_t _offset, int32_t _basicID, etk::String& _nameIn, etk::String& _nameOut, bool _reserseGraph);
};
}
}

View File

@ -1,162 +0,0 @@
/** @file
* @author Edouard DUPIN
* @copyright 2011, Edouard DUPIN, all right reserved
* @license MPL v2.0 (see license file)
*/
#include <audio/drain/Resampler.hpp>
#include <audio/drain/debug.hpp>
audio::drain::Resampler::Resampler() :
#ifdef HAVE_SPEEX_DSP_RESAMPLE
m_speexResampler(null),
#endif
m_positionRead(0),
m_positionWrite(0) {
}
void audio::drain::Resampler::init() {
audio::drain::Algo::init();
m_type = "Resampler";
m_supportedFormat.pushBack(audio::format_int16);
m_residualTimeInResampler = audio::Duration(0);
}
ememory::SharedPtr<audio::drain::Resampler> audio::drain::Resampler::create() {
ememory::SharedPtr<audio::drain::Resampler> tmp(ETK_NEW(audio::drain::Resampler));
tmp->init();
return tmp;
}
audio::drain::Resampler::~Resampler() {
#ifdef HAVE_SPEEX_DSP_RESAMPLE
if (m_speexResampler != null) {
speex_resampler_destroy(m_speexResampler);
m_speexResampler = null;
}
#endif
}
void audio::drain::Resampler::configurationChange() {
audio::drain::Algo::configurationChange();
if (m_input.getFormat() != m_output.getFormat()) {
DRAIN_ERROR("can not support Format Change ...");
m_needProcess = false;
}
if (m_input.getFormat() != audio::format_int16) {
DRAIN_ERROR("can not support Format other than int16_t ...");
m_needProcess = false;
return;
}
if (m_output.getMap() != m_output.getMap()) {
DRAIN_ERROR("can not support map Change ...");
m_needProcess = false;
}
if (m_input.getFrequency() == m_output.getFrequency()) {
// nothing to process...
m_needProcess = false;
return;
}
if ( m_input.getFrequency() == 0
|| m_output.getFrequency() == 0) {
DRAIN_WARNING("Configure IO with 0 frequency ... " << m_input << " to " << m_output);
return;
}
#ifdef HAVE_SPEEX_DSP_RESAMPLE
if (m_speexResampler != null) {
speex_resampler_destroy(m_speexResampler);
m_speexResampler = null;
}
int err = 0;
DRAIN_WARNING("Create resampler for : " << m_input << " to " << m_output);
m_speexResampler = speex_resampler_init(m_output.getMap().size(),
m_input.getFrequency(),
m_output.getFrequency(),
10, &err);
m_residualTimeInResampler = audio::Duration(0);
#else
DRAIN_WARNING("SPEEX DSP lib not accessible ==> can not resample");
m_needProcess = false;
#endif
}
bool audio::drain::Resampler::process(audio::Time& _time,
void* _input,
size_t _inputNbChunk,
void*& _output,
size_t& _outputNbChunk) {
drain::AutoLogInOut tmpLog("Resampler");
_outputNbChunk = 2048;
// chack if we need to process:
if (m_needProcess == false) {
DRAIN_WARNING("no process");
_output = _input;
_outputNbChunk = _inputNbChunk;
return true;
}
if (_input == null) {
_output = &(m_outputData[0]);
_outputNbChunk = 0;
DRAIN_ERROR("null pointer input ... ");
return false;
}
// Update Output time with the previous delta of the buffer
DRAIN_VERBOSE("Resampler correct timestamp : " << _time << " ==> " << (_time - m_residualTimeInResampler));
_time -= m_residualTimeInResampler;
audio::Duration inTime(0, (int64_t(_inputNbChunk)*1000000000LL) / int64_t(m_input.getFrequency()));
m_residualTimeInResampler += inTime;
#ifdef HAVE_SPEEX_DSP_RESAMPLE
float nbInputTime = float(_inputNbChunk)/m_input.getFrequency();
float nbOutputSample = nbInputTime*m_output.getFrequency();
// we add 10% of the buffer size to have all the time enought data in the output to proceed all the input data...
_outputNbChunk = size_t(nbOutputSample*1.5f);
DRAIN_VERBOSE(" freq in=" << m_input.getFrequency() << " out=" << m_output.getFrequency());
DRAIN_VERBOSE(" Frame duration=" << nbInputTime);
DRAIN_VERBOSE(" nbInput chunk=" << _inputNbChunk << " nbOutputChunk=" << nbOutputSample);
m_outputData.resize(_outputNbChunk*m_output.getMap().size()*m_formatSize*16);
_output = &(m_outputData[0]);
if (m_speexResampler == null) {
DRAIN_ERROR(" No speex resampler");
return false;
}
uint32_t nbChunkInput = _inputNbChunk;
uint32_t nbChunkOutput = _outputNbChunk;
DRAIN_VERBOSE(" >> input=" << nbChunkInput << " output=" << nbChunkOutput);
int ret = speex_resampler_process_interleaved_int(m_speexResampler,
static_cast<int16_t*>(_input),
&nbChunkInput,
static_cast<int16_t*>(_output),
&nbChunkOutput);
DRAIN_VERBOSE(" << input=" << nbChunkInput << " output=" << nbChunkOutput);
// update position of data:
m_positionWrite += nbChunkOutput;
// Check all input and output ...
if (nbChunkInput != _inputNbChunk) {
DRAIN_ERROR(" inputSize (not all read ...) proceed=" << nbChunkInput << " requested=" << _inputNbChunk);
// TODO : manage this case ...
}
if (nbChunkOutput == _outputNbChunk) {
DRAIN_ERROR(" Might have not enought data in output... output size=" << _outputNbChunk);
// TODO : manage this case ...
}
_outputNbChunk = nbChunkOutput;
DRAIN_VERBOSE(" process chunk=" << nbChunkInput << " out=" << nbChunkOutput);
audio::Duration outTime(0, (int64_t(_outputNbChunk)*1000000000LL) / int64_t(m_output.getFrequency()));
DRAIN_VERBOSE("convert " << _inputNbChunk << " ==> " << _outputNbChunk << " " << inTime << " => " << outTime);
// correct time :
m_residualTimeInResampler -= outTime;
/*
if (m_residualTimeInResampler.get() < 0) {
DRAIN_TODO("manage this case ... residual time in resampler : " << m_residualTimeInResampler << "ns");
}
*/
return true;
#else
_output = _input;
_outputNbChunk = _inputNbChunk;
return false;
#endif
}

View File

@ -1,50 +0,0 @@
/** @file
* @author Edouard DUPIN
* @copyright 2011, Edouard DUPIN, all right reserved
* @license MPL v2.0 (see license file)
*/
#pragma once
#include <audio/drain/Algo.hpp>
#ifdef HAVE_SPEEX_DSP_RESAMPLE
#include <speex/speex_resampler.h>
#endif
#include <ememory/memory.hpp>
namespace audio {
namespace drain {
// TODO: Manage change timestamp when pull mode
// TODO: drain ...
class Resampler : public audio::drain::Algo {
private:
#ifdef HAVE_SPEEX_DSP_RESAMPLE
SpeexResamplerState* m_speexResampler;
#endif
size_t m_positionRead; //!< For residual data in the buffer last read number of chunk
size_t m_positionWrite; //!< Current pointer of writing new output data of resampler
protected:
/**
* @brief Constructor
*/
Resampler();
void init();
public:
static ememory::SharedPtr<audio::drain::Resampler> create();
/**
* @brief Destructor
*/
virtual ~Resampler();
protected:
virtual void configurationChange();
public:
virtual bool process(audio::Time& _time,
void* _input,
size_t _inputNbChunk,
void*& _output,
size_t& _outputNbChunk);
private:
audio::Duration m_residualTimeInResampler; //!< the time of data locked in the resampler ...
};
}
}

View File

@ -1,451 +0,0 @@
/** @file
* @author Edouard DUPIN
* @copyright 2011, Edouard DUPIN, all right reserved
* @license MPL v2.0 (see license file)
*/
#include <audio/drain/Volume.hpp>
extern "C" {
#include <math.h>
}
#include <audio/drain/debug.hpp>
audio::drain::Volume::Volume() :
m_volumeAppli(1.0f),
m_functionConvert(null) {
}
void audio::drain::Volume::init() {
audio::drain::Algo::init();
m_type = "Volume";
m_supportedFormat.pushBack(audio::format_int16);
m_supportedFormat.pushBack(audio::format_int16_on_int32);
}
ememory::SharedPtr<audio::drain::Volume> audio::drain::Volume::create() {
ememory::SharedPtr<audio::drain::Volume> tmp(ETK_NEW(audio::drain::Volume));
tmp->init();
return tmp;
}
audio::drain::Volume::~Volume() {
}
static int32_t neareastsss(float _val) {
int32_t out = 0;
while (_val > float(1<<out)) {
out++;
}
return etk::min(16,out);
}
static void convert__int16__to__int16(void* _input, void* _output, size_t _nbSample, int32_t _volumeCoef, int32_t _volumeDecalage, float _volumeAppli) {
int16_t* in = static_cast<int16_t*>(_input);
int16_t* out = static_cast<int16_t*>(_output);
for (size_t iii=0; iii<_nbSample; ++iii) {
out[iii] = int16_t((int32_t(in[iii]) * int32_t(_volumeCoef)) >> _volumeDecalage);
}
}
static void convert__int16__to__float(void* _input, void* _output, size_t _nbSample, int32_t _volumeCoef, int32_t _volumeDecalage, float _volumeAppli) {
int16_t* in = static_cast<int16_t*>(_input);
float* out = static_cast<float*>(_output);
for (size_t iii=0; iii<_nbSample; ++iii) {
out[iii] = double((int32_t(in[iii]) * int32_t(_volumeCoef)) >> _volumeDecalage) * 0.00003051757;
}
}
static void convert__int16__to__int32(void* _input, void* _output, size_t _nbSample, int32_t _volumeCoef, int32_t _volumeDecalage, float _volumeAppli) {
int16_t* in = static_cast<int16_t*>(_input);
int32_t* out = static_cast<int32_t*>(_output);
for (size_t iii=0; iii<_nbSample; ++iii) {
out[iii] = (int32_t(in[iii]) * int32_t(_volumeCoef)) >> _volumeDecalage;
}
//DRAIN_INFO("plop " << in[0] << " >> " << out[0]);
}
static void convert__int32__to__int16(void* _input, void* _output, size_t _nbSample, int32_t _volumeCoef, int32_t _volumeDecalage, float _volumeAppli) {
int32_t* in = static_cast<int32_t*>(_input);
int16_t* out = static_cast<int16_t*>(_output);
for (size_t iii=0; iii<_nbSample; ++iii) {
int32_t value = in[iii] >> 16;
out[iii] = int16_t((int64_t(in[iii]) * int64_t(_volumeCoef)) >> _volumeDecalage);
}
}
static void convert__int32__to__int32(void* _input, void* _output, size_t _nbSample, int32_t _volumeCoef, int32_t _volumeDecalage, float _volumeAppli) {
int32_t* in = static_cast<int32_t*>(_input);
int32_t* out = static_cast<int32_t*>(_output);
for (size_t iii=0; iii<_nbSample; ++iii) {
out[iii] = int32_t((int64_t(in[iii]) * int64_t(_volumeCoef)) >> _volumeDecalage);
}
//DRAIN_INFO("plop " << in[0] << " >> " << out[0]);
}
static void convert__float__to__float(void* _input, void* _output, size_t _nbSample, int32_t _volumeCoef, int32_t _volumeDecalage, float _volumeAppli) {
float* in = static_cast<float*>(_input);
float* out = static_cast<float*>(_output);
for (size_t iii=0; iii<_nbSample; ++iii) {
out[iii] = in[iii] * _volumeAppli;
}
}
void audio::drain::Volume::configurationChange() {
audio::drain::Algo::configurationChange();
switch (m_input.getFormat()) {
default:
case audio::format_int16:
switch (m_output.getFormat()) {
default:
case audio::format_int16:
m_functionConvert = &convert__int16__to__int16;
DRAIN_DEBUG("Use converter : 'convert__int16__to__int16' for " << m_input.getFormat() << " to " << m_output.getFormat());
break;
case audio::format_int16_on_int32:
case audio::format_int32:
m_functionConvert = &convert__int16__to__int32;
DRAIN_DEBUG("Use converter : 'convert__int16__to__int32' for " << m_input.getFormat() << " to " << m_output.getFormat());
break;
case audio::format_float:
m_functionConvert = &convert__int16__to__float;
break;
}
break;
case audio::format_int16_on_int32:
case audio::format_int32:
switch (m_output.getFormat()) {
default:
case audio::format_int16:
m_functionConvert = &convert__int32__to__int16;
DRAIN_DEBUG("Use converter : 'convert__int32__to__int16' for " << m_input.getFormat() << " to " << m_output.getFormat());
break;
case audio::format_int16_on_int32:
case audio::format_int32:
m_functionConvert = &convert__int32__to__int32;
DRAIN_DEBUG("Use converter : 'convert__int32__to__int32' for " << m_input.getFormat() << " to " << m_output.getFormat());
break;
case audio::format_float:
DRAIN_ERROR("Impossible case 2");
break;
}
break;
case audio::format_float:
switch (m_output.getFormat()) {
default:
case audio::format_int16:
case audio::format_int16_on_int32:
case audio::format_int32:
DRAIN_ERROR("Impossible case 4");
break;
case audio::format_float:
m_functionConvert = &convert__float__to__float;
DRAIN_DEBUG("Use converter : 'convert__float__to__float' for " << m_input.getFormat() << " to " << m_output.getFormat());
break;
}
break;
}
if (m_input.getMap() != m_output.getMap()) {
DRAIN_ERROR("Volume map change is not supported");
}
if (m_input.getFrequency() != m_output.getFrequency()) {
DRAIN_ERROR("Volume frequency change is not supported");
}
// nee to process all time (the format not change (just a simple filter))
m_needProcess = true;
volumeChange();
}
void audio::drain::Volume::volumeChange() {
//m_volumeAppli = 20 * log(m_volumedB);
float volumedB = 0.0f;
bool mute = false;
for (size_t iii=0; iii<m_volumeList.size(); ++iii) {
if (m_volumeList[iii] == null) {
continue;
}
if (m_volumeList[iii]->getMute() == true) {
mute = true;
}
volumedB += m_volumeList[iii]->getVolume();
DRAIN_VERBOSE("append volume : '" << m_volumeList[iii]->getName() << " vol=" << m_volumeList[iii]->getVolume() << "dB");
}
DRAIN_DEBUG(" Total volume : " << volumedB << "dB nbVolume=" << m_volumeList.size());
if (mute == true) {
m_volumeAppli = 0.0f;
m_volumeCoef = 0;
m_volumeDecalage = 0;
return;
}
#if (defined(__STDCPP_LLVM__) || __cplusplus < 201103L)
m_volumeAppli = pow(10.0f, volumedB/20.0f);
#else
m_volumeAppli = etk::pow(10.0f, volumedB/20.0f);
#endif
switch (m_input.getFormat()) {
default:
case audio::format_int16:
switch (m_output.getFormat()) {
default:
case audio::format_int16:
if (m_volumeAppli <= 1.0f) {
m_volumeCoef = m_volumeAppli*float(1<<16);
m_volumeDecalage = 16;
} else {
int32_t neareast = neareastsss(m_volumeAppli);
m_volumeCoef = m_volumeAppli*float(1<<(16-neareast));
m_volumeDecalage = 16-neareast;
}
break;
case audio::format_int16_on_int32:
if (m_volumeAppli <= 1.0f) {
m_volumeCoef = m_volumeAppli*float(1<<16);
m_volumeDecalage = 16;
} else {
int32_t neareast = neareastsss(m_volumeAppli);
m_volumeCoef = m_volumeAppli*float(1<<(16-neareast));
m_volumeDecalage = 16-neareast;
}
break;
case audio::format_int32:
m_volumeCoef = m_volumeAppli*float(1<<16);
m_volumeDecalage = 0;
break;
case audio::format_float:
if (m_volumeAppli <= 1.0f) {
m_volumeCoef = m_volumeAppli*float(1<<16);
m_volumeDecalage = 16;
} else {
int32_t neareast = neareastsss(m_volumeAppli);
m_volumeCoef = m_volumeAppli*float(1<<(16-neareast));
m_volumeDecalage = 16-neareast;
}
break;
}
break;
case audio::format_int16_on_int32:
switch (m_output.getFormat()) {
default:
case audio::format_int16:
if (m_volumeAppli <= 1.0f) {
m_volumeCoef = m_volumeAppli*float(1<<16);
m_volumeDecalage = 16;
} else {
int32_t neareast = neareastsss(m_volumeAppli);
m_volumeCoef = m_volumeAppli*float(1<<(16-neareast));
m_volumeDecalage = 16-neareast;
}
break;
case audio::format_int16_on_int32:
if (m_volumeAppli <= 1.0f) {
m_volumeCoef = m_volumeAppli*float(1<<16);
m_volumeDecalage = 16;
} else {
int32_t neareast = neareastsss(m_volumeAppli);
m_volumeCoef = m_volumeAppli*float(1<<(16-neareast));
m_volumeDecalage = 16-neareast;
}
break;
case audio::format_int32:
m_volumeCoef = m_volumeAppli*float(1<<16);
m_volumeDecalage = 0;
break;
case audio::format_float:
DRAIN_ERROR("Impossible case 2");
break;
}
break;
case audio::format_int32:
switch (m_output.getFormat()) {
default:
case audio::format_int16:
if (m_volumeAppli <= 1.0f) {
m_volumeCoef = m_volumeAppli*float(1<<16);
m_volumeDecalage = 32;
} else {
int32_t neareast = neareastsss(m_volumeAppli);
m_volumeCoef = m_volumeAppli*float(1<<(16-neareast));
m_volumeDecalage = 32-neareast;
}
break;
case audio::format_int16_on_int32:
if (m_volumeAppli <= 1.0f) {
m_volumeCoef = m_volumeAppli*float(1<<16);
m_volumeDecalage = 32;
} else {
int32_t neareast = neareastsss(m_volumeAppli);
m_volumeCoef = m_volumeAppli*float(1<<(16-neareast));
m_volumeDecalage = 32-neareast;
}
break;
case audio::format_int32:
m_volumeCoef = m_volumeAppli*float(1<<16);
m_volumeDecalage = 16;
break;
case audio::format_float:
DRAIN_ERROR("Impossible case 3");
break;
}
break;
case audio::format_float:
// nothing to do (use m_volumeAppli)
break;
}
}
etk::Vector<audio::format> audio::drain::Volume::getFormatSupportedInput() {
etk::Vector<audio::format> tmp;
if (m_output.getFormat() == audio::format_float) {
tmp.pushBack(audio::format_float);
}
if ( m_output.getFormat() == audio::format_int16
|| m_output.getFormat() == audio::format_int16_on_int32
|| m_output.getFormat() == audio::format_int32) {
tmp.pushBack(audio::format_int16);
tmp.pushBack(audio::format_int16_on_int32);
tmp.pushBack(audio::format_int32);
}
return tmp;
};
etk::Vector<audio::format> audio::drain::Volume::getFormatSupportedOutput() {
etk::Vector<audio::format> tmp;
if (m_input.getFormat() == audio::format_float) {
tmp.pushBack(audio::format_float);
}
if ( m_input.getFormat() == audio::format_int16
|| m_input.getFormat() == audio::format_int16_on_int32
|| m_input.getFormat() == audio::format_int32) {
tmp.pushBack(audio::format_int16);
tmp.pushBack(audio::format_int16_on_int32);
tmp.pushBack(audio::format_int32);
}
return tmp;
};
bool audio::drain::Volume::process(audio::Time& _time,
void* _input,
size_t _inputNbChunk,
void*& _output,
size_t& _outputNbChunk) {
audio::drain::AutoLogInOut tmpLog("Volume");
// chack if we need to process:
if (m_needProcess == false) {
_output = _input;
_outputNbChunk = _inputNbChunk;
return true;
}
if (_input == null) {
_output = &(m_outputData[0]);
_outputNbChunk = 0;
DRAIN_ERROR("null pointer input ... ");
return false;
}
_outputNbChunk = _inputNbChunk;
m_outputData.resize(_outputNbChunk*m_input.getMap().size()*m_formatSize);
_output = &(m_outputData[0]);
if (m_functionConvert == null) {
DRAIN_ERROR("null function ptr");
return false;
}
//DRAIN_WARNING("Apply volume : " << m_volumedB << "dB " << m_volumeAppli << " ==> x*" << m_volumeCoef << ">>" << m_volumeDecalage << " ex:50*C>>D=" << (50*m_volumeCoef>>m_volumeDecalage) );
m_functionConvert(_input, _output, _outputNbChunk*m_input.getMap().size(), m_volumeCoef, m_volumeDecalage, m_volumeAppli);
return true;
}
void audio::drain::Volume::addVolumeStage(const ememory::SharedPtr<audio::drain::VolumeElement>& _volume) {
if (_volume == null) {
return;
}
for (size_t iii=0; iii<m_volumeList.size(); ++iii) {
if (m_volumeList[iii] == null) {
continue;
}
if (m_volumeList[iii] == _volume) {
// already done ...
return;
}
if (m_volumeList[iii]->getName() == _volume->getName()) {
return;
}
}
m_volumeList.pushBack(_volume);
volumeChange();
}
bool audio::drain::Volume::setParameter(const etk::String& _parameter, const etk::String& _value) {
if (_parameter == "FLOW") {
// set Volume ...
for (auto &it : m_volumeList) {
if (it == null) {
continue;
}
if (it->getName() == "FLOW") {
float value = 0;
if (sscanf(_value.c_str(), "%fdB", &value) != 1) {
return false;
}
if ( value < -300
|| value > 300) {
DRAIN_ERROR("Can not set volume ... : '" << _parameter << "' out of range : [-300..300]");
return false;
}
it->setVolume(value);
DRAIN_DEBUG("Set volume : FLOW = " << value << " dB (from:" << _value << ")");
volumeChange();
return true;
}
}
}
DRAIN_ERROR("unknow set Parameter : '" << _parameter << "' with Value: '" << _value << "'");
return false;
}
etk::String audio::drain::Volume::getParameter(const etk::String& _parameter) const {
if (_parameter == "FLOW") {
// set Volume ...
for (auto &it : m_volumeList) {
if (it == null) {
continue;
}
if (it->getName() == "FLOW") {
return etk::toString(it->getVolume()) + "dB";
}
}
}
DRAIN_ERROR("unknow get Parameter : '" << _parameter << "'");
return "[ERROR]";
}
etk::String audio::drain::Volume::getParameterProperty(const etk::String& _parameter) const {
if (_parameter == "FLOW") {
// set Volume ...
for (auto &it : m_volumeList) {
if (it == null) {
continue;
}
if (it->getName() == "FLOW") {
return "[-300..300]dB";
}
}
}
DRAIN_ERROR("unknow Parameter property for: '" << _parameter << "'");
return "[ERROR]";
}
etk::String audio::drain::Volume::getDotDesc() {
etk::String out = audio::drain::Algo::getDotDesc();
for (auto &it : m_volumeList) {
if (it == null) {
continue;
}
out += "\\n" + it->getName() + "=" + etk::toString(it->getVolume()) + "dB";
if (it->getMute() == true) {
out += " MUTE";
}
}
return out;
}

View File

@ -1,100 +0,0 @@
/** @file
* @author Edouard DUPIN
* @copyright 2011, Edouard DUPIN, all right reserved
* @license MPL v2.0 (see license file)
*/
#pragma once
#include <audio/drain/Algo.hpp>
#ifdef HAVE_SPEEX_DSP_RESAMPLE
#include <speex/speex_resampler.h>
#endif
#include <ememory/memory.hpp>
namespace audio {
namespace drain {
// data structure.
class VolumeElement {
public:
VolumeElement(const etk::String& _name="ERROR-VOLUME-NAME", float _volumedB=0.0f) :
m_name(_name),
m_volumedB(_volumedB),
m_mute(false) {
}
private:
etk::String m_name;
public:
etk::String getName() const {
return m_name;
}
private:
float m_volumedB;
public:
float getVolume() const {
return m_volumedB;
}
void setVolume(float _volumedB) {
m_volumedB = _volumedB;
}
private:
bool m_mute;
public:
bool getMute() const {
return m_mute;
}
void setMute(bool _mute) {
m_mute = _mute;
}
};
// TODO: Optimisation
// TODO: Zero crossing
// TODO: Continuous update volume
// TODO: Manage multiple volume
// TODO: Manage set volume
class Volume : public audio::drain::Algo {
private:
etk::Vector<ememory::SharedPtr<drain::VolumeElement> > m_volumeList;
// for float input :
float m_volumeAppli;
// for integer input :
int32_t m_volumeDecalage; // Volume to apply is simple as : X * m_coef >> m_coef
int32_t m_volumeCoef;
// convertion function:
void (*m_functionConvert)(void* _input, void* _output, size_t _nbSample, int32_t _volumeCoef, int32_t _volumeDecalage, float _volumeAppli);
protected:
/**
* @brief Constructor
*/
Volume();
void init();
public:
static ememory::SharedPtr<Volume> create();
/**
* @brief Destructor
*/
virtual ~Volume();
protected:
virtual void configurationChange();
public:
virtual bool process(audio::Time& _time,
void* _input,
size_t _inputNbChunk,
void*& _output,
size_t& _outputNbChunk);
public:
virtual etk::Vector<audio::format> getFormatSupportedInput();
virtual etk::Vector<audio::format> getFormatSupportedOutput();
public:
virtual void addVolumeStage(const ememory::SharedPtr<drain::VolumeElement>& _volume);
virtual bool setParameter(const etk::String& _parameter, const etk::String& _value);
virtual etk::String getParameter(const etk::String& _parameter) const;
virtual etk::String getParameterProperty(const etk::String& _parameter) const;
public:
void volumeChange();
public:
virtual etk::String getDotDesc();
};
}
}

View File

@ -1,9 +0,0 @@
/** @file
* @author Edouard DUPIN
* @copyright 2011, Edouard DUPIN, all right reserved
* @license MPL v2.0 (see license file)
*/
#include "debug.hpp"

View File

@ -1,42 +0,0 @@
/** @file
* @author Edouard DUPIN
* @copyright 2011, Edouard DUPIN, all right reserved
* @license MPL v2.0 (see license file)
*/
#pragma once
#include <etk/String.hpp>
#include <audio/format.hpp>
#include <audio/drain/channel.hpp>
#include <echrono/Steady.hpp>
namespace audio {
namespace drain {
/**
* @brief Init the instance af algorithm (add all internal factory)
*/
void init();
/**
* @brief Uninit the instance af algorithm (rm all internal factory)
*/
void init();
/**
* @brief Create a process Algo with his name.
* @param[in] _name Name of the Algorithm.
* @return Instanciate algorithm
*/
drain::Algo* createAlgo(const etk::String& _name);
/**
* @brief Add a Factory Algorithm in the internal List (static for all instance)
* @param[in] _name Name of the Algorithm.
* @param[in] _functor Function of the factory
*/
void addAlgoFactory(const etk::String& _name, etk::Function<drain::Algo*(void)> _functor);
/**
* @brief Remove a Factory Algorithm in the internal List (static for all instance)
* @param[in] _name Name of the Algorithm.
*/
void RmAlgoFactory(const etk::String& _name);
}
}

View File

@ -1,13 +0,0 @@
/** @file
* @author Edouard DUPIN
* @copyright 2011, Edouard DUPIN, all right reserved
* @license MPL v2.0 (see license file)
*/
#include <audio/drain/debug.hpp>
int32_t audio::drain::getLogId() {
static int32_t g_val = elog::registerInstance("audio-drain");
return g_val;
}

View File

@ -1,43 +0,0 @@
/** @file
* @author Edouard DUPIN
* @copyright 2011, Edouard DUPIN, all right reserved
* @license MPL v2.0 (see license file)
*/
#ifndef __AUDIO_DRAIN_DEBUG_H__
#define __AUDIO_DRAIN_DEBUG_H__
#include <elog/log.hpp>
namespace audio {
namespace drain {
int32_t getLogId();
}
}
#define DRAIN_BASE(info,data) ELOG_BASE(audio::drain::getLogId(),info,data)
#define DRAIN_CRITICAL(data) DRAIN_BASE(1, data)
#define DRAIN_ERROR(data) DRAIN_BASE(2, data)
#define DRAIN_WARNING(data) DRAIN_BASE(3, data)
#ifdef DEBUG
#define DRAIN_INFO(data) DRAIN_BASE(4, data)
#define DRAIN_DEBUG(data) DRAIN_BASE(5, data)
#define DRAIN_VERBOSE(data) DRAIN_BASE(6, data)
#define DRAIN_TODO(data) DRAIN_BASE(4, "TODO : " << data)
#else
#define DRAIN_INFO(data) do { } while(false)
#define DRAIN_DEBUG(data) do { } while(false)
#define DRAIN_VERBOSE(data) do { } while(false)
#define DRAIN_TODO(data) do { } while(false)
#endif
#define DRAIN_ASSERT(cond,data) \
do { \
if (!(cond)) { \
DRAIN_CRITICAL(data); \
assert(!#cond); \
} \
} while (0)
#endif

View File

@ -1,20 +0,0 @@
/** @file
* @author Edouard DUPIN
* @copyright 2011, Edouard DUPIN, all right reserved
* @license MPL v2.0 (see license file)
*/
#ifdef __AUDIO_DRAIN_DEBUG_H__
#undef __AUDIO_DRAIN_DEBUG_H__
#undef DRAIN_BASE
#undef DRAIN_CRITICAL
#undef DRAIN_ERROR
#undef DRAIN_WARNING
#undef DRAIN_INFO
#undef DRAIN_DEBUG
#undef DRAIN_VERBOSE
#undef DRAIN_TODO
#undef DRAIN_ASSERT
#endif

183
audio_algo_build.html Normal file
View File

@ -0,0 +1,183 @@
<!-- HTML header for doxygen 1.8.8-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<!-- For Mobile Devices -->
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.8.12"/>
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
<title>Basic audio algo interface single pipe to process data: Build lib &amp; build sample</title>
<!--<link href="tabs.css" rel="stylesheet" type="text/css"/>-->
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="customdoxygen.css" rel="stylesheet" type="text/css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script>
<script type="text/javascript" src="doxy-boot.js"></script>
</head>
<body>
<nav class="navbar navbar-default navbar-fixed-top" role="navigation">
<div class="container">
<div class="navbar-header">
<a class="navbar-brand">Basic audio algo interface single pipe to process data 0.3.0</a>
</div>
<div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li><a href="index.html">Main&nbsp;Page</a></li>
<li><a href="pages.html">Related&nbsp;Pages</a></li>
<li><a href="namespaces.html">Namespaces</a></li>
<li><a href="annotated.html">Classes</a></li>
<li><a href="files.html">Files</a></li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
Link-libs<span class="caret"></span>
</a>
<ul class="dropdown-menu">
<li><a href="http://HeeroYui.github.io/lutin">lutin</a></li>
<li><a href="http://atria-soft.github.io/ewol">ewol</a></li>
<li><a href="http://atria-soft.github.io/echrono">echrono</a></li>
<li><a href="http://atria-soft.github.io/etk">etk</a></li>
<li><a href="http://atria-soft.github.io/ejson">ejson</a></li>
<li><a href="http://atria-soft.github.io/exml">exml</a></li>
<li><a href="http://atria-soft.github.io/esvg">esvg</a></li>
<li><a href="http://atria-soft.github.io/egami">egami</a></li>
<li><a href="http://atria-soft.github.io/gale">gale</a></li>
<li><a href="http://atria-soft.github.io/ege">ege</a></li>
<li><a href="http://atria-soft.github.io/elog">elog</a></li>
<li><a href="http://atria-soft.github.io/ememory">ememory</a></li>
<li><a href="http://atria-soft.github.io/enet">enet</a></li>
<li><a href="http://atria-soft.github.io/eproperty">eproperty</a></li>
<li><a href="http://atria-soft.github.io/esignal">esignal</a></li>
<li><a href="http://atria-soft.github.io/etranslate">etranslate</a></li>
<li><a href="http://atria-soft.github.io/zeus">zeus</a></li>
<li><a href="http://musicdsp.github.io/audio-ess">audio-ess</a></li>
<li><a href="http://musicdsp.github.io/audio">audio</a></li>
<li><a href="http://musicdsp.github.io/audio-drain">audio-drain</a></li>
<li><a href="http://musicdsp.github.io/audio-orchestra">audio-orchestra</a></li>
<li><a href="http://musicdsp.github.io/audio-river">audio-river</a></li>
</ul>
</li>
</ul>
<div id="search-box" class="input-group">
<div class="input-group-btn">
<button aria-expanded="false" type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
<span class="glyphicon glyphicon-search"></span>
<span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><a href="#">All</a></li>
<li><a href="#">Classes</a></li>
<li><a href="#">Namespaces</a></li>
<li><a href="#">Files</a></li>
<li><a href="#">Functions</a></li>
<li><a href="#">Variables</a></li>
<li><a href="#">Typedefs</a></li>
<li><a href="#">Enumerations</a></li>
<li><a href="#">Enumerator</a></li>
<li><a href="#">Friends</a></li>
<li><a href="#">Macros</a></li>
<li><a href="#">Pages</a></li>
</ul>
</div>
<button id="search-close" type="button" class="close" aria-label="Close">
<span aria-hidden="true"></span>
</button>
<input id="search-field" class="form-control" accesskey="S" onkeydown="searchBox.OnSearchFieldChange(event);" placeholder="Search ..." type="text">
</div>
</div><!--/.nav-collapse -->
</div>
</nav>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div class="content" id="content">
<div class="container">
<div class="row">
<div class="col-sm-12 panel panel-default" style="padding-bottom: 15px;">
<div style="margin-bottom: 15px;margin-top: 60px;">
<!-- end header part -->
<!-- Generated by Doxygen 1.8.12 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Build lib &amp; build sample </div> </div>
</div><!--header-->
<div class="contents">
<div class="toc"><h3>Table of Contents</h3>
<ul><li class="level1"><a href="#audio_algo_build_download">Download: </a><ul><li class="level2"><a href="#audio_algo_build_download_repo">need google repo: </a></li>
<li class="level2"><a href="#audio_algo_build_download_lutin">lutin (build-system): </a></li>
<li class="level2"><a href="#audio_algo_build_download_dependency">dependency: </a></li>
<li class="level2"><a href="#audio_algo_build_download_sources">sources: </a></li>
</ul>
</li>
<li class="level1"><a href="#audio_algo_build_build">Build: </a><ul><li class="level2"><a href="#audio_algo_build_build_library">library: </a></li>
<li class="level2"><a href="#audio_algo_build_build_sample">Test sample: </a></li>
</ul>
</li>
</ul>
</div>
<div class="textblock"><h1><a class="anchor" id="audio_algo_build_download"></a>
Download: </h1>
<p>ege use some tools to manage source and build it:</p>
<h2><a class="anchor" id="audio_algo_build_download_repo"></a>
need google repo: </h2>
<p>see: <a href="http://source.android.com/source/downloading.html#installing-repo">http://source.android.com/source/downloading.html#installing-repo</a></p>
<p>On all platform: </p><div class="fragment"><div class="line">mkdir ~/.bin</div><div class="line">PATH=~/.bin:$PATH</div><div class="line">curl https://storage.googleapis.com/git-repo-downloads/repo &gt; ~/.bin/repo</div><div class="line">chmod a+x ~/.bin/repo</div></div><!-- fragment --><p>On ubuntu </p><div class="fragment"><div class="line">sudo apt-get install repo</div></div><!-- fragment --><p>On archlinux </p><div class="fragment"><div class="line">sudo pacman -S repo</div></div><!-- fragment --><h2><a class="anchor" id="audio_algo_build_download_lutin"></a>
lutin (build-system): </h2>
<div class="fragment"><div class="line">pip install lutin --user</div><div class="line"># optionnal dependency of lutin (manage image changing size for application release)</div><div class="line">pip install pillow --user</div></div><!-- fragment --><h2><a class="anchor" id="audio_algo_build_download_dependency"></a>
dependency: </h2>
<div class="fragment"><div class="line">mkdir -p WORKING_DIRECTORY/framework</div><div class="line">cd WORKING_DIRECTORY/framework</div><div class="line">repo init -u git://github.com/atria-soft/manifest.git</div><div class="line">repo sync -j8</div><div class="line">cd ../..</div></div><!-- fragment --><h2><a class="anchor" id="audio_algo_build_download_sources"></a>
sources: </h2>
<p>They are already download in the repo manifest in:</p>
<div class="fragment"><div class="line">cd WORKING_DIRECTORY/framework/musicdsp/audio-drain</div></div><!-- fragment --><h1><a class="anchor" id="audio_algo_build_build"></a>
Build: </h1>
<p>you must stay in your working directory... </p><div class="fragment"><div class="line">cd WORKING_DIRECTORY</div></div><!-- fragment --><h2><a class="anchor" id="audio_algo_build_build_library"></a>
library: </h2>
<div class="fragment"><div class="line">lutin -mdebug audio-drain</div></div><!-- fragment --><h2><a class="anchor" id="audio_algo_build_build_sample"></a>
Test sample: </h2>
<div class="fragment"><div class="line">lutin -mdebug audio-drain-test?build?run</div></div><!-- fragment --> </div></div><!-- contents -->
<!-- HTML footer for doxygen 1.8.8-->
<!-- start footer part -->
</div>
</div>
</div>
</div>
</div>
<hr class="footer"/><address class="footer"><small>
Generated on Mon Oct 24 2016 15:35:48 for Basic audio algo interface single pipe to process data by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.12
</small></address>
</body>
</html>

View File

@ -1 +0,0 @@
MR Edouard DUPIN <yui.heero@gmail.com>

BIN
bc_s.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 676 B

BIN
bdwn.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 B

BIN
closed.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 B

377
customdoxygen.css Normal file
View File

@ -0,0 +1,377 @@
#navrow1, #navrow2, #navrow3, #navrow4, #navrow5{
border-bottom: 1px solid #EEEEEE;
}
.adjust-right {
margin-left: 30px !important;
font-size: 1.15em !important;
}
.navbar{
border: 0px solid #222 !important;
}
/* Sticky footer styles
-------------------------------------------------- */
html,
body {
counter-reset: h1counter;
height: 100%;
/* The html and body elements cannot have any padding or margin. */
}
h1, .h1, h2, .h2, h3, .h3{
font-weight: bold !important;
}
h1:before {
content: counter(h1counter) ".\0000a0\0000a0";
counter-increment: h1counter;
counter-reset: h2counter;
}
h2:before {
content: counter(h1counter) "." counter(h2counter) ".\0000a0\0000a0";
counter-increment: h2counter;
counter-reset: h3counter;
}
h3:before {
content: counter(h1counter) "." counter(h2counter) "." counter(h3counter) ".\0000a0\0000a0";
counter-increment: h3counter;
}
/* Wrapper for page content to push down footer */
#wrap {
min-height: 100%;
height: auto;
/* Negative indent footer by its height */
margin: 0 auto -60px;
/* Pad bottom by footer height */
padding: 0 0 60px;
}
/* Set the fixed height of the footer here */
#footer {
font-size: 0.9em;
padding: 8px 0px;
background-color: #f5f5f5;
}
.footer-row {
line-height: 44px;
}
#footer > .container {
padding-left: 15px;
padding-right: 15px;
}
.footer-follow-icon {
margin-left: 3px;
text-decoration: none !important;
}
.footer-follow-icon img {
width: 20px;
}
.footer-link {
padding-top: 5px;
display: inline-block;
color: #999999;
text-decoration: none;
}
.footer-copyright {
text-align: center;
}
@media (min-width: 992px) {
.footer-row {
text-align: left;
}
.footer-icons {
text-align: right;
}
}
@media (max-width: 991px) {
.footer-row {
text-align: center;
}
.footer-icons {
text-align: center;
}
}
/* DOXYGEN Code Styles
----------------------------------- */
a.qindex {
font-weight: bold;
}
a.qindexHL {
font-weight: bold;
background-color: #9CAFD4;
color: #ffffff;
border: 1px double #869DCA;
}
.contents a.qindexHL:visited {
color: #ffffff;
}
a.code, a.code:visited, a.line, a.line:visited {
color: #4665A2;
}
a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited {
color: #4665A2;
}
/* @end */
dl.el {
margin-left: -1cm;
}
pre.fragment {
border: 1px solid #C4CFE5;
background-color: #FBFCFD;
padding: 4px 6px;
margin: 4px 8px 4px 2px;
overflow: auto;
word-wrap: break-word;
font-size: 9pt;
line-height: 125%;
font-family: monospace, fixed;
font-size: 105%;
}
div.fragment {
padding: 4px 6px;
margin: 4px 8px 4px 2px;
border: 1px solid #C4CFE5;
}
div.line {
font-family: monospace, fixed;
font-size: 13px;
min-height: 13px;
line-height: 1.0;
text-wrap: unrestricted;
white-space: -moz-pre-wrap; /* Moz */
white-space: -pre-wrap; /* Opera 4-6 */
white-space: -o-pre-wrap; /* Opera 7 */
white-space: pre-wrap; /* CSS3 */
word-wrap: break-word; /* IE 5.5+ */
text-indent: -53px;
padding-left: 53px;
padding-bottom: 0px;
margin: 0px;
-webkit-transition-property: background-color, box-shadow;
-webkit-transition-duration: 0.5s;
-moz-transition-property: background-color, box-shadow;
-moz-transition-duration: 0.5s;
-ms-transition-property: background-color, box-shadow;
-ms-transition-duration: 0.5s;
-o-transition-property: background-color, box-shadow;
-o-transition-duration: 0.5s;
transition-property: background-color, box-shadow;
transition-duration: 0.5s;
}
div.line.glow {
background-color: cyan;
box-shadow: 0 0 10px cyan;
}
span.lineno {
padding-right: 4px;
text-align: right;
border-right: 2px solid #0F0;
background-color: #E8E8E8;
white-space: pre;
}
span.lineno a {
background-color: #D8D8D8;
}
span.lineno a:hover {
background-color: #C8C8C8;
}
div.groupHeader {
margin-left: 16px;
margin-top: 12px;
font-weight: bold;
}
div.groupText {
margin-left: 16px;
font-style: italic;
}
/* @group Code Colorization */
span.keyword {
color: #008000
}
span.keywordtype {
color: #604020
}
span.keywordflow {
color: #e08000
}
span.comment {
color: #800000
}
span.preprocessor {
color: #806020
}
span.stringliteral {
color: #002080
}
span.charliteral {
color: #008080
}
span.vhdldigit {
color: #ff00ff
}
span.vhdlchar {
color: #000000
}
span.vhdlkeyword {
color: #700070
}
span.vhdllogic {
color: #ff0000
}
blockquote {
background-color: #F7F8FB;
border-left: 2px solid #9CAFD4;
margin: 0 24px 0 4px;
padding: 0 12px 0 16px;
}
/*---------------- Search Box */
#search-box {
margin: 10px 0px;
}
#search-box .close {
display: none;
position: absolute;
right: 0px;
padding: 6px 12px;
z-index: 5;
}
/*---------------- Search results window */
#search-results-window {
display: none;
}
iframe#MSearchResults {
width: 100%;
height: 15em;
}
.SRChildren {
padding-left: 3ex; padding-bottom: .5em
}
.SRPage .SRChildren {
display: none;
}
a.SRScope {
display: block;
}
a.SRSymbol:focus, a.SRSymbol:active,
a.SRScope:focus, a.SRScope:active {
text-decoration: underline;
}
span.SRScope {
padding-left: 4px;
}
.SRResult {
display: none;
}
/* class and file list */
.directory .icona,
.directory .arrow {
height: auto;
}
.directory .icona .icon {
height: 16px;
}
.directory .icondoc {
background-position: 0px 0px;
height: 20px;
}
.directory .iconfopen {
background-position: 0px 0px;
}
.directory td.entry {
padding: 7px 8px 6px 8px;
}
.table > tbody > tr > td.memSeparator {
line-height: 0;
padding: 0;
}
.memItemLeft, .memTemplItemLeft {
white-space: normal;
}
/* enumerations */
.panel-body thead > tr {
background-color: #e0e0e0;
}
/* todo lists */
.todoname,
.todoname a {
font-weight: bold;
}
/* Class title */
.summary {
margin-top: 25px;
}
.page-header {
margin: 20px 0px !important;
}
.page-header {
#display: inline-block;
}
.title {
text-align: center;
color: orange;
}
.page-header .pull-right {
margin-top: 0.3em;
margin-left: 0.5em;
}
.page-header .label {
font-size: 50%;
}
#main-nav {
display: none;
}

BIN
doc.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 746 B

View File

@ -1,85 +0,0 @@
Build lib & build sample {#audio_algo_build}
========================
@tableofcontents
Download: {#audio_algo_build_download}
=========
ege use some tools to manage source and build it:
need google repo: {#audio_algo_build_download_repo}
-----------------
see: http://source.android.com/source/downloading.html#installing-repo
On all platform:
```{.sh}
mkdir ~/.bin
PATH=~/.bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/.bin/repo
chmod a+x ~/.bin/repo
```
On ubuntu
```{.sh}
sudo apt-get install repo
```
On archlinux
```{.sh}
sudo pacman -S repo
```
lutin (build-system): {#audio_algo_build_download_lutin}
---------------------
```{.sh}
pip install lutin --user
# optionnal dependency of lutin (manage image changing size for application release)
pip install pillow --user
```
dependency: {#audio_algo_build_download_dependency}
-----------
```{.sh}
mkdir -p WORKING_DIRECTORY/framework
cd WORKING_DIRECTORY/framework
repo init -u git://github.com/atria-soft/manifest.git
repo sync -j8
cd ../..
```
sources: {#audio_algo_build_download_sources}
--------
They are already download in the repo manifest in:
```{.sh}
cd WORKING_DIRECTORY/framework/musicdsp/audio-drain
```
Build: {#audio_algo_build_build}
======
you must stay in your working directory...
```{.sh}
cd WORKING_DIRECTORY
```
library: {#audio_algo_build_build_library}
--------
```{.sh}
lutin -mdebug audio-drain
```
Test sample: {#audio_algo_build_build_sample}
------------
```{.sh}
lutin -mdebug audio-drain-test?build?run
```

View File

@ -1,56 +0,0 @@
AUDIO-ALGO library {#mainpage}
=============
@tableofcontents
What is AUDIO-ALGO: {#audio_algo_mainpage_what}
==============
AUDIO-ALGO, Is a single Pipeline processing to simply update format, framerate, channel maps ...
What it does: {#audio_algo_mainpage_what_it_does}
-------------
- Change format
- Change framerate
- change number of channel
AUDIO-ALGO is dependent of the STL (compatible with MacOs stl (CXX))
What languages are supported? {#audio_algo_mainpage_language}
=============================
AUDIO-ALGO is written in C++.
Are there any licensing restrictions? {#audio_algo_mainpage_license_restriction}
=====================================
AUDIO-ALGO is **FREE software** and _all sub-library are FREE and staticly linkable !!!_
License (MPL v2.0) {#audio_algo_mainpage_license}
==================
Copyright AUDIO-ALGO Edouard DUPIN
Licensed under the Mozilla Public 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
<https://www.mozilla.org/MPL/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.
Other pages {#audio_algo_mainpage_sub_page}
===========
- @ref audio_algo_build
- [**ewol coding style**](http://atria-soft.github.io/ewol/ewol_coding_style.html)

264
doxy-boot.js Normal file
View File

@ -0,0 +1,264 @@
$( document ).ready(function() {
$("div.headertitle").addClass("page-header");
$("div.title").addClass("h1");
$('li > a[href="index.html"] > span').before("<i class='fa fa-cog'></i> ");
$('li > a[href="modules.html"] > span').before("<i class='fa fa-square'></i> ");
$('li > a[href="namespaces.html"] > span').before("<i class='fa fa-bars'></i> ");
$('li > a[href="annotated.html"] > span').before("<i class='fa fa-list-ul'></i> ");
$('li > a[href="classes.html"] > span').before("<i class='fa fa-book'></i> ");
$('li > a[href="inherits.html"] > span').before("<i class='fa fa-sitemap'></i> ");
$('li > a[href="functions.html"] > span').before("<i class='fa fa-list'></i> ");
$('li > a[href="functions_func.html"] > span').before("<i class='fa fa-list'></i> ");
$('li > a[href="functions_vars.html"] > span').before("<i class='fa fa-list'></i> ");
$('li > a[href="functions_enum.html"] > span').before("<i class='fa fa-list'></i> ");
$('li > a[href="functions_eval.html"] > span').before("<i class='fa fa-list'></i> ");
$('img[src="ftv2ns.png"]').replaceWith('<span class="label label-danger">N</span> ');
$('img[src="ftv2cl.png"]').replaceWith('<span class="label label-danger">C</span> ');
$("ul.tablist").addClass("nav nav-pills nav-justified");
$("ul.tablist").css("margin-top", "0.5em");
$("ul.tablist").css("margin-bottom", "0.5em");
$("li.current").addClass("active");
$("iframe").attr("scrolling", "yes");
$("#nav-path > ul").addClass("breadcrumb");
$("table.params").addClass("table");
$("div.ingroups").wrapInner("<small></small>");
$("div.levels").css("margin", "0.5em");
$("div.levels > span").addClass("btn btn-default btn-xs");
$("div.levels > span").css("margin-right", "0.25em");
$("table.directory").addClass("table table-striped");
$("div.summary > a").addClass("btn btn-default btn-xs");
$("table.fieldtable").addClass("table");
$(".fragment").addClass("well");
$(".memitem").addClass("panel panel-default");
$(".memproto").addClass("panel-heading");
$(".memdoc").addClass("panel-body");
$("span.mlabel").addClass("label label-info");
$("table.memberdecls").addClass("table");
$("[class^=memitem]").addClass("active");
$("div.ah").addClass("btn btn-default");
$("span.mlabels").addClass("pull-right");
$("table.mlabels").css("width", "100%")
$("td.mlabels-right").addClass("pull-right");
$("div.ttc").addClass("panel panel-primary");
$("div.ttname").addClass("panel-heading");
$("div.ttname a").css("color", 'white');
$("div.ttdef,div.ttdoc,div.ttdeci").addClass("panel-body");
$('div.fragment.well div.line:first').css('margin-top', '15px');
$('div.fragment.well div.line:last').css('margin-bottom', '15px');
$('table.doxtable').removeClass('doxtable').addClass('table table-striped table-bordered').each(function(){
$(this).prepend('<thead></thead>');
$(this).find('tbody > tr:first').prependTo($(this).find('thead'));
$(this).find('td > span.success').parent().addClass('success');
$(this).find('td > span.warning').parent().addClass('warning');
$(this).find('td > span.danger').parent().addClass('danger');
});
if($('div.fragment.well div.ttc').length > 0)
{
$('div.fragment.well div.line:first').parent().removeClass('fragment well');
}
//merge left ad right element in the fuction table item
/*
$('table.memberdecls').find('.memItemRight').each(function(){
$(this).contents().appendTo($(this).siblings('.memItemLeft'));
$(this).siblings('.memItemLeft').attr('align', 'left');
});
*/
function getOriginalWidthOfImg(img_element) {
var t = new Image();
t.src = (img_element.getAttribute ? img_element.getAttribute("src") : false) || img_element.src;
return t.width;
}
$('div.dyncontent').find('img').each(function(){
if(getOriginalWidthOfImg($(this)[0]) > $('#content>div.container').width())
$(this).css('width', '100%');
});
/* responsive search box */
$('#MSearchBox').parent().remove();
var nav_container = $('<div class="row"></div>');
$('#navrow1').parent().prepend(nav_container);
var left_nav = $('<div class="col-md-9"></div>');
for (i = 0; i < 6; i++) {
var navrow = $('#navrow' + i + ' > ul.tablist').detach();
left_nav.append(navrow);
$('#navrow' + i).remove();
}
var right_nav = $('<div class="col-md-3"></div>').append('\
<div id="search-box" class="input-group">\
<div class="input-group-btn">\
<button aria-expanded="false" type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">\
<span class="glyphicon glyphicon-search"></span> <span class="caret"></span>\
</button>\
<ul class="dropdown-menu">\
</ul>\
</div>\
<button id="search-close" type="button" class="close" aria-label="Close"><span aria-hidden="true">&times;</span></button>\
<input id="search-field" class="form-control" accesskey="S" onkeydown="searchBox.OnSearchFieldChange(event);" placeholder="Search ..." type="text">\
</div>');
$(nav_container).append(left_nav);
$(nav_container).append(right_nav);
$('#MSearchSelectWindow .SelectionMark').remove();
var search_selectors = $('#MSearchSelectWindow .SelectItem');
for (var i = 0; i < search_selectors.length; i += 1) {
var element_a = $('<a href="#"></a>').text($(search_selectors[i]).text());
element_a.click(function(){
$('#search-box .dropdown-menu li').removeClass('active');
$(this).parent().addClass('active');
searchBox.OnSelectItem($('#search-box li a').index(this));
searchBox.Search();
return false;
});
var element = $('<li></li>').append(element_a);
$('#search-box .dropdown-menu').append(element);
}
$('#MSearchSelectWindow').remove();
$('#search-box .close').click(function (){
searchBox.CloseResultsWindow();
});
$('body').append('<div id="MSearchClose"></div>');
$('body').append('<div id="MSearchBox"></div>');
$('body').append('<div id="MSearchSelectWindow"></div>');
searchBox.searchLabel = '';
searchBox.DOMSearchField = function() {
return document.getElementById("search-field");
}
searchBox.DOMSearchClose = function(){
return document.getElementById("search-close");
}
/* search results */
var results_iframe = $('#MSearchResults').detach();
$('#MSearchResultsWindow')
.attr('id', 'search-results-window')
.addClass('panel panel-default')
.append(
'<div class="panel-heading">\
<h3 class="panel-title">Search Results</h3>\
</div>\
<div class="panel-body"></div>'
);
$('#search-results-window .panel-body').append(results_iframe);
searchBox.DOMPopupSearchResultsWindow = function() {
return document.getElementById("search-results-window");
}
function update_search_results_window() {
$('#search-results-window').removeClass('panel-default panel-success panel-warning panel-danger')
var status = $('#MSearchResults').contents().find('.SRStatus:visible');
if (status.length > 0) {
switch(status.attr('id')) {
case 'Loading':
case 'Searching':
$('#search-results-window').addClass('panel-warning');
break;
case 'NoMatches':
$('#search-results-window').addClass('panel-danger');
break;
default:
$('#search-results-window').addClass('panel-default');
}
} else {
$('#search-results-window').addClass('panel-success');
}
}
$('#MSearchResults').load(function() {
$('#MSearchResults').contents().find('link[href="search.css"]').attr('href','../doxygen.css');
$('#MSearchResults').contents().find('head').append(
'<link href="../customdoxygen.css" rel="stylesheet" type="text/css">');
update_search_results_window();
// detect status changes (only for search with external search backend)
var observer = new MutationObserver(function(mutations) {
update_search_results_window();
});
var config = {
attributes: true
};
var targets = $('#MSearchResults').contents().find('.SRStatus');
for (i = 0; i < targets.length; i++) {
observer.observe(targets[i], config);
}
});
/* enumerations */
$('table.fieldtable').removeClass('fieldtable').addClass('table table-striped table-bordered').each(function(){
$(this).prepend('<thead></thead>');
$(this).find('tbody > tr:first').prependTo($(this).find('thead'));
$(this).find('td > span.success').parent().addClass('success');
$(this).find('td > span.warning').parent().addClass('warning');
$(this).find('td > span.danger').parent().addClass('danger');
});
/* todo list */
var todoelements = $('.contents > .textblock > dl.reflist > dt, .contents > .textblock > dl.reflist > dd');
for (var i = 0; i < todoelements.length; i += 2) {
$('.contents > .textblock').append(
'<div class="panel panel-default active">'
+ "<div class=\"panel-heading todoname\">" + $(todoelements[i]).html() + "</div>"
+ "<div class=\"panel-body\">" + $(todoelements[i+1]).html() + "</div>"
+ '</div>');
}
$('.contents > .textblock > dl').remove();
$(".memitem").removeClass('memitem');
$(".memproto").removeClass('memproto');
$(".memdoc").removeClass('memdoc');
$("span.mlabel").removeClass('mlabel');
$("table.memberdecls").removeClass('memberdecls');
$("[class^=memitem]").removeClass('memitem');
$("span.mlabels").removeClass('mlabels');
$("table.mlabels").removeClass('mlabels');
$("td.mlabels-right").removeClass('mlabels-right');
$(".navpath").removeClass('navpath');
$("li.navelem").removeClass('navelem');
$("a.el").removeClass('el');
$("div.ah").removeClass('ah');
$("div.header").removeClass("header");
$('.mdescLeft').each(function(){
if($(this).html()=="&nbsp;") {
$(this).siblings('.mdescRight').attr('colspan', 2);
$(this).remove();
}
});
$('td.memItemLeft').each(function(){
if($(this).siblings('.memItemRight').html()=="") {
$(this).attr('colspan', 2);
$(this).siblings('.memItemRight').remove();
}
});
});

View File

@ -1,33 +0,0 @@
#!/usr/bin/python
import os
import doxy.module as module
import doxy.debug as debug
import doxy.tools as tools
def create(target, module_name):
my_module = module.Module(__file__, module_name)
my_module.set_version("version.txt")
my_module.set_title("Basic audio algo interface single pipe to process data")
my_module.set_website("http://musicdsp.github.io/" + module_name)
my_module.set_website_sources("http://github.com/musicdsp/" + module_name)
my_module.add_path([
"audio",
"doc"
])
my_module.add_depend([
'etk',
'audio',
'ejson'
])
my_module.add_exclude_symbols([
'*operator<<*',
])
my_module.add_exclude_file([
'debug.h',
])
my_module.add_file_patterns([
'*.h',
'*.md',
])
return my_module

1508
doxygen.css Normal file

File diff suppressed because it is too large Load Diff

BIN
doxygen.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

97
dynsections.js Normal file
View File

@ -0,0 +1,97 @@
function toggleVisibility(linkObj)
{
var base = $(linkObj).attr('id');
var summary = $('#'+base+'-summary');
var content = $('#'+base+'-content');
var trigger = $('#'+base+'-trigger');
var src=$(trigger).attr('src');
if (content.is(':visible')===true) {
content.hide();
summary.show();
$(linkObj).addClass('closed').removeClass('opened');
$(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
} else {
content.show();
summary.hide();
$(linkObj).removeClass('closed').addClass('opened');
$(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
}
return false;
}
function updateStripes()
{
$('table.directory tr').
removeClass('even').filter(':visible:even').addClass('even');
}
function toggleLevel(level)
{
$('table.directory tr').each(function() {
var l = this.id.split('_').length-1;
var i = $('#img'+this.id.substring(3));
var a = $('#arr'+this.id.substring(3));
if (l<level+1) {
i.removeClass('iconfopen iconfclosed').addClass('iconfopen');
a.html('&#9660;');
$(this).show();
} else if (l==level+1) {
i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
a.html('&#9658;');
$(this).show();
} else {
$(this).hide();
}
});
updateStripes();
}
function toggleFolder(id)
{
// the clicked row
var currentRow = $('#row_'+id);
// all rows after the clicked row
var rows = currentRow.nextAll("tr");
var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
// only match elements AFTER this one (can't hide elements before)
var childRows = rows.filter(function() { return this.id.match(re); });
// first row is visible we are HIDING
if (childRows.filter(':first').is(':visible')===true) {
// replace down arrow by right arrow for current row
var currentRowSpans = currentRow.find("span");
currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
currentRowSpans.filter(".arrow").html('&#9658;');
rows.filter("[id^=row_"+id+"]").hide(); // hide all children
} else { // we are SHOWING
// replace right arrow by down arrow for current row
var currentRowSpans = currentRow.find("span");
currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen");
currentRowSpans.filter(".arrow").html('&#9660;');
// replace down arrows by right arrows for child rows
var childRowsSpans = childRows.find("span");
childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
childRowsSpans.filter(".arrow").html('&#9658;');
childRows.show(); //show all children
}
updateStripes();
}
function toggleInherit(id)
{
var rows = $('tr.inherit.'+id);
var img = $('tr.inherit_header.'+id+' img');
var src = $(img).attr('src');
if (rows.filter(':first').is(':visible')===true) {
rows.css('display','none');
$(img).attr('src',src.substring(0,src.length-8)+'closed.png');
} else {
rows.css('display','table-row'); // using show() causes jump in firefox
$(img).attr('src',src.substring(0,src.length-10)+'open.png');
}
}

BIN
folderclosed.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 616 B

BIN
folderopen.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 597 B

190
index.html Normal file
View File

@ -0,0 +1,190 @@
<!-- HTML header for doxygen 1.8.8-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<!-- For Mobile Devices -->
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.8.12"/>
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
<title>Basic audio algo interface single pipe to process data: AUDIO-ALGO library</title>
<!--<link href="tabs.css" rel="stylesheet" type="text/css"/>-->
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="customdoxygen.css" rel="stylesheet" type="text/css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script>
<script type="text/javascript" src="doxy-boot.js"></script>
</head>
<body>
<nav class="navbar navbar-default navbar-fixed-top" role="navigation">
<div class="container">
<div class="navbar-header">
<a class="navbar-brand">Basic audio algo interface single pipe to process data 0.3.0</a>
</div>
<div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li><a href="index.html">Main&nbsp;Page</a></li>
<li><a href="pages.html">Related&nbsp;Pages</a></li>
<li><a href="namespaces.html">Namespaces</a></li>
<li><a href="annotated.html">Classes</a></li>
<li><a href="files.html">Files</a></li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
Link-libs<span class="caret"></span>
</a>
<ul class="dropdown-menu">
<li><a href="http://HeeroYui.github.io/lutin">lutin</a></li>
<li><a href="http://atria-soft.github.io/ewol">ewol</a></li>
<li><a href="http://atria-soft.github.io/echrono">echrono</a></li>
<li><a href="http://atria-soft.github.io/etk">etk</a></li>
<li><a href="http://atria-soft.github.io/ejson">ejson</a></li>
<li><a href="http://atria-soft.github.io/exml">exml</a></li>
<li><a href="http://atria-soft.github.io/esvg">esvg</a></li>
<li><a href="http://atria-soft.github.io/egami">egami</a></li>
<li><a href="http://atria-soft.github.io/gale">gale</a></li>
<li><a href="http://atria-soft.github.io/ege">ege</a></li>
<li><a href="http://atria-soft.github.io/elog">elog</a></li>
<li><a href="http://atria-soft.github.io/ememory">ememory</a></li>
<li><a href="http://atria-soft.github.io/enet">enet</a></li>
<li><a href="http://atria-soft.github.io/eproperty">eproperty</a></li>
<li><a href="http://atria-soft.github.io/esignal">esignal</a></li>
<li><a href="http://atria-soft.github.io/etranslate">etranslate</a></li>
<li><a href="http://atria-soft.github.io/zeus">zeus</a></li>
<li><a href="http://musicdsp.github.io/audio-ess">audio-ess</a></li>
<li><a href="http://musicdsp.github.io/audio">audio</a></li>
<li><a href="http://musicdsp.github.io/audio-drain">audio-drain</a></li>
<li><a href="http://musicdsp.github.io/audio-orchestra">audio-orchestra</a></li>
<li><a href="http://musicdsp.github.io/audio-river">audio-river</a></li>
</ul>
</li>
</ul>
<div id="search-box" class="input-group">
<div class="input-group-btn">
<button aria-expanded="false" type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
<span class="glyphicon glyphicon-search"></span>
<span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><a href="#">All</a></li>
<li><a href="#">Classes</a></li>
<li><a href="#">Namespaces</a></li>
<li><a href="#">Files</a></li>
<li><a href="#">Functions</a></li>
<li><a href="#">Variables</a></li>
<li><a href="#">Typedefs</a></li>
<li><a href="#">Enumerations</a></li>
<li><a href="#">Enumerator</a></li>
<li><a href="#">Friends</a></li>
<li><a href="#">Macros</a></li>
<li><a href="#">Pages</a></li>
</ul>
</div>
<button id="search-close" type="button" class="close" aria-label="Close">
<span aria-hidden="true"></span>
</button>
<input id="search-field" class="form-control" accesskey="S" onkeydown="searchBox.OnSearchFieldChange(event);" placeholder="Search ..." type="text">
</div>
</div><!--/.nav-collapse -->
</div>
</nav>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div class="content" id="content">
<div class="container">
<div class="row">
<div class="col-sm-12 panel panel-default" style="padding-bottom: 15px;">
<div style="margin-bottom: 15px;margin-top: 60px;">
<!-- end header part -->
<!-- Generated by Doxygen 1.8.12 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">AUDIO-ALGO library </div> </div>
</div><!--header-->
<div class="contents">
<div class="toc"><h3>Table of Contents</h3>
<ul><li class="level1"><a href="#audio_algo_mainpage_what">What is AUDIO-ALGO: </a><ul><li class="level2"><a href="#audio_algo_mainpage_what_it_does">What it does: </a></li>
</ul>
</li>
<li class="level1"><a href="#audio_algo_mainpage_language">What languages are supported? </a></li>
<li class="level1"><a href="#audio_algo_mainpage_license_restriction">Are there any licensing restrictions? </a></li>
<li class="level1"><a href="#audio_algo_mainpage_license">License (APACHE-2.0) </a></li>
<li class="level1"><a href="#audio_algo_mainpage_sub_page">Other pages </a></li>
</ul>
</div>
<div class="textblock"><h1><a class="anchor" id="audio_algo_mainpage_what"></a>
What is AUDIO-ALGO: </h1>
<p>AUDIO-ALGO, Is a single Pipeline processing to simply update format, framerate, channel maps ...</p>
<h2><a class="anchor" id="audio_algo_mainpage_what_it_does"></a>
What it does: </h2>
<ul>
<li>Change format</li>
<li>Change framerate</li>
<li>change number of channel</li>
</ul>
<p>AUDIO-ALGO is dependent of the STL (compatible with MacOs stl (CXX))</p>
<h1><a class="anchor" id="audio_algo_mainpage_language"></a>
What languages are supported? </h1>
<p>AUDIO-ALGO is written in C++.</p>
<h1><a class="anchor" id="audio_algo_mainpage_license_restriction"></a>
Are there any licensing restrictions? </h1>
<p>AUDIO-ALGO is <b>FREE software</b> and <em>all sub-library are FREE and staticly linkable !!!</em></p>
<h1><a class="anchor" id="audio_algo_mainpage_license"></a>
License (APACHE-2.0) </h1>
<p>Copyright AUDIO-ALGO Edouard DUPIN</p>
<p>Licensed 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</p>
<p><a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a></p>
<p>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.</p>
<h1><a class="anchor" id="audio_algo_mainpage_sub_page"></a>
Other pages </h1>
<ul>
<li><a class="el" href="audio_algo_build.html">Build lib &amp; build sample</a></li>
<li><a href="http://atria-soft.github.io/ewol/ewol_coding_style.html"><b>ewol coding style</b></a> </li>
</ul>
</div></div><!-- contents -->
<!-- HTML footer for doxygen 1.8.8-->
<!-- start footer part -->
</div>
</div>
</div>
</div>
</div>
<hr class="footer"/><address class="footer"><small>
Generated on Mon Oct 24 2016 15:35:48 for Basic audio algo interface single pipe to process data by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.12
</small></address>
</body>
</html>

87
jquery.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -1,51 +0,0 @@
#!/usr/bin/python
import realog.debug as debug
import lutin.tools as tools
def get_type():
return "BINARY"
def get_sub_type():
return "TEST"
def get_desc():
return "single audio flow test"
def get_licence():
return "MPL-2"
def get_compagny_type():
return "com"
def get_compagny_name():
return "atria-soft"
def get_maintainer():
return "authors.txt"
def configure(target, my_module):
my_module.add_src_file([
'test/main.cpp',
'test/updateFlow.cpp',
'test/resampling.cpp',
'test/format.cpp',
'test/channelOrder.cpp',
'test/equalizer.cpp'
])
my_module.add_depend([
'audio-drain',
'etest',
'etk',
'test-debug'
])
return True

View File

@ -1,87 +0,0 @@
#!/usr/bin/python
import lutin.tools as tools
import realog.debug as debug
def get_type():
return "LIBRARY"
def get_desc():
return "Basic audio algo interface single pipe to provess data"
def get_licence():
return "MPL-2"
def get_compagny_type():
return "com"
def get_compagny_name():
return "atria-soft"
def get_maintainer():
return "authors.txt"
def get_version():
return "version.txt"
def configure(target, my_module):
my_module.add_src_file([
'audio/drain/debug.cpp',
'audio/drain/airtalgo.cpp',
'audio/drain/Algo.cpp',
'audio/drain/ChannelReorder.cpp',
'audio/drain/CircularBuffer.cpp',
'audio/drain/EndPointCallback.cpp',
'audio/drain/EndPoint.cpp',
'audio/drain/EndPointRead.cpp',
'audio/drain/EndPointWrite.cpp',
'audio/drain/FormatUpdate.cpp',
'audio/drain/Process.cpp',
'audio/drain/Resampler.cpp',
'audio/drain/Volume.cpp',
'audio/drain/IOFormatInterface.cpp',
'audio/drain/AutoLogInOut.cpp',
'audio/drain/Equalizer.cpp'
])
my_module.add_header_file([
'audio/drain/debug.hpp',
'audio/drain/debugRemove.hpp',
'audio/drain/airtalgo.hpp',
'audio/drain/Algo.hpp',
'audio/drain/ChannelReorder.hpp',
'audio/drain/CircularBuffer.hpp',
'audio/drain/EndPointCallback.hpp',
'audio/drain/EndPoint.hpp',
'audio/drain/EndPointRead.hpp',
'audio/drain/EndPointWrite.hpp',
'audio/drain/FormatUpdate.hpp',
'audio/drain/Process.hpp',
'audio/drain/Resampler.hpp',
'audio/drain/Volume.hpp',
'audio/drain/IOFormatInterface.hpp',
'audio/drain/AutoLogInOut.hpp',
'audio/drain/Equalizer.hpp'
])
# TODO: my_module.add_optional_module_depend('speexdsp', "HAVE_SPEEX_DSP_RESAMPLE")
my_module.add_flag('c++', "-DHAVE_SPEEX_DSP_RESAMPLE")
my_module.add_depend([
'etk',
'audio',
'ejson',
'speex-dsp',
'audio-algo-drain'
])
my_module.add_path(".")
return True

26
menu.js Normal file
View File

@ -0,0 +1,26 @@
function initMenu(relPath,searchEnabled,serverSide,searchPage,search) {
function makeTree(data,relPath) {
var result='';
if ('children' in data) {
result+='<ul>';
for (var i in data.children) {
result+='<li><a href="'+relPath+data.children[i].url+'">'+
data.children[i].text+'</a>'+
makeTree(data.children[i],relPath)+'</li>';
}
result+='</ul>';
}
return result;
}
$('#main-nav').append(makeTree(menudata,relPath));
$('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu');
if (searchEnabled) {
if (serverSide) {
$('#main-menu').append('<li style="float:right"><div id="MSearchBox" class="MSearchBoxInactive"><div class="left"><form id="FSearchBox" action="'+searchPage+'" method="get"><img id="MSearchSelect" src="'+relPath+'search/mag.png" alt=""/><input type="text" id="MSearchField" name="query" value="'+search+'" size="20" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)"></form></div><div class="right"></div></div></li>');
} else {
$('#main-menu').append('<li style="float:right"><div id="MSearchBox" class="MSearchBoxInactive"><span class="left"><img id="MSearchSelect" src="'+relPath+'search/mag_sel.png" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" alt=""/><input type="text" id="MSearchField" value="'+search+'" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/></span><span class="right"><a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="'+relPath+'search/close.png" alt=""/></a></span></div></li>');
}
}
$('#main-menu').smartmenus();
}

3
menudata.js Normal file
View File

@ -0,0 +1,3 @@
var menudata={children:[
{text:'Main Page',url:'index.html'},
{text:'Related Pages',url:'pages.html'}]}

BIN
nav_f.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 B

BIN
nav_g.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 B

BIN
nav_h.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 B

BIN
open.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 123 B

156
pages.html Normal file
View File

@ -0,0 +1,156 @@
<!-- HTML header for doxygen 1.8.8-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<!-- For Mobile Devices -->
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.8.12"/>
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
<title>Basic audio algo interface single pipe to process data: Related Pages</title>
<!--<link href="tabs.css" rel="stylesheet" type="text/css"/>-->
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="customdoxygen.css" rel="stylesheet" type="text/css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script>
<script type="text/javascript" src="doxy-boot.js"></script>
</head>
<body>
<nav class="navbar navbar-default navbar-fixed-top" role="navigation">
<div class="container">
<div class="navbar-header">
<a class="navbar-brand">Basic audio algo interface single pipe to process data 0.3.0</a>
</div>
<div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li><a href="index.html">Main&nbsp;Page</a></li>
<li><a href="pages.html">Related&nbsp;Pages</a></li>
<li><a href="namespaces.html">Namespaces</a></li>
<li><a href="annotated.html">Classes</a></li>
<li><a href="files.html">Files</a></li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
Link-libs<span class="caret"></span>
</a>
<ul class="dropdown-menu">
<li><a href="http://HeeroYui.github.io/lutin">lutin</a></li>
<li><a href="http://atria-soft.github.io/ewol">ewol</a></li>
<li><a href="http://atria-soft.github.io/echrono">echrono</a></li>
<li><a href="http://atria-soft.github.io/etk">etk</a></li>
<li><a href="http://atria-soft.github.io/ejson">ejson</a></li>
<li><a href="http://atria-soft.github.io/exml">exml</a></li>
<li><a href="http://atria-soft.github.io/esvg">esvg</a></li>
<li><a href="http://atria-soft.github.io/egami">egami</a></li>
<li><a href="http://atria-soft.github.io/gale">gale</a></li>
<li><a href="http://atria-soft.github.io/ege">ege</a></li>
<li><a href="http://atria-soft.github.io/elog">elog</a></li>
<li><a href="http://atria-soft.github.io/ememory">ememory</a></li>
<li><a href="http://atria-soft.github.io/enet">enet</a></li>
<li><a href="http://atria-soft.github.io/eproperty">eproperty</a></li>
<li><a href="http://atria-soft.github.io/esignal">esignal</a></li>
<li><a href="http://atria-soft.github.io/etranslate">etranslate</a></li>
<li><a href="http://atria-soft.github.io/zeus">zeus</a></li>
<li><a href="http://musicdsp.github.io/audio-ess">audio-ess</a></li>
<li><a href="http://musicdsp.github.io/audio">audio</a></li>
<li><a href="http://musicdsp.github.io/audio-drain">audio-drain</a></li>
<li><a href="http://musicdsp.github.io/audio-orchestra">audio-orchestra</a></li>
<li><a href="http://musicdsp.github.io/audio-river">audio-river</a></li>
</ul>
</li>
</ul>
<div id="search-box" class="input-group">
<div class="input-group-btn">
<button aria-expanded="false" type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
<span class="glyphicon glyphicon-search"></span>
<span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><a href="#">All</a></li>
<li><a href="#">Classes</a></li>
<li><a href="#">Namespaces</a></li>
<li><a href="#">Files</a></li>
<li><a href="#">Functions</a></li>
<li><a href="#">Variables</a></li>
<li><a href="#">Typedefs</a></li>
<li><a href="#">Enumerations</a></li>
<li><a href="#">Enumerator</a></li>
<li><a href="#">Friends</a></li>
<li><a href="#">Macros</a></li>
<li><a href="#">Pages</a></li>
</ul>
</div>
<button id="search-close" type="button" class="close" aria-label="Close">
<span aria-hidden="true"></span>
</button>
<input id="search-field" class="form-control" accesskey="S" onkeydown="searchBox.OnSearchFieldChange(event);" placeholder="Search ..." type="text">
</div>
</div><!--/.nav-collapse -->
</div>
</nav>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div class="content" id="content">
<div class="container">
<div class="row">
<div class="col-sm-12 panel panel-default" style="padding-bottom: 15px;">
<div style="margin-bottom: 15px;margin-top: 60px;">
<!-- end header part -->
<!-- Generated by Doxygen 1.8.12 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">Related Pages</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock">Here is a list of all related documentation pages:</div><div class="directory">
<table class="directory">
<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="audio_algo_build.html" target="_self">Build lib &amp; build sample</a></td><td class="desc"></td></tr>
</table>
</div><!-- directory -->
</div><!-- contents -->
<!-- HTML footer for doxygen 1.8.8-->
<!-- start footer part -->
</div>
</div>
</div>
</div>
</div>
<hr class="footer"/><address class="footer"><small>
Generated on Mon Oct 24 2016 15:35:48 for Basic audio algo interface single pipe to process data by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.12
</small></address>
</body>
</html>

26
search/all_0.html Normal file
View File

@ -0,0 +1,26 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.8.12"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_0.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
createResults();
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

27
search/all_0.js Normal file
View File

@ -0,0 +1,27 @@
var searchData=
[
['a',['a',['http://atria-soft.github.io/etk/classetk_1_1_color.html#a772e2882d3a9f91c6f73c0c70c8f3130',1,'etk::Color']]],
['absolute',['absolute',['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a0f1734db865e5a9c69d896bc237de133',1,'etk::Vector2D::absolute()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a0f1734db865e5a9c69d896bc237de133',1,'Vector2D&lt; int32_t &gt;::absolute()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a0f1734db865e5a9c69d896bc237de133',1,'Vector2D&lt; uint32_t &gt;::absolute()'],['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#a5b9733cd0928920ccc8e34d89e980b82',1,'etk::Vector3D::absolute()'],['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html#ab8a9feace5794c5a8a02e4b0e124408a',1,'etk::Vector4D::absolute()']]],
['add',['add',['http://atria-soft.github.io/etk/classetk_1_1_hash.html#a723e93ae06d3d612dc4ebf2e1e7ffd5a',1,'etk::Hash::add()'],['http://atria-soft.github.io/ejson/classejson_1_1_array.html#af5bb12b12c4fc35869a32192539c7beb',1,'ejson::Array::add()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_array.html#ade4f0bf9db6c5f3dd14cab34815d175a',1,'ejson::internal::Array::add()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_object.html#a0248c96fa66e30adfb84249def2c4c94',1,'ejson::internal::Object::add()'],['http://atria-soft.github.io/ejson/classejson_1_1_object.html#a8cec54f55c2b5fb497e6bfc59ea4be13',1,'ejson::Object::add()']]],
['addindent',['addIndent',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_value.html#a6119b75406b5648629b8eaa20948d224',1,'ejson::internal::Value']]],
['aliceblue',['aliceBlue',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#adcf86ef9c7918dcb094a0783761899f1',1,'etk::color']]],
['all',['all',['http://atria-soft.github.io/ememory/classememory_1_1_counter.html#a1614d672880eb19b18a98ea9babe723eaa181a603769c1f98ad927e7367c7aa51',1,'ememory::Counter']]],
['angle',['angle',['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#a3b403b529d49082265f3655aff656a7e',1,'etk::Vector3D']]],
['antiquewhite',['antiqueWhite',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a88abb6eca9c1ba0f346fb697683fa836',1,'etk::color']]],
['applyscalerotation',['applyScaleRotation',['http://atria-soft.github.io/etk/classetk_1_1_matrix2.html#aaafd3d4f83d6fd021b76a54f6a31b010',1,'etk::Matrix2']]],
['aqua',['aqua',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a2cef110e71ce12876fcfd6605e57f716',1,'etk::color']]],
['aquamarine',['aquamarine',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a8b69f67ed3e2db9915acde652a1cff80',1,'etk::color']]],
['archive',['Archive',['http://atria-soft.github.io/etk/classetk_1_1_archive.html',1,'etk']]],
['archive',['Archive',['http://atria-soft.github.io/etk/classetk_1_1_archive.html#a5991c05535749c9ed04eeec185f675ac',1,'etk::Archive']]],
['archive_2ehpp',['Archive.hpp',['http://atria-soft.github.io/etk/__archive__8hpp.html',1,'']]],
['archivecontent',['ArchiveContent',['http://atria-soft.github.io/etk/classetk_1_1_archive_content.html#aac29f8265fa496ca9576f21e13a704d4',1,'etk::ArchiveContent']]],
['archivecontent',['ArchiveContent',['http://atria-soft.github.io/etk/classetk_1_1_archive_content.html',1,'etk']]],
['array',['Array',['http://atria-soft.github.io/ejson/classejson_1_1_array.html',1,'ejson']]],
['array',['Array',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_array.html',1,'ejson::internal']]],
['array',['Array',['http://atria-soft.github.io/ejson/classejson_1_1_array.html#a918d2bded14bafde7809d9485659d58f',1,'ejson::Array::Array(ememory::SharedPtr&lt; ejson::internal::Value &gt; _internalValue)'],['http://atria-soft.github.io/ejson/classejson_1_1_array.html#a36e158041e827b534ce245b18ddf5cc7',1,'ejson::Array::Array(const ejson::Array &amp;_obj)'],['http://atria-soft.github.io/ejson/classejson_1_1_array.html#a8ad8561622a2f641fb45b9650061ce68',1,'ejson::Array::Array()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_array.html#aac1462e570bd26f53b95621b6626e4cf',1,'ejson::internal::Array::Array()'],['http://atria-soft.github.io/ejson/namespaceejson.html#a6a37b3ae20a2b7bc207b268ab1439709af1f713c9e000f5d3f280adbd124df4f5',1,'ejson::array()']]],
['array_2ehpp',['Array.hpp',['http://atria-soft.github.io/ejson/__array__8hpp.html',1,'(Global Namespace)'],['http://atria-soft.github.io/ejson/internal__2__array__8hpp.html',1,'(Global Namespace)']]],
['audio',['audio',['http://musicdsp.github.io/audio/namespaceaudio.html',1,'']]],
['avg',['avg',['http://atria-soft.github.io/etk/namespaceetk.html#a4397d293209affffd0c2f6832ebe2aea',1,'etk']]],
['azure',['azure',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a51cb04e4a5b927ec82ceef2676b781f7',1,'etk::color']]],
['audio_2dalgo_20library',['AUDIO-ALGO library',['../index.html',1,'']]]
];

26
search/all_1.html Normal file
View File

@ -0,0 +1,26 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.8.12"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_1.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
createResults();
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

24
search/all_1.js Normal file
View File

@ -0,0 +1,24 @@
var searchData=
[
['build_20lib_20_26_20build_20sample',['Build lib &amp; build sample',['../audio_algo_build.html',1,'']]],
['build_20lib_20_26_20build_20sample',['Build lib &amp; build sample',['http://musicdsp.github.io/audio/audio_build.html',1,'']]],
['b',['b',['http://atria-soft.github.io/etk/classetk_1_1_color.html#ac6be77ac33983d040a2ede58bc631d94',1,'etk::Color']]],
['basenoise',['BaseNoise',['http://atria-soft.github.io/etk/classetk_1_1_base_noise.html',1,'etk']]],
['basenoise',['BaseNoise',['http://atria-soft.github.io/etk/classetk_1_1_base_noise.html#ad5cbfcc2d967af185c264744de04cf15',1,'etk::BaseNoise']]],
['begin',['begin',['http://atria-soft.github.io/ejson/classejson_1_1_array.html#a9b61949e81e838c6e1123ff26614d20d',1,'ejson::Array::begin()'],['http://atria-soft.github.io/ejson/classejson_1_1_array.html#a36fa8883af25afed6025178f95815927',1,'ejson::Array::begin() const'],['http://atria-soft.github.io/ejson/classejson_1_1_object.html#a06584f41d23a3abc88a474da1e037437',1,'ejson::Object::begin()'],['http://atria-soft.github.io/ejson/classejson_1_1_object.html#a53091d4f1ba52eb463bc51af48597821',1,'ejson::Object::begin() const']]],
['beige',['beige',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a68244b2fa52245487cec1154155d0e03',1,'etk::color']]],
['bisque',['bisque',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#ad03e04b97263a2c64dedfc405ff983ee',1,'etk::color']]],
['black',['black',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a4198b330ccb2e9008665733eee338f73',1,'etk::color']]],
['blanchedalmond',['blanchedAlmond',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a12e8ba075411585a68aece7d0fead4cc',1,'etk::color']]],
['blue',['blue',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a50f114c6849684e9984ae1322493572c',1,'etk::color']]],
['blueviolet',['blueViolet',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#ac91bcec9a0a115d1070397f86cfdee4d',1,'etk::color']]],
['boolean',['Boolean',['http://atria-soft.github.io/ejson/classejson_1_1_boolean.html#a58e8f164a9e58444b362e3e174d54e56',1,'ejson::Boolean::Boolean(ememory::SharedPtr&lt; ejson::internal::Value &gt; _internalValue)'],['http://atria-soft.github.io/ejson/classejson_1_1_boolean.html#a7672591c1c29e25a18b41cfb5d7dd33b',1,'ejson::Boolean::Boolean(const ejson::Boolean &amp;_obj)'],['http://atria-soft.github.io/ejson/classejson_1_1_boolean.html#aa7bd97c43d0d0ceea89a041162203654',1,'ejson::Boolean::Boolean(bool _value=false)'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_boolean.html#a2fe50827d84a523f9c3a107394389c11',1,'ejson::internal::Boolean::Boolean()'],['http://atria-soft.github.io/ejson/namespaceejson.html#a6a37b3ae20a2b7bc207b268ab1439709a84e2c64f38f78ba3ea5c905ab5a2da27',1,'ejson::boolean()']]],
['boolean',['Boolean',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_boolean.html',1,'ejson::internal']]],
['boolean',['Boolean',['http://atria-soft.github.io/ejson/classejson_1_1_boolean.html',1,'ejson']]],
['boolean_2ehpp',['Boolean.hpp',['http://atria-soft.github.io/ejson/__boolean__8hpp.html',1,'(Global Namespace)'],['http://atria-soft.github.io/ejson/internal__2__boolean__8hpp.html',1,'(Global Namespace)']]],
['brown',['brown',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#af3dff0347662115abb89c6ddb8447227',1,'etk::color']]],
['burlywood',['burlyWood',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a1920dd335710c842ea4706e2383ef784',1,'etk::color']]],
['build_20lib_20_26_20build_20sample',['Build lib &amp; build sample',['http://atria-soft.github.io/ejson/ejson_build.html',1,'']]],
['build_20lib_20_26_20build_20sample',['Build lib &amp; build sample',['http://atria-soft.github.io/elog/elog_build.html',1,'']]],
['build_20lib_20_26_20build_20sample',['Build lib &amp; build sample',['http://atria-soft.github.io/etk/etk_build.html',1,'']]]
];

26
search/all_10.html Normal file
View File

@ -0,0 +1,26 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.8.12"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_10.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
createResults();
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

86
search/all_10.js Normal file
View File

@ -0,0 +1,86 @@
var searchData=
[
['saddlebrown',['saddleBrown',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a5407ca00d7f7bf3815a72616e0be95ae',1,'etk::color']]],
['safenormalize',['safeNormalize',['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a245ccd3b57812316fc1ec98ea5c19434',1,'etk::Vector2D::safeNormalize()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a245ccd3b57812316fc1ec98ea5c19434',1,'Vector2D&lt; int32_t &gt;::safeNormalize()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a245ccd3b57812316fc1ec98ea5c19434',1,'Vector2D&lt; uint32_t &gt;::safeNormalize()'],['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#abee6d22d509043f24a5aedb208ba1019',1,'etk::Vector3D::safeNormalize()']]],
['salmon',['salmon',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#ad324737686a8c6ec9208a93e727710d8',1,'etk::color']]],
['sandybrown',['sandyBrown',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#affd1d87686e7d4fb1a720d4cb5c354cb',1,'etk::color']]],
['scale',['scale',['http://atria-soft.github.io/etk/classetk_1_1_matrix2.html#aacc34d6c0be39b22fed735cd09ffed84',1,'etk::Matrix2::scale(const vec2 &amp;_vect)'],['http://atria-soft.github.io/etk/classetk_1_1_matrix2.html#adaa317393ef799d0ab49c3b10cf47231',1,'etk::Matrix2::scale(float _value)'],['http://atria-soft.github.io/etk/classetk_1_1_matrix4.html#aa3121f90430c2e2d80bc967d4b94c114',1,'etk::Matrix4::scale(const vec3 &amp;_vect)'],['http://atria-soft.github.io/etk/classetk_1_1_matrix4.html#a41eb56d343978f32caa64dfda50cd6a5',1,'etk::Matrix4::scale(float _sx, float _sy, float _sz)']]],
['seagreen',['seaGreen',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a3d3d8140130f2383e7740b4cea443470',1,'etk::color']]],
['seashell',['seaShell',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a6b50105504f9be5dcf7ae59cbb115051',1,'etk::color']]],
['seeknode',['seekNode',['http://atria-soft.github.io/etk/namespaceetk.html#a4a0133c254ab2433999c1b61fd9d993e',1,'etk']]],
['seeknode_5fcurrent',['seekNode_current',['http://atria-soft.github.io/etk/namespaceetk.html#a4a0133c254ab2433999c1b61fd9d993ea8da2a40c899dc80a97a96999766d1598',1,'etk']]],
['seeknode_5fend',['seekNode_end',['http://atria-soft.github.io/etk/namespaceetk.html#a4a0133c254ab2433999c1b61fd9d993ea981349cc2910e974472575409d19f0b6',1,'etk']]],
['seeknode_5fstart',['seekNode_start',['http://atria-soft.github.io/etk/namespaceetk.html#a4a0133c254ab2433999c1b61fd9d993ea9019d83f9a109a54ab84067c2aa8abcd',1,'etk']]],
['select',['select',['http://atria-soft.github.io/etk/classetk_1_1_matrix.html#a1c8f1bb6f8d14c0fb9d4d39dac67b07b',1,'etk::Matrix']]],
['set',['set',['http://atria-soft.github.io/etk/classetk_1_1_color.html#a0955ac7d80e3886afa872d47e0cc1415',1,'etk::Color::set(MY_TYPE _r, MY_TYPE _g, MY_TYPE _b, MY_TYPE _a)'],['http://atria-soft.github.io/etk/classetk_1_1_color.html#a0f663138f780f134ae07957f5a9fef57',1,'etk::Color::set(MY_TYPE _r, MY_TYPE _g, MY_TYPE _b)'],['http://atria-soft.github.io/etk/classetk_1_1_color.html#a7de7eef4b78f10829066af98be02f27b',1,'etk::Color::set(MY_TYPE _r, MY_TYPE _g)'],['http://atria-soft.github.io/etk/classetk_1_1_color.html#a5063a9ee59f18fbeb7172f833617d8eb',1,'etk::Color::set(MY_TYPE _r)'],['http://atria-soft.github.io/etk/classetk_1_1_hash.html#af372b733bfbccd0d67f4df1fbfb62ad7',1,'etk::Hash::set()'],['http://atria-soft.github.io/ejson/classejson_1_1_boolean.html#aab7e29c6cf8553d1b396a8b5251df37d',1,'ejson::Boolean::set()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_boolean.html#af666327146a16819bc97b8bd2ef59ac6',1,'ejson::internal::Boolean::set()'],['http://atria-soft.github.io/ejson/classejson_1_1_file_pos.html#aed1081e2d1f561d566a8cc77b3a90777',1,'ejson::FilePos::set()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_number.html#ad8f10de8af236c264bf4989709d347c6',1,'ejson::internal::Number::set(double _value)'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_number.html#a8003c9060afbadb9d7e0e1c7d18a2387',1,'ejson::internal::Number::set(int64_t _value)'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_number.html#acabc53b7d1370b35e39a610847fa5b1c',1,'ejson::internal::Number::set(uint64_t _value)'],['http://atria-soft.github.io/ejson/classejson_1_1_number.html#a428ee4a3b855eb654f39e51426795a98',1,'ejson::Number::set(double _value)'],['http://atria-soft.github.io/ejson/classejson_1_1_number.html#a3562766c4a35aaf4f4dfc8bc8ae1335c',1,'ejson::Number::set(uint64_t _value)'],['http://atria-soft.github.io/ejson/classejson_1_1_number.html#a9efe3f43c2dabb2a950a4d817990ac16',1,'ejson::Number::set(int64_t _value)'],['http://atria-soft.github.io/ejson/classejson_1_1_string.html#a7ddb0ed5b9ce5591eddd698551cf1ddb',1,'ejson::String::set()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_string.html#a5ed7163d078e1b44d101451f5b40fb75',1,'ejson::internal::String::set()']]],
['seta',['setA',['http://atria-soft.github.io/etk/classetk_1_1_color.html#a1d24c054b6d64d2a73c6cef57d91c31a',1,'etk::Color']]],
['setargzero',['setArgZero',['http://atria-soft.github.io/etk/namespaceetk.html#a5eda91763c9f02f0e7e16c099092695d',1,'etk']]],
['setb',['setB',['http://atria-soft.github.io/etk/classetk_1_1_color.html#ae8078ca64701dbc1b5080589037743f1',1,'etk::Color']]],
['setbacktrace',['setBackTrace',['http://atria-soft.github.io/elog/namespaceelog.html#aae6ff218b5e851513cfc29d030b865fb',1,'elog']]],
['setbasefoldercache',['setBaseFolderCache',['http://atria-soft.github.io/etk/namespaceetk.html#a6cdcbe0aeba288278c89a995481b9e6f',1,'etk']]],
['setbasefolderdata',['setBaseFolderData',['http://atria-soft.github.io/etk/namespaceetk.html#ab8546560f91d95e2df5f176f5ec0fc99',1,'etk']]],
['setbasefolderdatauser',['setBaseFolderDataUser',['http://atria-soft.github.io/etk/namespaceetk.html#a91fb8f53bc0d3ad4ed2061b3f5af7734',1,'etk']]],
['setcallbacklog',['setCallbackLog',['http://atria-soft.github.io/elog/namespaceelog.html#a8c02ad11df203c22c7e65c759b43efdd',1,'elog']]],
['setcolor',['setColor',['http://atria-soft.github.io/elog/namespaceelog.html#a157a0ce2993c115906b8a2607f6a9133',1,'elog']]],
['setdisplayerror',['setDisplayError',['http://atria-soft.github.io/ejson/classejson_1_1_document.html#a75cc1ee77adccb81e611a4ed09eaa6a8',1,'ejson::Document::setDisplayError()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_document.html#a265d3edbd88a85e8d6650d785e599eb2',1,'ejson::internal::Document::setDisplayError()']]],
['setfrompoints',['setFromPoints',['http://atria-soft.github.io/etk/classetk_1_1_plane.html#a69b4871efd25fa204a3917360bfb8cc9',1,'etk::Plane']]],
['setfunction',['setFunction',['http://atria-soft.github.io/elog/namespaceelog.html#aed76a2bba4f8c0f51633fa64ab08362d',1,'elog']]],
['setg',['setG',['http://atria-soft.github.io/etk/classetk_1_1_color.html#a724b243ffc1ba471eab6b04f6ca6ecd4',1,'etk::Color']]],
['setgroupreadable',['setGroupReadable',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node_right.html#acca31813653f621d4859d5c837f057a5',1,'etk::FSNodeRight']]],
['setgrouprunable',['setGroupRunable',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node_right.html#a5184205ed51108dd9bf3ed4ad141588e',1,'etk::FSNodeRight']]],
['setgroupwritable',['setGroupWritable',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node_right.html#acc834eeef2e84b9e7cceac38b3a59389',1,'etk::FSNodeRight']]],
['setintercept',['setIntercept',['http://atria-soft.github.io/etk/classetk_1_1_plane.html#a691582e68a6ee38b0c7c9ccf2a6734f3',1,'etk::Plane']]],
['setinterpolate3',['setInterpolate3',['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#a3e59820b3cc3f9138e69d8aee9a448c8',1,'etk::Vector3D']]],
['setlevel',['setLevel',['http://atria-soft.github.io/elog/namespaceelog.html#a3afe4089acb36e88d7266c1ce85ddc7b',1,'elog::setLevel(const std::string &amp;_name, enum elog::level _level)'],['http://atria-soft.github.io/elog/namespaceelog.html#a423b95c78b78e98de35c8f176b9efbdc',1,'elog::setLevel(int32_t _id, enum elog::level _level)'],['http://atria-soft.github.io/elog/namespaceelog.html#a600189d0be9885f63d651201ab0c3688',1,'elog::setLevel(enum elog::level _level)']]],
['setlibname',['setLibName',['http://atria-soft.github.io/elog/namespaceelog.html#a98f690a8538d4726fa0060331e021a08',1,'elog']]],
['setline',['setLine',['http://atria-soft.github.io/elog/namespaceelog.html#a2591d4ba7e3136ff84c0b81289000b79',1,'elog']]],
['setloginfile',['setLogInFile',['http://atria-soft.github.io/elog/namespaceelog.html#a78083b9d6ef033e329b788f8fa22f3f3',1,'elog']]],
['setmax',['setMax',['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a72ae52d19423c46bad955ad1a9f59041',1,'etk::Vector2D::setMax()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a72ae52d19423c46bad955ad1a9f59041',1,'Vector2D&lt; int32_t &gt;::setMax()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a72ae52d19423c46bad955ad1a9f59041',1,'Vector2D&lt; uint32_t &gt;::setMax()'],['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#a7b9a94f71854f5ad89ef23ef22dcb321',1,'etk::Vector3D::setMax()'],['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html#a2469c42527ead691f479a9a573709e5f',1,'etk::Vector4D::setMax()']]],
['setmin',['setMin',['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#aa087eeec653b538d166c0d2794737fb1',1,'etk::Vector2D::setMin()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#aa087eeec653b538d166c0d2794737fb1',1,'Vector2D&lt; int32_t &gt;::setMin()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#aa087eeec653b538d166c0d2794737fb1',1,'Vector2D&lt; uint32_t &gt;::setMin()'],['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#a7c2e3d0042a62791b1c653d5081577c2',1,'etk::Vector3D::setMin()'],['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html#aa647808a65613af0e1e757f27444f0a6',1,'etk::Vector4D::setMin()']]],
['setname',['setName',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a6e787e7f3148dae0c74139be7b05ab43',1,'etk::FSNode']]],
['setnormal',['setNormal',['http://atria-soft.github.io/etk/classetk_1_1_plane.html#a202b3335b2b71cc84726a1b57b8e1e70',1,'etk::Plane']]],
['setotherreadable',['setOtherReadable',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node_right.html#a6ad46a56d871f5925a826a6fd3071b78',1,'etk::FSNodeRight']]],
['setotherrunable',['setOtherRunable',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node_right.html#a290708c849f5b58714dad5a1926cfe1c',1,'etk::FSNodeRight']]],
['setotherwritable',['setOtherWritable',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node_right.html#a931050b25db28423f1a2899f8ec188a0',1,'etk::FSNodeRight']]],
['setr',['setR',['http://atria-soft.github.io/etk/classetk_1_1_color.html#a96c8b12779776562c2fa0dfdc4d1b242',1,'etk::Color']]],
['setright',['setRight',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a65bce1c8887edad87a90c8c7ffb861d3',1,'etk::FSNode']]],
['setthreadid',['setThreadId',['http://atria-soft.github.io/elog/namespaceelog.html#a9b835d4980949026a8883570ea3837af',1,'elog']]],
['setthreadnameenable',['setThreadNameEnable',['http://atria-soft.github.io/elog/namespaceelog.html#ae64b5abf2ea03562679668e6242c49a2',1,'elog']]],
['settime',['setTime',['http://atria-soft.github.io/elog/namespaceelog.html#a15e30e61e8db5a43e72358d2c02be6a4',1,'elog']]],
['setuserreadable',['setUserReadable',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node_right.html#acadd7b9c2c632f9805569ff4f592bda9',1,'etk::FSNodeRight']]],
['setuserrunable',['setUserRunable',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node_right.html#a0ee76ec4897c406ab67ea25659953070',1,'etk::FSNodeRight']]],
['setuserwritable',['setUserWritable',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node_right.html#a9e5e2e4c7926c22101e6955b3d8c9139',1,'etk::FSNodeRight']]],
['setvalue',['setValue',['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#ade86675814738c6b7a6a797ee128a2b2',1,'etk::Vector2D::setValue()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#ade86675814738c6b7a6a797ee128a2b2',1,'Vector2D&lt; int32_t &gt;::setValue()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#ade86675814738c6b7a6a797ee128a2b2',1,'Vector2D&lt; uint32_t &gt;::setValue()'],['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#a96d02449aaa2dfeb4e60320da667ab92',1,'etk::Vector3D::setValue()'],['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html#a9b164290093d948905fab0f56fbe22fc',1,'etk::Vector4D::setValue()']]],
['setw',['setW',['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html#a1750c9d1b91d67b8b2bc9d0cce759944',1,'etk::Vector4D']]],
['setx',['setX',['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#ae2acd7c10cdd510ce23ff11839c95c04',1,'etk::Vector2D::setX()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#ae2acd7c10cdd510ce23ff11839c95c04',1,'Vector2D&lt; int32_t &gt;::setX()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#ae2acd7c10cdd510ce23ff11839c95c04',1,'Vector2D&lt; uint32_t &gt;::setX()'],['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#ab7ab9d9ce1138ffafebaff3001bb7d29',1,'etk::Vector3D::setX()'],['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html#a238d966b077394ff118f2088479fb620',1,'etk::Vector4D::setX()']]],
['sety',['setY',['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a35a3f35ed049b7193ca67ea815efd465',1,'etk::Vector2D::setY()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a35a3f35ed049b7193ca67ea815efd465',1,'Vector2D&lt; int32_t &gt;::setY()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a35a3f35ed049b7193ca67ea815efd465',1,'Vector2D&lt; uint32_t &gt;::setY()'],['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#a10c41fb516fb33ef56201f06992462d1',1,'etk::Vector3D::setY()'],['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html#a7489a0c8d592c9464a8e378bbb7e570e',1,'etk::Vector4D::setY()']]],
['setz',['setZ',['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#a9a5c1d69fd9066daae0a759831ba0e30',1,'etk::Vector3D::setZ()'],['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html#ae5bbc387ea4199ea535d4d033cfc40d1',1,'etk::Vector4D::setZ()']]],
['setzero',['setZero',['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#ab2e921e0009f0e0de78d06d16f6a78e0',1,'etk::Vector2D::setZero()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#ab2e921e0009f0e0de78d06d16f6a78e0',1,'Vector2D&lt; int32_t &gt;::setZero()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#ab2e921e0009f0e0de78d06d16f6a78e0',1,'Vector2D&lt; uint32_t &gt;::setZero()'],['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#a7ddb707a7a1609bcbd8c092186a6db19',1,'etk::Vector3D::setZero()'],['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html#a978b0511ade11701ffdbd7974de6932e',1,'etk::Vector4D::setZero()']]],
['sharedfromthis',['sharedFromThis',['http://atria-soft.github.io/ememory/classememory_1_1_enable_shared_from_this.html#ab9c576f893c44cbf8163b1ddf6f86b38',1,'ememory::EnableSharedFromThis::sharedFromThis()'],['http://atria-soft.github.io/ememory/classememory_1_1_enable_shared_from_this.html#ad16c98c2383b23adffa8db309bc1ca11',1,'ememory::EnableSharedFromThis::sharedFromThis() const']]],
['sharedptr',['SharedPtr',['http://atria-soft.github.io/ememory/classememory_1_1_shared_ptr.html#a7b017780895f0a9d32e753574ae82010',1,'ememory::SharedPtr::SharedPtr(EMEMORY_TYPE2 *_element)'],['http://atria-soft.github.io/ememory/classememory_1_1_shared_ptr.html#aef65a1bba18c17a8a13e05aa5d702b1e',1,'ememory::SharedPtr::SharedPtr(std::nullptr_t)'],['http://atria-soft.github.io/ememory/classememory_1_1_shared_ptr.html#a6b448ecd7740c97551e8afd65acaca6f',1,'ememory::SharedPtr::SharedPtr()'],['http://atria-soft.github.io/ememory/classememory_1_1_shared_ptr.html#ab5052506642bddd3aa5e6fb44ec1a173',1,'ememory::SharedPtr::SharedPtr(EMEMORY_TYPE *_obj, ememory::Counter *_counter)'],['http://atria-soft.github.io/ememory/classememory_1_1_shared_ptr.html#ab91fe50ba210a0545fa41e993df9beea',1,'ememory::SharedPtr::SharedPtr(const SharedPtr&lt; EMEMORY_TYPE &gt; &amp;_obj)'],['http://atria-soft.github.io/ememory/classememory_1_1_shared_ptr.html#ab46f51a66327265bbc94ee89b603ca71',1,'ememory::SharedPtr::SharedPtr(SharedPtr&lt; EMEMORY_TYPE &gt; &amp;&amp;_obj)']]],
['sharedptr',['SharedPtr',['http://atria-soft.github.io/ememory/classememory_1_1_shared_ptr.html',1,'ememory']]],
['sharedptr_2ehpp',['SharedPtr.hpp',['http://atria-soft.github.io/ememory/__shared__ptr__8hpp.html',1,'']]],
['sharedptr_3c_20ejson_3a_3ainternal_3a_3aejson_3a_3avalue_20_3e',['SharedPtr&lt; ejson::internal::ejson::Value &gt;',['http://atria-soft.github.io/ememory/classememory_1_1_shared_ptr.html',1,'ememory']]],
['sienna',['sienna',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a0a8eaf790795f7b5fc63c81ade8652ce',1,'etk::color']]],
['silver',['silver',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#aca25e934d9d1ac1538a4a0c7011c6d0c',1,'etk::color']]],
['simplifypath',['simplifyPath',['http://atria-soft.github.io/etk/namespaceetk.html#a0087446ff0e9b533ea70b3043ae2addc',1,'etk']]],
['size',['size',['http://atria-soft.github.io/etk/classetk_1_1_archive.html#a17d06497d98be15f6080cf84010d35a0',1,'etk::Archive::size()'],['http://atria-soft.github.io/etk/classetk_1_1_archive_content.html#a36dc83c35ebdacdce11e04dbcba4334c',1,'etk::ArchiveContent::size()'],['http://atria-soft.github.io/etk/classetk_1_1_hash.html#a4d639eb19c25b1ff76d34c225a132deb',1,'etk::Hash::size()'],['http://atria-soft.github.io/ejson/classejson_1_1_array.html#a94267e806e4df82be54a73a7ef591c03',1,'ejson::Array::size()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_array.html#a56b469d5860feb6d2d73c51b87188051',1,'ejson::internal::Array::size()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_object.html#a11f6d2ca0e58ebccdbdac6120ea377ab',1,'ejson::internal::Object::size()'],['http://atria-soft.github.io/ejson/classejson_1_1_object.html#a5e33daf982a3bae085b3d8e9d0d48089',1,'ejson::Object::size()']]],
['skyblue',['skyBlue',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a1576fd8ed2c3fe5ed5a10f8147d0ed1d',1,'etk::color']]],
['slateblue',['slateBlue',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a4f605302a82a6173de726e797c3edf0d',1,'etk::color']]],
['slategray',['slateGray',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a5d3c48d14e696bc1b8d9d43158dfa0b2',1,'etk::color']]],
['slategrey',['slateGrey',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a9cefc035f467790176ba159bb6255c6e',1,'etk::color']]],
['snow',['snow',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#ae312c38fc6be5178a4ff63921f162723',1,'etk::color']]],
['space',['Space',['http://atria-soft.github.io/etk/namespaceu32char.html#a7a114cf0424bb72fd7f3f10c9cd017e8',1,'u32char']]],
['springgreen',['springGreen',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#ab3b6e2028b00791f15ddff7f9a1fe703',1,'etk::color']]],
['staticpointercast',['staticPointerCast',['http://atria-soft.github.io/ememory/namespaceememory.html#a9a5a8c52dbbb1cb7121231de10dec3b2',1,'ememory::staticPointerCast(ememory::SharedPtr&lt; EMEMORY_TYPE &gt; &amp;_obj)'],['http://atria-soft.github.io/ememory/namespaceememory.html#ad67a9361b7aa47b38ef5366f9ec2c712',1,'ememory::staticPointerCast(const ememory::SharedPtr&lt; EMEMORY_TYPE &gt; &amp;_obj)']]],
['stdtools_2ehpp',['stdTools.hpp',['http://atria-soft.github.io/etk/std__tools__8hpp.html',1,'']]],
['steelblue',['steelBlue',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a9162b466a59a0bbe420b49c565e9dd6f',1,'etk::color']]],
['store',['store',['http://atria-soft.github.io/ejson/classejson_1_1_document.html#a2a058bdb1bbd4e151e08e719bbbe2560',1,'ejson::Document::store()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_document.html#a35d7de9cf4987da51028e3bf7f9edde6',1,'ejson::internal::Document::store()']]],
['storesafe',['storeSafe',['http://atria-soft.github.io/ejson/classejson_1_1_document.html#a3fb19ca6aefe86a86c43bf6bb8d133c9',1,'ejson::Document']]],
['string',['String',['http://atria-soft.github.io/ejson/classejson_1_1_string.html#a2343d871cc75be25eee5381ba34dfd37',1,'ejson::String::String(ememory::SharedPtr&lt; ejson::internal::Value &gt; _internalValue)'],['http://atria-soft.github.io/ejson/classejson_1_1_string.html#ac5074aad1b24c1045b27e30aaefe6ebe',1,'ejson::String::String(const ejson::String &amp;_obj)'],['http://atria-soft.github.io/ejson/classejson_1_1_string.html#afdae63446f3a9fb02245636c352a91e4',1,'ejson::String::String(const std::string &amp;_value=&quot;&quot;)'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_string.html#a1ce856e42efbcfe0e76294ae113c0e67',1,'ejson::internal::String::String()'],['http://atria-soft.github.io/ejson/namespaceejson.html#a6a37b3ae20a2b7bc207b268ab1439709ab45cffe084dd3d20d928bee85e7b0f21',1,'ejson::string()']]],
['string',['String',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_string.html',1,'ejson::internal']]],
['string',['String',['http://atria-soft.github.io/ejson/classejson_1_1_string.html',1,'ejson']]],
['string_2ehpp',['String.hpp',['http://atria-soft.github.io/ejson/internal__2__string__8hpp.html',1,'(Global Namespace)'],['http://atria-soft.github.io/ejson/__string__8hpp.html',1,'(Global Namespace)']]],
['suppress',['Suppress',['http://atria-soft.github.io/etk/namespaceu32char.html#a9cff086787b8b0321e36251a27c40321',1,'u32char']]],
['swap',['swap',['http://atria-soft.github.io/ememory/classememory_1_1_shared_ptr.html#ad7a06dd2042312f6f94da526adddfc48',1,'ememory::SharedPtr::swap()'],['http://atria-soft.github.io/ememory/classememory_1_1_weak_ptr.html#ab138aa24ae18beedf25cbbe9d99ba0b4',1,'ememory::WeakPtr::swap()']]]
];

26
search/all_11.html Normal file
View File

@ -0,0 +1,26 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.8.12"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_11.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
createResults();
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

44
search/all_11.js Normal file
View File

@ -0,0 +1,44 @@
var searchData=
[
['tutorials',['Tutorials',['http://atria-soft.github.io/elog/elog_tutorial.html',1,'']]],
['tabulation',['Tabulation',['http://atria-soft.github.io/etk/namespaceu32char.html#ad7a0c42ea443e20bfceb69f863bebc6a',1,'u32char']]],
['tan',['tan',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a923b2869775837088eabdb48681f4b1e',1,'etk::color']]],
['teal',['teal',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a9b28dace6aa8c81c0c59a7343875d2b5',1,'etk::color']]],
['theoricfirst',['theoricFirst',['http://atria-soft.github.io/etk/namespaceutf8.html#a52043c6c7cf75da5f8e8812ffb4ffc1c',1,'utf8']]],
['theoriclen',['theoricLen',['http://atria-soft.github.io/etk/namespaceutf8.html#ad408da64c12fe3345b9576ab487bd7e3',1,'utf8']]],
['thistle',['thistle',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a729d8532a3b7c147fcaa726ce2d887b8',1,'etk::color']]],
['time_2ehpp',['Time.hpp',['http://musicdsp.github.io/audio/__time__8hpp.html',1,'']]],
['timeaccessed',['timeAccessed',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a43c3b946ef91744dd2991734166c1d87',1,'etk::FSNode']]],
['timeaccessedstring',['timeAccessedString',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a17022f6598927b1b9f169cbcd99099e6',1,'etk::FSNode']]],
['timecreated',['timeCreated',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a46fe9a1916400ca932d31a847dff0f21',1,'etk::FSNode']]],
['timecreatedstring',['timeCreatedString',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a30a497f2d095469b5846756a1b51a749',1,'etk::FSNode']]],
['timemodified',['timeModified',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#afa84341a6764252f5fb70eb48540f496',1,'etk::FSNode']]],
['timemodifiedstring',['timeModifiedString',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a3cdee551ca80df9597a408b42b4f7210',1,'etk::FSNode']]],
['to_5fstring',['to_string',['http://atria-soft.github.io/etk/namespaceetk.html#a48ed31a00f989f5b188d7254e6945a74',1,'etk::to_string(const TYPE &amp;_variable)'],['http://atria-soft.github.io/etk/namespaceetk.html#a17aa4febea213096442bcb8e7ca80805',1,'etk::to_string(const std::vector&lt; TYPE &gt; &amp;_list)']]],
['toarray',['toArray',['http://atria-soft.github.io/ejson/classejson_1_1_value.html#abf67a6a98c2fb657cff4290cef39b658',1,'ejson::Value::toArray()'],['http://atria-soft.github.io/ejson/classejson_1_1_value.html#a7bd84110f49d0b4252d3b919e74e3831',1,'ejson::Value::toArray() const']]],
['toboolean',['toBoolean',['http://atria-soft.github.io/ejson/classejson_1_1_value.html#ab759dc22259f15b487a4437df60baf1a',1,'ejson::Value::toBoolean()'],['http://atria-soft.github.io/ejson/classejson_1_1_value.html#ac7b37ebf5bcabf12feb589968770b3f4',1,'ejson::Value::toBoolean() const']]],
['todocument',['toDocument',['http://atria-soft.github.io/ejson/classejson_1_1_value.html#a58ec04b1804d2502c0621c9a4108b6c3',1,'ejson::Value::toDocument()'],['http://atria-soft.github.io/ejson/classejson_1_1_value.html#a6b5eed0d3b14a3fc1a75357bda165e33',1,'ejson::Value::toDocument() const']]],
['toint',['toInt',['http://atria-soft.github.io/etk/namespaceu32char.html#afc40d527459e3869ea8dc54d3b5ef225',1,'u32char']]],
['tomato',['tomato',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a9f3fe621ef99b1b452a5a11af1a06ae0',1,'etk::color']]],
['tonull',['toNull',['http://atria-soft.github.io/ejson/classejson_1_1_value.html#a157597cbc30f00eabc62d8724fccd61f',1,'ejson::Value::toNull()'],['http://atria-soft.github.io/ejson/classejson_1_1_value.html#aa50ce25748b4164eac425a74aa3a9990',1,'ejson::Value::toNull() const']]],
['tonumber',['toNumber',['http://atria-soft.github.io/ejson/classejson_1_1_value.html#a40e63375796266399a4297b8d2b96f2c',1,'ejson::Value::toNumber()'],['http://atria-soft.github.io/ejson/classejson_1_1_value.html#a49736f1d74a125b0e9fb3e9a18a793ad',1,'ejson::Value::toNumber() const']]],
['toobject',['toObject',['http://atria-soft.github.io/ejson/classejson_1_1_value.html#a91236630d37cad7a8d1256835a9448c8',1,'ejson::Value::toObject()'],['http://atria-soft.github.io/ejson/classejson_1_1_value.html#ae27978be6397ed84518ae23eaed23cd5',1,'ejson::Value::toObject() const']]],
['tool_2ehpp',['tool.hpp',['http://atria-soft.github.io/etk/tool__8hpp.html',1,'']]],
['tostring',['toString',['http://atria-soft.github.io/ejson/classejson_1_1_value.html#a43a3bf8ff0d02f92e8751ea8a16fcaa1',1,'ejson::Value::toString()'],['http://atria-soft.github.io/ejson/classejson_1_1_value.html#a65587aee04eba5882f306b46e5b3c9ce',1,'ejson::Value::toString() const']]],
['touch',['touch',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a6fd01aeb7f84399ad99573e0a7e2f8fc',1,'etk::FSNode']]],
['transfertin',['transfertIn',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_array.html#ad82736867e1bbf1ef9cda98ee22b2215',1,'ejson::internal::Array::transfertIn()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_boolean.html#af30b2342a4c91705dceb2434f2f06d47',1,'ejson::internal::Boolean::transfertIn()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_null.html#a3e57cb8cf21c84258ed5024a8d40fc23',1,'ejson::internal::Null::transfertIn()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_number.html#ab753d1a2d0919737a566b7e3fc06b080',1,'ejson::internal::Number::transfertIn()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_object.html#aee25bea3065759780a3f63d2f5c0458e',1,'ejson::internal::Object::transfertIn()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_string.html#a3ee2d34d468baec8d347add7d590e7db',1,'ejson::internal::String::transfertIn()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_value.html#ad0d5a680f032ce3d97f87468fdd448df',1,'ejson::internal::Value::transfertIn()'],['http://atria-soft.github.io/ejson/classejson_1_1_value.html#a03ca08ba192ba578df15b6f90cb96970',1,'ejson::Value::transfertIn()']]],
['translate',['translate',['http://atria-soft.github.io/etk/classetk_1_1_matrix2.html#abd22ba1cbe8dc53c0446abcb55d8551a',1,'etk::Matrix2::translate()'],['http://atria-soft.github.io/etk/classetk_1_1_matrix4.html#aa6cd07f3a802c5a57bddbf5a6db95c4d',1,'etk::Matrix4::translate()']]],
['transpose',['transpose',['http://atria-soft.github.io/etk/classetk_1_1_matrix.html#ab05c8b14ec68367d0391c23b77870a3b',1,'etk::Matrix::transpose()'],['http://atria-soft.github.io/etk/classetk_1_1_matrix4.html#a8214b2300ebdc4b42bde1efe93e84fae',1,'etk::Matrix4::transpose()']]],
['triple',['triple',['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#af1e591712d4a15bd21ad6fd22d72df97',1,'etk::Vector3D']]],
['turquoise',['turquoise',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a8162f21fcdb858a4c5017a20db4c5830',1,'etk::color']]],
['typenode',['typeNode',['http://atria-soft.github.io/etk/namespaceetk.html#a99c2dd948d6da85ed816fa0c267862e8',1,'etk']]],
['typenode_5fblock',['typeNode_block',['http://atria-soft.github.io/etk/namespaceetk.html#a99c2dd948d6da85ed816fa0c267862e8a18f1c41a5c9bc4842a512954af23d630',1,'etk']]],
['typenode_5fcharacter',['typeNode_character',['http://atria-soft.github.io/etk/namespaceetk.html#a99c2dd948d6da85ed816fa0c267862e8a07f61c5191a0e393871ecf69f4f32eed',1,'etk']]],
['typenode_5ffifo',['typeNode_fifo',['http://atria-soft.github.io/etk/namespaceetk.html#a99c2dd948d6da85ed816fa0c267862e8af5a5a8cef27d1c2abf4c6b7b9a893890',1,'etk']]],
['typenode_5ffile',['typeNode_file',['http://atria-soft.github.io/etk/namespaceetk.html#a99c2dd948d6da85ed816fa0c267862e8a4bb596537f408d12f89da085cac752c6',1,'etk']]],
['typenode_5ffolder',['typeNode_folder',['http://atria-soft.github.io/etk/namespaceetk.html#a99c2dd948d6da85ed816fa0c267862e8a67fbbfd55ff1568df12ca9719bc73680',1,'etk']]],
['typenode_5flink',['typeNode_link',['http://atria-soft.github.io/etk/namespaceetk.html#a99c2dd948d6da85ed816fa0c267862e8a73f8fdd1c9f08183be017f372935cf14',1,'etk']]],
['typenode_5fsocket',['typeNode_socket',['http://atria-soft.github.io/etk/namespaceetk.html#a99c2dd948d6da85ed816fa0c267862e8a9b46f1f9d230b9490b2c17af379c61bc',1,'etk']]],
['typenode_5funknow',['typeNode_unknow',['http://atria-soft.github.io/etk/namespaceetk.html#a99c2dd948d6da85ed816fa0c267862e8a4c85a6b7dccfd424a20b383e5dbe63bf',1,'etk']]],
['types_2ehpp',['types.hpp',['http://atria-soft.github.io/etk/types__8hpp.html',1,'(Global Namespace)'],['http://musicdsp.github.io/audio/types__8hpp.html',1,'(Global Namespace)']]]
];

26
search/all_12.html Normal file
View File

@ -0,0 +1,26 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.8.12"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_12.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
createResults();
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

8
search/all_12.js Normal file
View File

@ -0,0 +1,8 @@
var searchData=
[
['u32char',['u32char',['http://atria-soft.github.io/etk/namespaceu32char.html',1,'']]],
['unknow',['unknow',['http://atria-soft.github.io/ejson/namespaceejson.html#a6a37b3ae20a2b7bc207b268ab1439709a5c940de9c166a32dc1f63d9dafc6822f',1,'ejson']]],
['unsetloginfile',['unsetLogInFile',['http://atria-soft.github.io/elog/namespaceelog.html#a496120feb0c59449a46057559c6c8a1a',1,'elog']]],
['usecount',['useCount',['http://atria-soft.github.io/ememory/classememory_1_1_shared_ptr.html#a74070b8ebda543021108e0df4b1e825b',1,'ememory::SharedPtr::useCount()'],['http://atria-soft.github.io/ememory/classememory_1_1_weak_ptr.html#a41fa587a2ee7a4bddd76688b94133af3',1,'ememory::WeakPtr::useCount()']]],
['utf8',['utf8',['http://atria-soft.github.io/etk/namespaceutf8.html',1,'']]]
];

26
search/all_13.html Normal file
View File

@ -0,0 +1,26 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.8.12"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_13.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
createResults();
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

22
search/all_13.js Normal file
View File

@ -0,0 +1,22 @@
var searchData=
[
['value',['Value',['http://atria-soft.github.io/ejson/classejson_1_1_value.html',1,'ejson']]],
['value',['Value',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_value.html',1,'ejson::internal']]],
['value',['Value',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_value.html#a57471d92a92936793f1844e36d3b115a',1,'ejson::internal::Value::Value()'],['http://atria-soft.github.io/ejson/classejson_1_1_value.html#a0510ab7719ab2388f447f7b0c2972ff7',1,'ejson::Value::Value(const ememory::SharedPtr&lt; ejson::internal::Value &gt; &amp;_internalValue)'],['http://atria-soft.github.io/ejson/classejson_1_1_value.html#ad0eee5841f21b81556e93c28915ffbc1',1,'ejson::Value::Value()'],['http://atria-soft.github.io/ejson/namespaceejson.html#a6a37b3ae20a2b7bc207b268ab1439709a2063c1608d6e0baf80249c42e2be5804',1,'ejson::value()']]],
['value_2ehpp',['Value.hpp',['http://atria-soft.github.io/ejson/internal__2__value__8hpp.html',1,'(Global Namespace)'],['http://atria-soft.github.io/ejson/__value__8hpp.html',1,'(Global Namespace)']]],
['valueexist',['valueExist',['http://atria-soft.github.io/ejson/classejson_1_1_object.html#a5a8e982824bad7d0a0f28cfb9eff5a07',1,'ejson::Object']]],
['valuetype',['valueType',['http://atria-soft.github.io/ejson/namespaceejson.html#a6a37b3ae20a2b7bc207b268ab1439709',1,'ejson']]],
['valuetype_2ehpp',['valueType.hpp',['http://atria-soft.github.io/ejson/value__type__8hpp.html',1,'']]],
['vector2d',['Vector2D',['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html',1,'etk']]],
['vector2d',['Vector2D',['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a09b5e26eacb50a8059d0e0c65405eb82',1,'etk::Vector2D::Vector2D(T _xxx, T _yyy)'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#aaece962e3caa1d70afe0b1682ce8212e',1,'etk::Vector2D::Vector2D(const Vector2D&lt; double &gt; &amp;_obj)'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#acab36ec2f778107bc89f4e5c9463191b',1,'etk::Vector2D::Vector2D(const Vector2D&lt; float &gt; &amp;_obj)'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#ab07ef273334d86b96dd13a4ce4c19137',1,'etk::Vector2D::Vector2D(const Vector2D&lt; int32_t &gt; &amp;_obj)'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a187bb96fc68cb5d5dadc99f573674b98',1,'etk::Vector2D::Vector2D(const std::string &amp;_str)'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a09b5e26eacb50a8059d0e0c65405eb82',1,'Vector2D&lt; int32_t &gt;::Vector2D(int32_t _xxx, int32_t _yyy)'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#aaece962e3caa1d70afe0b1682ce8212e',1,'Vector2D&lt; int32_t &gt;::Vector2D(const Vector2D&lt; double &gt; &amp;_obj)'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#acab36ec2f778107bc89f4e5c9463191b',1,'Vector2D&lt; int32_t &gt;::Vector2D(const Vector2D&lt; float &gt; &amp;_obj)'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#ab07ef273334d86b96dd13a4ce4c19137',1,'Vector2D&lt; int32_t &gt;::Vector2D(const Vector2D&lt; int32_t &gt; &amp;_obj)'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a187bb96fc68cb5d5dadc99f573674b98',1,'Vector2D&lt; int32_t &gt;::Vector2D(const std::string &amp;_str)'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a09b5e26eacb50a8059d0e0c65405eb82',1,'Vector2D&lt; uint32_t &gt;::Vector2D(uint32_t _xxx, uint32_t _yyy)'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#aaece962e3caa1d70afe0b1682ce8212e',1,'Vector2D&lt; uint32_t &gt;::Vector2D(const Vector2D&lt; double &gt; &amp;_obj)'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#acab36ec2f778107bc89f4e5c9463191b',1,'Vector2D&lt; uint32_t &gt;::Vector2D(const Vector2D&lt; float &gt; &amp;_obj)'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#ab07ef273334d86b96dd13a4ce4c19137',1,'Vector2D&lt; uint32_t &gt;::Vector2D(const Vector2D&lt; int32_t &gt; &amp;_obj)'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a187bb96fc68cb5d5dadc99f573674b98',1,'Vector2D&lt; uint32_t &gt;::Vector2D(const std::string &amp;_str)']]],
['vector2d_2ehpp',['Vector2D.hpp',['http://atria-soft.github.io/etk/__vector2__d__8hpp.html',1,'']]],
['vector2d_3c_20int32_5ft_20_3e',['Vector2D&lt; int32_t &gt;',['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html',1,'']]],
['vector2d_3c_20uint32_5ft_20_3e',['Vector2D&lt; uint32_t &gt;',['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html',1,'']]],
['vector3d',['Vector3D',['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#a409169c1781cae5220b9f7bd078e05d9',1,'etk::Vector3D::Vector3D()'],['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#a7f5d02301a551e7f686092d7b9a5b269',1,'etk::Vector3D::Vector3D(const T &amp;_xxx, const T &amp;_yyy, const T &amp;_zzz)']]],
['vector3d',['Vector3D',['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html',1,'etk']]],
['vector3d_2ehpp',['Vector3D.hpp',['http://atria-soft.github.io/etk/__vector3__d__8hpp.html',1,'']]],
['vector4d',['Vector4D',['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html',1,'etk']]],
['vector4d',['Vector4D',['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html#a0e140dec4eca4f3695f19fb92dc3e1ae',1,'etk::Vector4D::Vector4D()'],['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html#a7a41fd47b438cc43849a2b2c0f308db2',1,'etk::Vector4D::Vector4D(const T &amp;_xxx, const T &amp;_yyy, const T &amp;_zzz, const T &amp;_www)']]],
['vector4d_2ehpp',['Vector4D.hpp',['http://atria-soft.github.io/etk/__vector4__d__8hpp.html',1,'']]],
['violet',['violet',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#ac86b1f752bb46992b83000f1b48957ec',1,'etk::color']]]
];

26
search/all_14.html Normal file
View File

@ -0,0 +1,26 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.8.12"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_14.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
createResults();
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

13
search/all_14.js Normal file
View File

@ -0,0 +1,13 @@
var searchData=
[
['write_20an_20json_20content',['Write an JSON content',['http://atria-soft.github.io/ejson/ejson_tutorial_write.html',1,'']]],
['w',['w',['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html#a0ede53650faf9183b87a3592e8be142d',1,'etk::Vector4D']]],
['wait',['wait',['http://atria-soft.github.io/etk/classetk_1_1_fifo.html#a0693f87b2886e553ccdafdac112ebbd5',1,'etk::Fifo::wait(MY_TYPE &amp;_data)'],['http://atria-soft.github.io/etk/classetk_1_1_fifo.html#aa08e5c57d91bc54ea08f377a6e2653e3',1,'etk::Fifo::wait(MY_TYPE &amp;_data, uint32_t _timeOutInUs)']]],
['weakfromthis',['weakFromThis',['http://atria-soft.github.io/ememory/classememory_1_1_enable_shared_from_this.html#aa2ce5703d70b211bae31fd40a5514c19',1,'ememory::EnableSharedFromThis::weakFromThis()'],['http://atria-soft.github.io/ememory/classememory_1_1_enable_shared_from_this.html#a6be22e13e06d0f679ff03c6ee817386f',1,'ememory::EnableSharedFromThis::weakFromThis() const']]],
['weakptr',['WeakPtr',['http://atria-soft.github.io/ememory/classememory_1_1_weak_ptr.html',1,'ememory']]],
['weakptr',['WeakPtr',['http://atria-soft.github.io/ememory/classememory_1_1_weak_ptr.html#a7ca8af1a20e2bce96d5c65ea1fd72ec1',1,'ememory::WeakPtr::WeakPtr()'],['http://atria-soft.github.io/ememory/classememory_1_1_weak_ptr.html#a1fb089b0b5bd76e33bf54d32cd3bb369',1,'ememory::WeakPtr::WeakPtr(std::nullptr_t)'],['http://atria-soft.github.io/ememory/classememory_1_1_weak_ptr.html#adb31ca52a0b8dfe8c876a9fd297eca83',1,'ememory::WeakPtr::WeakPtr(const WeakPtr&lt; EMEMORY_TYPE &gt; &amp;_obj)'],['http://atria-soft.github.io/ememory/classememory_1_1_weak_ptr.html#adbfcc73329e43b1e37fd8b19220d752e',1,'ememory::WeakPtr::WeakPtr(WeakPtr &amp;&amp;_obj)'],['http://atria-soft.github.io/ememory/classememory_1_1_weak_ptr.html#a3a30b756ccdc34bf96a4c7e2e4fb87c4',1,'ememory::WeakPtr::WeakPtr(const SharedPtr&lt; EMEMORY_TYPE &gt; &amp;_obj)'],['http://atria-soft.github.io/ememory/classememory_1_1_weak_ptr.html#a9233c621eaf744a4b6d3f53afb77f33f',1,'ememory::WeakPtr::WeakPtr(const SharedPtr&lt; EMEMORY_TYPE2 &gt; &amp;_obj)']]],
['weakptr_2ehpp',['WeakPtr.hpp',['http://atria-soft.github.io/ememory/__weak__ptr__8hpp.html',1,'']]],
['wheat',['wheat',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a0fee5d2cd67adc3c4a5d820616854cde',1,'etk::color']]],
['white',['white',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a6559ba632982f84ab6215281bd431b9c',1,'etk::color']]],
['whitesmoke',['whiteSmoke',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a1b012cf56fb3a1c63e55aa2d83f7472b',1,'etk::color']]]
];

26
search/all_15.html Normal file
View File

@ -0,0 +1,26 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.8.12"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_15.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
createResults();
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

4
search/all_15.js Normal file
View File

@ -0,0 +1,4 @@
var searchData=
[
['x',['x',['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a8409de5d430e5cdcb7326aee94176873',1,'etk::Vector2D::x()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a8409de5d430e5cdcb7326aee94176873',1,'Vector2D&lt; int32_t &gt;::x()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a8409de5d430e5cdcb7326aee94176873',1,'Vector2D&lt; uint32_t &gt;::x()'],['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#af2bda50fefea08fb49c04b15a61bcb6a',1,'etk::Vector3D::x()'],['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html#a98cef087b46916c257dc7b7e39230e74',1,'etk::Vector4D::x()']]]
];

26
search/all_16.html Normal file
View File

@ -0,0 +1,26 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.8.12"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_16.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
createResults();
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

6
search/all_16.js Normal file
View File

@ -0,0 +1,6 @@
var searchData=
[
['y',['y',['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#abc8a9a46cb0bf2c32916bfa3a35dfb22',1,'etk::Vector2D::y()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#abc8a9a46cb0bf2c32916bfa3a35dfb22',1,'Vector2D&lt; int32_t &gt;::y()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#abc8a9a46cb0bf2c32916bfa3a35dfb22',1,'Vector2D&lt; uint32_t &gt;::y()'],['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#ad949b7843b6212277927f0b973ef502b',1,'etk::Vector3D::y()'],['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html#a5c604a37b7503594d4b69d286751b12d',1,'etk::Vector4D::y()']]],
['yellow',['yellow',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a002d237cb06c35ec373b454af2cbb072',1,'etk::color']]],
['yellowgreen',['yellowGreen',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a88244e18c7bcefe71c7f9fbca047125b',1,'etk::color']]]
];

26
search/all_17.html Normal file
View File

@ -0,0 +1,26 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.8.12"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_17.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
createResults();
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

7
search/all_17.js Normal file
View File

@ -0,0 +1,7 @@
var searchData=
[
['z',['z',['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#a4d5e3071c66297840c6a857e580aaabd',1,'etk::Vector3D::z()'],['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html#a5b42d456747b68c7ab1da8cfdbc38dfc',1,'etk::Vector4D::z()']]],
['zip',['Zip',['http://atria-soft.github.io/etk/classetk_1_1archive_1_1_zip.html#afb44ec0e03903534beeaa51bd562acda',1,'etk::archive::Zip']]],
['zip',['Zip',['http://atria-soft.github.io/etk/classetk_1_1archive_1_1_zip.html',1,'etk::archive']]],
['zip_2ehpp',['Zip.hpp',['http://atria-soft.github.io/etk/__zip__8hpp.html',1,'']]]
];

26
search/all_18.html Normal file
View File

@ -0,0 +1,26 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.8.12"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_18.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
createResults();
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

14
search/all_18.js Normal file
View File

@ -0,0 +1,14 @@
var searchData=
[
['_7earchive',['~Archive',['http://atria-soft.github.io/etk/classetk_1_1_archive.html#a712ccb41b94c3d96fa7be82e13d10ee2',1,'etk::Archive']]],
['_7ecounter',['~Counter',['http://atria-soft.github.io/ememory/classememory_1_1_counter.html#a52762694b79f68cfb77022e6e6907d96',1,'ememory::Counter']]],
['_7eenablesharedfromthis',['~EnableSharedFromThis',['http://atria-soft.github.io/ememory/classememory_1_1_enable_shared_from_this.html#ae088de759baf528291c446cc48fd5ed1',1,'ememory::EnableSharedFromThis']]],
['_7efifo',['~Fifo',['http://atria-soft.github.io/etk/classetk_1_1_fifo.html#ae3aa50d02d2a5099ead2dcd2bda984ec',1,'etk::Fifo']]],
['_7efsnode',['~FSNode',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#aa15899502c51cbf37ffc6f7284f3535b',1,'etk::FSNode']]],
['_7ehash',['~Hash',['http://atria-soft.github.io/etk/classetk_1_1_hash.html#ac2b71e6597e028b28272391e3e951474',1,'etk::Hash']]],
['_7eiterator',['~iterator',['http://atria-soft.github.io/etk/classutf8_1_1iterator.html#a4de42494301339b944f846b649504f4f',1,'utf8::iterator']]],
['_7ematrix',['~Matrix',['http://atria-soft.github.io/etk/classetk_1_1_matrix.html#a8ae71a3749309ebea595c9619d28878e',1,'etk::Matrix']]],
['_7esharedptr',['~SharedPtr',['http://atria-soft.github.io/ememory/classememory_1_1_shared_ptr.html#a11e3f0079bc15778cec63fc378c10c9d',1,'ememory::SharedPtr']]],
['_7evalue',['~Value',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_value.html#aa2e223aeec554cb43556c2ad088d7283',1,'ejson::internal::Value::~Value()'],['http://atria-soft.github.io/ejson/classejson_1_1_value.html#a60852cacc23fd9b08177da5084ade12e',1,'ejson::Value::~Value()']]],
['_7ezip',['~Zip',['http://atria-soft.github.io/etk/classetk_1_1archive_1_1_zip.html#a79fff570b3ccbee5ffe3d0f85b5c7b24',1,'etk::archive::Zip']]]
];

26
search/all_2.html Normal file
View File

@ -0,0 +1,26 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.8.12"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_2.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
createResults();
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

63
search/all_2.js Normal file
View File

@ -0,0 +1,63 @@
var searchData=
[
['cadetblue',['cadetBlue',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#aa007b1fd1b17e1872fbc6f41e147f54f',1,'etk::color']]],
['calculateintercept',['calculateIntercept',['http://atria-soft.github.io/etk/classetk_1_1_plane.html#a6b0377c24a6b076de9fe112400724523',1,'etk::Plane']]],
['callbacklog',['callbackLog',['http://atria-soft.github.io/elog/namespaceelog.html#a2f5d781d79bd79fcda8b94a212bcbbde',1,'elog']]],
['carrierreturn',['CarrierReturn',['http://atria-soft.github.io/etk/namespaceu32char.html#a65eaeefb77c1b694f336eedda60c30af',1,'u32char']]],
['changeorder',['changeOrder',['http://atria-soft.github.io/etk/namespaceu32char.html#a7d8866bc81b174c81df61536be36e7ef',1,'u32char']]],
['channel',['channel',['http://musicdsp.github.io/audio/namespaceaudio.html#adbb926ec8e7386ccca84761c81dee108',1,'audio']]],
['channel_2ehpp',['channel.hpp',['http://musicdsp.github.io/audio/channel__8hpp.html',1,'']]],
['channel_5fcenterleft',['channel_centerLeft',['http://musicdsp.github.io/audio/namespaceaudio.html#adbb926ec8e7386ccca84761c81dee108ae268066b280a3086d8c2294f61275a96',1,'audio']]],
['channel_5fcenterright',['channel_centerRight',['http://musicdsp.github.io/audio/namespaceaudio.html#adbb926ec8e7386ccca84761c81dee108a5918371320b774bc6aa860bc2b12fd16',1,'audio']]],
['channel_5ffrontcenter',['channel_frontCenter',['http://musicdsp.github.io/audio/namespaceaudio.html#adbb926ec8e7386ccca84761c81dee108aea18fbc48b38ab10669dc5bda9bf9491',1,'audio']]],
['channel_5ffrontleft',['channel_frontLeft',['http://musicdsp.github.io/audio/namespaceaudio.html#adbb926ec8e7386ccca84761c81dee108a6562e2a8f82d1ba9811d8140b7e414e4',1,'audio']]],
['channel_5ffrontright',['channel_frontRight',['http://musicdsp.github.io/audio/namespaceaudio.html#adbb926ec8e7386ccca84761c81dee108a35dd902be5e44a1a221a88b69a0d8146',1,'audio']]],
['channel_5flfe',['channel_lfe',['http://musicdsp.github.io/audio/namespaceaudio.html#adbb926ec8e7386ccca84761c81dee108a69071f352585328311ec72dd2fe379e0',1,'audio']]],
['channel_5frearcenter',['channel_rearCenter',['http://musicdsp.github.io/audio/namespaceaudio.html#adbb926ec8e7386ccca84761c81dee108ab7d27550b8b9b45759efb9be53ea29f1',1,'audio']]],
['channel_5frearleft',['channel_rearLeft',['http://musicdsp.github.io/audio/namespaceaudio.html#adbb926ec8e7386ccca84761c81dee108a38a7b80a5a501832db551e4c125c02e2',1,'audio']]],
['channel_5frearright',['channel_rearRight',['http://musicdsp.github.io/audio/namespaceaudio.html#adbb926ec8e7386ccca84761c81dee108a190721a0d06efba2b2652432a6579304',1,'audio']]],
['channel_5ftopcenterleft',['channel_topCenterLeft',['http://musicdsp.github.io/audio/namespaceaudio.html#adbb926ec8e7386ccca84761c81dee108a1e15abcd1506642715fb22e782d42144',1,'audio']]],
['channel_5ftopcenterright',['channel_topCenterRight',['http://musicdsp.github.io/audio/namespaceaudio.html#adbb926ec8e7386ccca84761c81dee108a34576a9879009550465c2e1f1b31424a',1,'audio']]],
['channel_5ftopfrontcenter',['channel_topFrontCenter',['http://musicdsp.github.io/audio/namespaceaudio.html#adbb926ec8e7386ccca84761c81dee108a2fe081b16bc2d60a37c69710726e0dab',1,'audio']]],
['channel_5ftopfrontleft',['channel_topFrontLeft',['http://musicdsp.github.io/audio/namespaceaudio.html#adbb926ec8e7386ccca84761c81dee108ada5c652fe67eff25745be19bc93e5291',1,'audio']]],
['channel_5ftopfrontright',['channel_topFrontRight',['http://musicdsp.github.io/audio/namespaceaudio.html#adbb926ec8e7386ccca84761c81dee108a3339393250b6745aa5632fb9835a2df0',1,'audio']]],
['channel_5ftoprearcenter',['channel_topRearCenter',['http://musicdsp.github.io/audio/namespaceaudio.html#adbb926ec8e7386ccca84761c81dee108abb811e1091bf90b7cc3659bd374a3b6d',1,'audio']]],
['channel_5ftoprearleft',['channel_topRearLeft',['http://musicdsp.github.io/audio/namespaceaudio.html#adbb926ec8e7386ccca84761c81dee108ad368a68e8c79d7627889887d03463e48',1,'audio']]],
['channel_5ftoprearright',['channel_topRearRight',['http://musicdsp.github.io/audio/namespaceaudio.html#adbb926ec8e7386ccca84761c81dee108af3c37db7a8b58063dd6d8eb9be9664d2',1,'audio']]],
['channel_5funknow',['channel_unknow',['http://musicdsp.github.io/audio/namespaceaudio.html#adbb926ec8e7386ccca84761c81dee108a66f6bf970a8dce2cb06bb1cebc89877c',1,'audio']]],
['chartreuse',['chartreuse',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a2dd91ed503e594efb3fbfef33e358066',1,'etk::color']]],
['check',['check',['http://atria-soft.github.io/ejson/classejson_1_1_file_pos.html#aff7c1fe351fa4470ed728855cc475876',1,'ejson::FilePos']]],
['checknumber',['checkNumber',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_value.html#a02d9bd053052d3fbf4584cfbf1f3c6af',1,'ejson::internal::Value']]],
['checkstring',['checkString',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_value.html#a77c5482f290628b7ed94ffcc683cb86f',1,'ejson::internal::Value']]],
['chocolate',['chocolate',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a7c01526863636486a43270680bc60002',1,'etk::color']]],
['clean',['clean',['http://atria-soft.github.io/etk/classetk_1_1_fifo.html#af8d5cb46bcba3868e9e858a79d3e22cc',1,'etk::Fifo']]],
['clear',['clear',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node_right.html#ac09674009a8d2895eee2ead5d93e94db',1,'etk::FSNodeRight::clear()'],['http://atria-soft.github.io/etk/classetk_1_1_hash.html#a4e8eb6f69743a44f53aa483acb770dbc',1,'etk::Hash::clear()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_array.html#a27831faf9d5097224f3c3772d6ea7051',1,'ejson::internal::Array::clear()'],['http://atria-soft.github.io/ejson/classejson_1_1_file_pos.html#a835d7c2e94175a6a8d3de5a40ffacf8a',1,'ejson::FilePos::clear()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_object.html#aa8ac667f4da778fd7a71ca9a46f1a6c7',1,'ejson::internal::Object::clear()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_value.html#a823694a1d241579fc77fc86f46ae303f',1,'ejson::internal::Value::clear()'],['http://atria-soft.github.io/ejson/classejson_1_1_value.html#a3ce2ef5d17d859a51d4146f8ec097fcb',1,'ejson::Value::clear()']]],
['clearlowertriangle',['clearLowerTriangle',['http://atria-soft.github.io/etk/namespaceetk.html#a80d4500245f02806cf3397656ed18bb8',1,'etk']]],
['clearuppertriangle',['clearUpperTriangle',['http://atria-soft.github.io/etk/classetk_1_1_matrix.html#a56e65b58426a503e0f55274d813fc307',1,'etk::Matrix']]],
['clone',['clone',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_array.html#a50162f4a4f6d101360fe8820953b4e9c',1,'ejson::internal::Array::clone()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_boolean.html#a63b20c27665d74103bdb423c2eeeb6ef',1,'ejson::internal::Boolean::clone()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_null.html#a2cbb1f91f4017a9d9c14b1f8eef16fd9',1,'ejson::internal::Null::clone()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_number.html#a46f841d68d34ef99e4b7052fee1e252d',1,'ejson::internal::Number::clone()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_object.html#a0d19856586aec3d128b8101f1492f5d8',1,'ejson::internal::Object::clone()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_string.html#a904e38c735f77b7b1e04fe9a4f002ce7',1,'ejson::internal::String::clone()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_value.html#a8932ef5494a96537ec16e1b5768786a3',1,'ejson::internal::Value::clone()'],['http://atria-soft.github.io/ejson/classejson_1_1_value.html#af66856fee747c1ee0522c4ddc4a1cb6c',1,'ejson::Value::clone()']]],
['clonein',['cloneIn',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_object.html#af95fec9bdbf1bcb64c11dcdd52789723',1,'ejson::internal::Object']]],
['cloneobj',['cloneObj',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_object.html#a713d7172fb0d1aa0285362345203de0d',1,'ejson::internal::Object']]],
['close',['close',['http://atria-soft.github.io/etk/classetk_1_1_archive.html#abda6becefeae5944d4001900d3231475',1,'etk::Archive']]],
['closestaxis',['closestAxis',['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a4dba6f746de3907deb78b25c4f2d95c5',1,'etk::Vector2D::closestAxis()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a4dba6f746de3907deb78b25c4f2d95c5',1,'Vector2D&lt; int32_t &gt;::closestAxis()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a4dba6f746de3907deb78b25c4f2d95c5',1,'Vector2D&lt; uint32_t &gt;::closestAxis()'],['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#a2ea56b698bff0a7286783a170bdd9557',1,'etk::Vector3D::closestAxis()']]],
['cofactor',['coFactor',['http://atria-soft.github.io/etk/classetk_1_1_matrix4.html#a0679dea1b04a02692629b6f4476dc2d9',1,'etk::Matrix4']]],
['color',['Color',['http://atria-soft.github.io/etk/classetk_1_1_color.html#a8acf9a5b142e45e8af4ac04b4d5f6212',1,'etk::Color::Color()'],['http://atria-soft.github.io/etk/classetk_1_1_color.html#af6331b1c9e5bf9c3360dfd37abf9aeaa',1,'etk::Color::Color(MY_TYPE _r, MY_TYPE _g, MY_TYPE _b, MY_TYPE _a)'],['http://atria-soft.github.io/etk/classetk_1_1_color.html#a1859a0fad4cfa6c16c1847b0c33ecadc',1,'etk::Color::Color(MY_TYPE _r, MY_TYPE _g, MY_TYPE _b)'],['http://atria-soft.github.io/etk/classetk_1_1_color.html#ae6dfc8f1d5c36d13dbd718786064d59d',1,'etk::Color::Color(MY_TYPE _r, MY_TYPE _g)'],['http://atria-soft.github.io/etk/classetk_1_1_color.html#af4af55e64692adf0d54c21cc01fdf41d',1,'etk::Color::Color(MY_TYPE _r)'],['http://atria-soft.github.io/etk/classetk_1_1_color.html#a9ec115f5d92b4266e44ef22640aa7961',1,'etk::Color::Color(const etk::Color&lt; MY_TYPE_2, MY_TYPE_SIZE_2 &gt; &amp;_obj)'],['http://atria-soft.github.io/etk/classetk_1_1_color.html#a76b3a50c125dd0f64632ec33790a7506',1,'etk::Color::Color(const std::string &amp;_input)']]],
['color',['Color',['http://atria-soft.github.io/etk/classetk_1_1_color.html',1,'etk']]],
['color_2ehpp',['Color.hpp',['http://atria-soft.github.io/etk/__color__8hpp.html',1,'']]],
['constpointercast',['constPointerCast',['http://atria-soft.github.io/ememory/namespaceememory.html#aef6978a02a7c6c83cf5913c45271ae16',1,'ememory']]],
['convertchar32',['convertChar32',['http://atria-soft.github.io/etk/namespaceutf8.html#ab857b45e0371b7d83a4de8d9e86133fd',1,'utf8']]],
['convertutf8',['convertUtf8',['http://atria-soft.github.io/etk/namespaceu32char.html#a9eca2aab7a201251a465410688226a81',1,'u32char']]],
['convolution',['convolution',['http://atria-soft.github.io/etk/classetk_1_1_matrix.html#a1c77336ae8faf6fd48c7573d46a74533',1,'etk::Matrix']]],
['coral',['coral',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a36f2cec268c7c0e30723ac23f9b3f277',1,'etk::color']]],
['cornflowerblue',['cornflowerBlue',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a90a5242512b4e294b4a660317609f80a',1,'etk::color']]],
['cornsilk',['cornsilk',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a253d987094e83f3d979dd8fe216297be',1,'etk::color']]],
['count',['count',['http://atria-soft.github.io/etk/classetk_1_1_fifo.html#a7d43270207b6da91d535a520e18f49c7',1,'etk::Fifo']]],
['counter',['counter',['http://atria-soft.github.io/ememory/classememory_1_1_counter.html#a1614d672880eb19b18a98ea9babe723ea886bb73b3156b0aa24aac99d2de0b238',1,'ememory::Counter::counter()'],['http://atria-soft.github.io/ememory/classememory_1_1_counter.html#a7424b792a2e2b05b228f8e02a10eb9d6',1,'ememory::Counter::Counter(bool _fromWeak=false)']]],
['counter',['Counter',['http://atria-soft.github.io/ememory/classememory_1_1_counter.html',1,'ememory']]],
['counter_2ehpp',['Counter.hpp',['http://atria-soft.github.io/ememory/__counter__8hpp.html',1,'']]],
['countwhitechar',['countWhiteChar',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_value.html#aea1b708581f9055dec94efb2a4c243aa',1,'ejson::internal::Value']]],
['create',['create',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_array.html#a53c2f62e0e6cf35b596e9df8074078cf',1,'ejson::internal::Array::create()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_boolean.html#aa30ca46b99ee7f5fc8ecfceb11ed1480',1,'ejson::internal::Boolean::create()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_document.html#a362dc43908dc7e5845b72b24fc392518',1,'ejson::internal::Document::create()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_null.html#a120ccdf92ea62f42d8b220404b210636',1,'ejson::internal::Null::create()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_number.html#a70e44c0fc76f6e1e56480f289cdeffca',1,'ejson::internal::Number::create()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_object.html#aa104cd6df456659f510286d5eecce2ad',1,'ejson::internal::Object::create()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_object.html#ad9efead49cb8fcd0fac291c12b39ae3d',1,'ejson::internal::Object::create(const std::string &amp;_data)'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_string.html#a602817bbc7e8c1ade7d5064447203202',1,'ejson::internal::String::create()']]],
['createerror',['createError',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_document.html#a243fe9b55b31a483edb28630d38a1530',1,'ejson::internal::Document']]],
['crimson',['crimson',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#aa29d7ec12725a55399cfbee0fab1d74e',1,'etk::color']]],
['cross',['cross',['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a06e32e1abb9d69f3338302254eab61dc',1,'etk::Vector2D::cross()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a06e32e1abb9d69f3338302254eab61dc',1,'Vector2D&lt; int32_t &gt;::cross()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a06e32e1abb9d69f3338302254eab61dc',1,'Vector2D&lt; uint32_t &gt;::cross()'],['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#a0ac0f11a99ebb6b45605da1d373c4bbd',1,'etk::Vector3D::cross()']]],
['cyan',['cyan',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#acc0367018e04ae83f0282525443f2c39',1,'etk::color']]]
];

26
search/all_3.html Normal file
View File

@ -0,0 +1,26 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.8.12"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_3.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
createResults();
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

50
search/all_3.js Normal file
View File

@ -0,0 +1,50 @@
var searchData=
[
['darkblue',['darkBlue',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a222350bf918f872c4e5ff2c44ab0d948',1,'etk::color']]],
['darkcyan',['darkCyan',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a1e2298ea2e2329a2eec98014ad2f62f3',1,'etk::color']]],
['darkgoldenrod',['darkGoldenRod',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#aa8fc1bb410a59107158dc78cbff58637',1,'etk::color']]],
['darkgray',['darkGray',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a443370c666ff111e46fd69af0fc8c6f1',1,'etk::color']]],
['darkgreen',['darkGreen',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#ab2c305fa2794088b6518e7d41b5a66cf',1,'etk::color']]],
['darkgrey',['darkGrey',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#acc4d6ece51b12c4d71944c7cfa62df3d',1,'etk::color']]],
['darkkhaki',['darkKhaki',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a41b7e12409c7c23d2efd5b2002ff8a38',1,'etk::color']]],
['darkmagenta',['darkMagenta',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a5967702d70d066cc22d0582816506960',1,'etk::color']]],
['darkolivegreen',['darkOliveGreen',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#af8658803a964bae9b55b136f17349fb9',1,'etk::color']]],
['darkorange',['darkorange',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a7064c68a6a6025e00ce163a1ae89f1ea',1,'etk::color']]],
['darkorchid',['darkOrchid',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a1d7683e234cce9679495ba626cdbd63b',1,'etk::color']]],
['darkred',['darkRed',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#aff3a3b7299b13dfb18983bf5590ba95a',1,'etk::color']]],
['darksalmon',['darkSalmon',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a907915b5995bce96b1edce13c9e2fdf7',1,'etk::color']]],
['darkseagreen',['darkSeaGreen',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a59822524863f5783ee051ad10375892f',1,'etk::color']]],
['darkslateblue',['darkSlateBlue',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a26484af8b6c58f221f1849b87f3bee74',1,'etk::color']]],
['darkslategray',['darkSlateGray',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a349b3fd1e93f89e01bd862981d02196b',1,'etk::color']]],
['darkslategrey',['darkSlateGrey',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a50f19e66e3c3a0af908b5c1efd2abc84',1,'etk::color']]],
['darkturquoise',['darkTurquoise',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a05e713dcb0b2f4febdbcf35450b841fd',1,'etk::color']]],
['darkviolet',['darkViolet',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a9e56b9239824d0b5936d5cff3b60231b',1,'etk::color']]],
['data',['data',['http://atria-soft.github.io/etk/classetk_1_1_archive_content.html#a1d1dd0c1c1956fad8ab3884bb85723c4',1,'etk::ArchiveContent::data()'],['http://atria-soft.github.io/ememory/classememory_1_1_counter.html#a1614d672880eb19b18a98ea9babe723ea8d777f385d3dfec8815d20f7496026dc',1,'ememory::Counter::data()']]],
['decreaseref',['decreaseRef',['http://atria-soft.github.io/etk/classetk_1_1_archive_content.html#a3835539a563d971425a4dfe3beb06e05',1,'etk::ArchiveContent']]],
['decrementshared',['decrementShared',['http://atria-soft.github.io/ememory/classememory_1_1_counter.html#aa28cf4efdddded41d259fa7d3233bf00',1,'ememory::Counter']]],
['decrementweak',['decrementWeak',['http://atria-soft.github.io/ememory/classememory_1_1_counter.html#a7b73b5b5d15ffe2494ff84beca813bd4',1,'ememory::Counter']]],
['deeppink',['deepPink',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#aad22e4d8159516802b60b3993b35310d',1,'etk::color']]],
['deepskyblue',['deepSkyBlue',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a20b4f50841f1edc88b8ebd09764d22ec',1,'etk::color']]],
['defaultalpha',['defaultAlpha',['http://atria-soft.github.io/etk/classetk_1_1_color.html#a07823a4af1948cc0c2a80947c634100b',1,'etk::Color']]],
['degreetoradian',['degreeToRadian',['http://atria-soft.github.io/etk/namespaceetk.html#aae0bc3aae3180e4cc444264c2b39a9bd',1,'etk']]],
['delete',['Delete',['http://atria-soft.github.io/etk/namespaceu32char.html#a55bf46c0555440472df720e2e3b553bf',1,'u32char']]],
['determinant',['determinant',['http://atria-soft.github.io/etk/classetk_1_1_matrix2.html#a6fa058e133e38985460b0a269a9e125e',1,'etk::Matrix2::determinant()'],['http://atria-soft.github.io/etk/classetk_1_1_matrix4.html#a17e00a9267a06fca1f68e3782fb07477',1,'etk::Matrix4::determinant()']]],
['dimgray',['dimGray',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a9c3f19c27817d52a7dce663597809673',1,'etk::color']]],
['dimgrey',['dimGrey',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a1b9159ca54b27a2eb3aef2787cc3f8a4',1,'etk::color']]],
['display',['display',['http://atria-soft.github.io/etk/classetk_1_1_archive.html#a8bc198e2fda3b1bfe3176ec315e22441',1,'etk::Archive::display()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_value.html#adc50a4545b76e6e6401b6d214dd4bf56',1,'ejson::internal::Value::display()'],['http://atria-soft.github.io/ejson/classejson_1_1_value.html#af897c339ede19f822dac984575d4db50',1,'ejson::Value::display()']]],
['displaybacktrace',['displayBacktrace',['http://atria-soft.github.io/elog/namespaceelog.html#aaa54d31e61733c3ed433fe18b7be4dfa',1,'elog']]],
['displayerror',['displayError',['http://atria-soft.github.io/ejson/classejson_1_1_document.html#a711c39506be33863700750cf3bd08f13',1,'ejson::Document::displayError()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_document.html#a7cc17fd00e2c685320e30c25be47632c',1,'ejson::internal::Document::displayError()']]],
['distance',['distance',['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a5bd1fcc61cc48bc939ba3c05df4b1ab6',1,'etk::Vector2D::distance()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a5bd1fcc61cc48bc939ba3c05df4b1ab6',1,'Vector2D&lt; int32_t &gt;::distance()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a5bd1fcc61cc48bc939ba3c05df4b1ab6',1,'Vector2D&lt; uint32_t &gt;::distance()'],['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#ad99c7c9a49d1c31b52208147ebcf282e',1,'etk::Vector3D::distance()'],['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html#af68bc268b306c2ac6f4f7ad39667dfda',1,'etk::Vector4D::distance()']]],
['distance2',['distance2',['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#ada692f4964568b552ab915cac0c76253',1,'etk::Vector2D::distance2()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#ada692f4964568b552ab915cac0c76253',1,'Vector2D&lt; int32_t &gt;::distance2()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#ada692f4964568b552ab915cac0c76253',1,'Vector2D&lt; uint32_t &gt;::distance2()'],['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#acddb633c1793ef7b937ce466cae0e6aa',1,'etk::Vector3D::distance2()'],['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html#a2fad2e152362f4d34ea6aa732af1aa5b',1,'etk::Vector4D::distance2()']]],
['document',['Document',['http://atria-soft.github.io/ejson/classejson_1_1_document.html#ad0a4d50152a6001fccac6135c8748802',1,'ejson::Document::Document(ememory::SharedPtr&lt; ejson::internal::Value &gt; _internalValue)'],['http://atria-soft.github.io/ejson/classejson_1_1_document.html#ad4759d3d24556cbb214d59d93ca17b69',1,'ejson::Document::Document(const ejson::Document &amp;_obj)'],['http://atria-soft.github.io/ejson/classejson_1_1_document.html#a67b503c2bfdf8d55a14932976ec4bc32',1,'ejson::Document::Document()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_document.html#a82822eeeee309ae90e52ebc6bba99d58',1,'ejson::internal::Document::Document()'],['http://atria-soft.github.io/ejson/namespaceejson.html#a6a37b3ae20a2b7bc207b268ab1439709afdc3bdefb79cec8eb8211d2499e04704',1,'ejson::document()']]],
['document',['Document',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_document.html',1,'ejson::internal']]],
['document',['Document',['http://atria-soft.github.io/ejson/classejson_1_1_document.html',1,'ejson']]],
['document_2ehpp',['Document.hpp',['http://atria-soft.github.io/ejson/__document__8hpp.html',1,'(Global Namespace)'],['http://atria-soft.github.io/ejson/internal__2__document__8hpp.html',1,'(Global Namespace)']]],
['dodgerblue',['dodgerBlue',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#abded21fe482e526e290b0699c55c1d8d',1,'etk::color']]],
['dot',['dot',['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#aeeac6eb537be0d5017ded4a62cc33b34',1,'etk::Vector2D::dot()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#aeeac6eb537be0d5017ded4a62cc33b34',1,'Vector2D&lt; int32_t &gt;::dot()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#aeeac6eb537be0d5017ded4a62cc33b34',1,'Vector2D&lt; uint32_t &gt;::dot()'],['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#ae24ac042b5e2878119cfb6e321daf3bc',1,'etk::Vector3D::dot()'],['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html#a54f86ba2bdb634b1c5d6fe1f3cd4846d',1,'etk::Vector4D::dot()']]],
['double_5ft',['double_t',['http://musicdsp.github.io/audio/classaudio_1_1double__t.html',1,'audio']]],
['double_5ft_2ehpp',['double_t.hpp',['http://musicdsp.github.io/audio/double____t__8hpp.html',1,'']]],
['drawelementparsed',['drawElementParsed',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_value.html#a29acde0ca78e97c8b12d6e9e74c5e168',1,'ejson::internal::Value']]],
['duration_2ehpp',['Duration.hpp',['http://musicdsp.github.io/audio/__duration__8hpp.html',1,'']]],
['dynamicpointercast',['dynamicPointerCast',['http://atria-soft.github.io/ememory/namespaceememory.html#a0bfb664a1fcc7defd9aa5c8534d33af7',1,'ememory::dynamicPointerCast(ememory::SharedPtr&lt; EMEMORY_TYPE &gt; &amp;_obj)'],['http://atria-soft.github.io/ememory/namespaceememory.html#a5bce20cf9275c6e3f29e6bdb72f1ad97',1,'ememory::dynamicPointerCast(const ememory::SharedPtr&lt; EMEMORY_TYPE &gt; &amp;_obj)']]]
];

26
search/all_4.html Normal file
View File

@ -0,0 +1,26 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.8.12"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_4.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
createResults();
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

27
search/all_4.js Normal file
View File

@ -0,0 +1,27 @@
var searchData=
[
['archive',['archive',['http://atria-soft.github.io/etk/namespaceetk_1_1archive.html',1,'etk']]],
['color',['color',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html',1,'etk']]],
['ejson',['ejson',['http://atria-soft.github.io/ejson/namespaceejson.html',1,'']]],
['ejson_2ehpp',['ejson.hpp',['http://atria-soft.github.io/ejson/ejson__8hpp.html',1,'']]],
['elog',['elog',['http://atria-soft.github.io/elog/namespaceelog.html',1,'']]],
['elog_2ehpp',['elog.hpp',['http://atria-soft.github.io/elog/elog__8hpp.html',1,'']]],
['elog_20tutorial_3a_20add_20some_20log_20_28using_29',['Elog Tutorial: Add some Log (using)',['http://atria-soft.github.io/elog/elog_tutorial_01.html',1,'']]],
['elog_20tutorial_3a_20runtime_20use',['Elog Tutorial: Runtime use',['http://atria-soft.github.io/elog/elog_tutorial_02.html',1,'']]],
['elog_20tutorial_3a_20optionnal_20dependency',['Elog Tutorial: Optionnal dependency',['http://atria-soft.github.io/elog/elog_tutorial_03.html',1,'']]],
['ememory',['ememory',['http://atria-soft.github.io/ememory/namespaceememory.html',1,'']]],
['empty',['empty',['http://atria-soft.github.io/ejson/namespaceejson.html#ab64b51ff08fe0f8b8dd6d83b0a92c9bc',1,'ejson']]],
['emptycolor',['emptyColor',['http://atria-soft.github.io/etk/classetk_1_1_color.html#aa0a719b099664934ab1025ecd9a727e0',1,'etk::Color']]],
['enablesharedfromthis',['EnableSharedFromThis',['http://atria-soft.github.io/ememory/classememory_1_1_enable_shared_from_this.html#aa2c6f76ad44a25cd2c839853a308d5b1',1,'ememory::EnableSharedFromThis']]],
['enablesharedfromthis',['EnableSharedFromThis',['http://atria-soft.github.io/ememory/classememory_1_1_enable_shared_from_this.html',1,'ememory']]],
['enablesharedfromthis_2ehpp',['EnableSharedFromThis.hpp',['http://atria-soft.github.io/ememory/__enable__shared__from__this__8hpp.html',1,'']]],
['enablesharedfromthisbase',['EnableSharedFromThisBase',['http://atria-soft.github.io/ememory/classememory_1_1_enable_shared_from_this_base.html',1,'ememory']]],
['end',['end',['http://atria-soft.github.io/ejson/classejson_1_1_array.html#a28d8b49315832357cd8ed69355c23b08',1,'ejson::Array::end()'],['http://atria-soft.github.io/ejson/classejson_1_1_array.html#a8d65e9fb1d84bccad76b81d09962a445',1,'ejson::Array::end() const'],['http://atria-soft.github.io/ejson/classejson_1_1_object.html#a6efe7ce49560807f6c45aed82beb282f',1,'ejson::Object::end()'],['http://atria-soft.github.io/ejson/classejson_1_1_object.html#a25cb2d48d238e573a3b36ef77d80a2ed',1,'ejson::Object::end() const']]],
['escape',['Escape',['http://atria-soft.github.io/etk/namespaceu32char.html#aabc11b96eac4f8821aabf1e8c9b4e68b',1,'u32char']]],
['etk',['etk',['http://atria-soft.github.io/etk/namespaceetk.html',1,'']]],
['etk_2ehpp',['etk.hpp',['http://atria-soft.github.io/etk/etk__8hpp.html',1,'']]],
['exist',['exist',['http://atria-soft.github.io/etk/classetk_1_1_archive.html#aa1fd3f3a8733968d6babe29e5295f439',1,'etk::Archive::exist()'],['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#adbdbfccfea72e09573ef9fdeec20d0f7',1,'etk::FSNode::exist()'],['http://atria-soft.github.io/etk/classetk_1_1_hash.html#a159e9cd496432089fccb73e7eaea376f',1,'etk::Hash::exist()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_object.html#a62b94307e4a86534e2ef879a5dfc3eff',1,'ejson::internal::Object::exist()'],['http://atria-soft.github.io/ejson/classejson_1_1_value.html#a1395a9a11600c8d9d4c0025916d3cb2a',1,'ejson::Value::exist()']]],
['expired',['expired',['http://atria-soft.github.io/ememory/classememory_1_1_weak_ptr.html#a821cf7802a0d9e3b1574e920b8fdefeb',1,'ememory::WeakPtr']]],
['internal',['internal',['http://atria-soft.github.io/ejson/namespaceejson_1_1internal.html',1,'ejson']]],
['tool',['tool',['http://atria-soft.github.io/etk/namespaceetk_1_1tool.html',1,'etk']]]
];

26
search/all_5.html Normal file
View File

@ -0,0 +1,26 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.8.12"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_5.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
createResults();
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

96
search/all_5.js Normal file
View File

@ -0,0 +1,96 @@
var searchData=
[
['fifo',['Fifo',['http://atria-soft.github.io/etk/classetk_1_1_fifo.html',1,'etk']]],
['fifo',['Fifo',['http://atria-soft.github.io/etk/classetk_1_1_fifo.html#a37abc79759bdbfe9e28b273e600c59f0',1,'etk::Fifo']]],
['fifo_2ehpp',['Fifo.hpp',['http://atria-soft.github.io/etk/__fifo__8hpp.html',1,'']]],
['fileclose',['fileClose',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a5e9146d1e8984f05221d4dbaa1bcf9b7',1,'etk::FSNode']]],
['fileflush',['fileFlush',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a137d6ce15b480ae93926452ed9fdb970',1,'etk::FSNode']]],
['fileget',['fileGet',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a6c1977929df9d1a8c108de087c3ae876',1,'etk::FSNode']]],
['filegetextention',['fileGetExtention',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a468e51069edcaeb8fcc649610f0e4445',1,'etk::FSNode']]],
['filegets',['fileGets',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a39af4e62b1edb91776c9c60f5f6b1357',1,'etk::FSNode::fileGets(char *_elementLine, int64_t _maxData)'],['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a161b49d3946a503212753359211255f2',1,'etk::FSNode::fileGets(std::string &amp;_output)']]],
['filehasextention',['fileHasExtention',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a6f65abf3d418ab2144c18b3d3f620aba',1,'etk::FSNode']]],
['fileisopen',['fileIsOpen',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a66f7d8975d3f6a4c954681dd6ae3e02a',1,'etk::FSNode']]],
['fileopenappend',['fileOpenAppend',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a76e77058e7e2a031b57a0662d9333401',1,'etk::FSNode']]],
['fileopenread',['fileOpenRead',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#ac09fb616871d73603e419aa44bf9eacf',1,'etk::FSNode']]],
['fileopenwrite',['fileOpenWrite',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a68cf71c003e9ba37cace50e23870feaa',1,'etk::FSNode']]],
['filepos',['FilePos',['http://atria-soft.github.io/ejson/classejson_1_1_file_pos.html',1,'ejson']]],
['filepos',['FilePos',['http://atria-soft.github.io/ejson/classejson_1_1_file_pos.html#ad654116d07a6a29f49bcc6a42be5f718',1,'ejson::FilePos::FilePos()'],['http://atria-soft.github.io/ejson/classejson_1_1_file_pos.html#afd31dde1dedaa5f5590b944b32a15750',1,'ejson::FilePos::FilePos(size_t _line, size_t _col)']]],
['filepos_2ehpp',['FilePos.hpp',['http://atria-soft.github.io/ejson/__file__pos__8hpp.html',1,'']]],
['fileput',['filePut',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a4c7e5278cf6b163a1c8ec59c94dbe4db',1,'etk::FSNode']]],
['fileputs',['filePuts',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a0bc82fb7cb089dfbe4ed213b64fc64ab',1,'etk::FSNode']]],
['fileread',['fileRead',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a72bb0d5702cb0b43de5133cf238704d4',1,'etk::FSNode']]],
['filereadall',['fileReadAll',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#aab0646087feb6c821cf2756ce79f8702',1,'etk::FSNode']]],
['filereadallstring',['fileReadAllString',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a5e8940857bed1b5268cb77c48595168f',1,'etk::FSNode']]],
['fileseek',['fileSeek',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a6e1033278c99f839709175a77eeebeb5',1,'etk::FSNode']]],
['filesize',['fileSize',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a61e074f418b83b53c1b8ee5afd0cce61',1,'etk::FSNode']]],
['filetell',['fileTell',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a7bb2d304bc95da4a1016d61cd850cc5a',1,'etk::FSNode']]],
['filewrite',['fileWrite',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#aa3473eebff7ce59fc5bb5024b035d3e5',1,'etk::FSNode']]],
['filewriteall',['fileWriteAll',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#ab7861ffd14859cc39fb0b12ceebbcd10',1,'etk::FSNode::fileWriteAll(const std::vector&lt; T &gt; &amp;_value)'],['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#aa89ddb8a015833889bb9c1943647acad',1,'etk::FSNode::fileWriteAll(const std::string &amp;_value)']]],
['firebrick',['fireBrick',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#ad6967e9c5889d20d52ba7f02ce1a4344',1,'etk::color']]],
['fix',['fix',['http://atria-soft.github.io/etk/classetk_1_1_matrix.html#a2b08925854b289bb5bbbe390a7df2ec5',1,'etk::Matrix']]],
['flipx',['flipX',['http://atria-soft.github.io/etk/classetk_1_1_matrix2.html#ab9d9362f988bd8a1098ab7592d88e5de',1,'etk::Matrix2']]],
['flipy',['flipY',['http://atria-soft.github.io/etk/classetk_1_1_matrix2.html#a6c61fb68ee69bb448ef1829b98b94dce',1,'etk::Matrix2']]],
['float_5ft',['float_t',['http://musicdsp.github.io/audio/classaudio_1_1float__t.html',1,'audio']]],
['float_5ft_2ehpp',['float_t.hpp',['http://musicdsp.github.io/audio/float____t__8hpp.html',1,'']]],
['floralwhite',['floralWhite',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#aa194136648518d6622f0648b1be32886',1,'etk::color']]],
['foldercount',['folderCount',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#ad1343533b97b6ced90b9319864db0d5a',1,'etk::FSNode']]],
['foldergetparent',['folderGetParent',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a49da9a7c76bf4ccea34c9b82519cdca4',1,'etk::FSNode']]],
['foldergetrecursivefiles',['folderGetRecursiveFiles',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a81cf89d3d642aeaf9b4f5aee6bef88ad',1,'etk::FSNode']]],
['foldergetsub',['folderGetSub',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#ae496271c3d69970b4b0af2539ee535f0',1,'etk::FSNode']]],
['foldergetsublist',['folderGetSubList',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a6118d019b41ab1f5d7d95ab5a7bb0101',1,'etk::FSNode::folderGetSubList(bool _showHidenFile=true, bool _getFolderAndOther=true, bool _getFile=true, bool _temporaryFile=true)'],['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a4f572a50530850032a1a1c289e09379c',1,'etk::FSNode::folderGetSubList(bool _showHidenFile=true, bool _getFolderAndOther=true, bool _getFile=true, const std::string &amp;_filter=&quot;.*&quot;)']]],
['forestgreen',['forestGreen',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#ae828702f8dde36254656074f1539cf27',1,'etk::color']]],
['format',['format',['http://musicdsp.github.io/audio/namespaceaudio.html#a2e69fde0e376bc9b0b6fa91fb93105cb',1,'audio']]],
['format_2ehpp',['format.hpp',['http://musicdsp.github.io/audio/format__8hpp.html',1,'']]],
['format_5fdouble',['format_double',['http://musicdsp.github.io/audio/namespaceaudio.html#a2e69fde0e376bc9b0b6fa91fb93105cba7349a31609a817e9dce9f131762237bf',1,'audio']]],
['format_5ffloat',['format_float',['http://musicdsp.github.io/audio/namespaceaudio.html#a2e69fde0e376bc9b0b6fa91fb93105cbad325d82420c80bc087f46a12edfa617a',1,'audio']]],
['format_5fint16',['format_int16',['http://musicdsp.github.io/audio/namespaceaudio.html#a2e69fde0e376bc9b0b6fa91fb93105cba7ed7669dfdfed5d7ec2626caafbad9d7',1,'audio']]],
['format_5fint16_5fon_5fint32',['format_int16_on_int32',['http://musicdsp.github.io/audio/namespaceaudio.html#a2e69fde0e376bc9b0b6fa91fb93105cbab679591260a845a089829deb33337636',1,'audio']]],
['format_5fint24',['format_int24',['http://musicdsp.github.io/audio/namespaceaudio.html#a2e69fde0e376bc9b0b6fa91fb93105cba2dcbf35df01bf028c6edf9ae519bc2d4',1,'audio']]],
['format_5fint24_5fon_5fint32',['format_int24_on_int32',['http://musicdsp.github.io/audio/namespaceaudio.html#a2e69fde0e376bc9b0b6fa91fb93105cbad3566320cecb817d2b1157c95187fa02',1,'audio']]],
['format_5fint32',['format_int32',['http://musicdsp.github.io/audio/namespaceaudio.html#a2e69fde0e376bc9b0b6fa91fb93105cbacdb112aff61a792d380f17c8a85123e4',1,'audio']]],
['format_5fint32_5fon_5fint64',['format_int32_on_int64',['http://musicdsp.github.io/audio/namespaceaudio.html#a2e69fde0e376bc9b0b6fa91fb93105cbaae846080b3a77a320c3e31451422315a',1,'audio']]],
['format_5fint64',['format_int64',['http://musicdsp.github.io/audio/namespaceaudio.html#a2e69fde0e376bc9b0b6fa91fb93105cbaf096e0efb61d058a7dc3723c569d41e2',1,'audio']]],
['format_5fint8',['format_int8',['http://musicdsp.github.io/audio/namespaceaudio.html#a2e69fde0e376bc9b0b6fa91fb93105cba5744831ec66821b80935b78728e09343',1,'audio']]],
['format_5fint8_5fon_5fint16',['format_int8_on_int16',['http://musicdsp.github.io/audio/namespaceaudio.html#a2e69fde0e376bc9b0b6fa91fb93105cba32edd87795fa1123c3ffe6b36bd1b6b2',1,'audio']]],
['frand',['frand',['http://atria-soft.github.io/etk/namespaceetk_1_1tool.html#a3acc4fd6faa76439bd1651ec86bccd03',1,'etk::tool']]],
['from_5fstring',['from_string',['http://atria-soft.github.io/etk/namespaceetk.html#aec3aaa1c735552d02f4eec1fb72c1616',1,'etk']]],
['fsnode',['FSNode',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html',1,'etk']]],
['fsnode',['FSNode',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a9bd5c806953db1a55e1b0653a5111c7b',1,'etk::FSNode']]],
['fsnode_2ehpp',['FSNode.hpp',['http://atria-soft.github.io/etk/__f__s__node__8hpp.html',1,'']]],
['fsnodecreate',['FSNodeCreate',['http://atria-soft.github.io/etk/namespaceetk.html#af4adf742ba1e1aaaabce3c26c94405d2',1,'etk']]],
['fsnodeecho',['FSNodeEcho',['http://atria-soft.github.io/etk/namespaceetk.html#a95a89a04f30fed73e5656b26b6d3e55b',1,'etk']]],
['fsnodeechoadd',['FSNodeEchoAdd',['http://atria-soft.github.io/etk/namespaceetk.html#a014ce8a7311896847cd4978d96410d24',1,'etk']]],
['fsnodeexist',['FSNodeExist',['http://atria-soft.github.io/etk/namespaceetk.html#aa5f8ddf464f42564ece7edd83b3e6aa9',1,'etk']]],
['fsnodeexplodemultiplepath',['FSNodeExplodeMultiplePath',['http://atria-soft.github.io/etk/namespaceetk.html#a757318b34e8a012b84d49dd291286076',1,'etk']]],
['fsnodegetapplicationname',['FSNodeGetApplicationName',['http://atria-soft.github.io/etk/namespaceetk.html#a878a614b55bdc9e5730905dcbf1e7da1',1,'etk']]],
['fsnodegetcount',['FSNodeGetCount',['http://atria-soft.github.io/etk/namespaceetk.html#a4da725251cd89ff3e797d4017198ef67',1,'etk']]],
['fsnodegetrealname',['FSNodeGetRealName',['http://atria-soft.github.io/etk/namespaceetk.html#a4ef89557d910726f6b5253f11257fc0c',1,'etk']]],
['fsnodegetright',['FSNodeGetRight',['http://atria-soft.github.io/etk/namespaceetk.html#a104daf9dd822c992b4e91d219529c0d4',1,'etk']]],
['fsnodegettimeaccessed',['FSNodeGetTimeAccessed',['http://atria-soft.github.io/etk/namespaceetk.html#a7a7c80620d52319f98c370913ad6116b',1,'etk']]],
['fsnodegettimecreated',['FSNodeGetTimeCreated',['http://atria-soft.github.io/etk/namespaceetk.html#ada8865e7710783f51f2caf3c55727d6a',1,'etk']]],
['fsnodegettimemodified',['FSNodeGetTimeModified',['http://atria-soft.github.io/etk/namespaceetk.html#a15a33fbd48325bbee3cc362b1bbd25d0',1,'etk']]],
['fsnodegettype',['FSNodeGetType',['http://atria-soft.github.io/etk/namespaceetk.html#aeaa76db5b02d5275ee6faa9240688730',1,'etk']]],
['fsnodehistory',['FSNodeHistory',['http://atria-soft.github.io/etk/namespaceetk.html#a2f856fe66d99e595a01861f651194f47',1,'etk']]],
['fsnodemove',['FSNodeMove',['http://atria-soft.github.io/etk/namespaceetk.html#adc8c7d89695b20bde7c16279578df6d8',1,'etk']]],
['fsnodereadalldata',['FSNodeReadAllData',['http://atria-soft.github.io/etk/namespaceetk.html#acec1246a208ad95518c76ca3de513f40',1,'etk']]],
['fsnodereadalldatatype',['FSNodeReadAllDataType',['http://atria-soft.github.io/etk/namespaceetk.html#afc051561490776f836b7da5b81eba290',1,'etk']]],
['fsnoderemove',['FSNodeRemove',['http://atria-soft.github.io/etk/namespaceetk.html#ada11ec07c70d723eead76332e040a8e3',1,'etk']]],
['fsnoderight',['FSNodeRight',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node_right.html#a3c12a6fc00f52912713183507c1a3e98',1,'etk::FSNodeRight']]],
['fsnoderight',['FSNodeRight',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node_right.html',1,'etk']]],
['fsnoderight_2ehpp',['FSNodeRight.hpp',['http://atria-soft.github.io/etk/__f__s__node__right__8hpp.html',1,'']]],
['fsnodetouch',['FSNodeTouch',['http://atria-soft.github.io/etk/namespaceetk.html#af86474607a59dd8492c978ec48c015c5',1,'etk']]],
['fsnodewritealldata',['FSNodeWriteAllData',['http://atria-soft.github.io/etk/namespaceetk.html#ac9318ff052b5d458ee66c0aaf4021fc2',1,'etk']]],
['fsnodewritealldatatype',['FSNodeWriteAllDataType',['http://atria-soft.github.io/etk/namespaceetk.html#ae6e9afde0376252114884445cab1382e',1,'etk']]],
['fsntype',['FSNType',['http://atria-soft.github.io/etk/namespaceetk.html#a661ec570d3bddcc050a21b1c4a421d86',1,'etk']]],
['fsntype_5fcache',['FSNType_cache',['http://atria-soft.github.io/etk/namespaceetk.html#a661ec570d3bddcc050a21b1c4a421d86a11b6d9f004dfe2dbb0f0936295d96fab',1,'etk']]],
['fsntype_5fdata',['FSNType_data',['http://atria-soft.github.io/etk/namespaceetk.html#a661ec570d3bddcc050a21b1c4a421d86a85e888743bc92e15e92cb038180658a8',1,'etk']]],
['fsntype_5fdirect',['FSNType_direct',['http://atria-soft.github.io/etk/namespaceetk.html#a661ec570d3bddcc050a21b1c4a421d86ab90cc866be4fcb2e6006ec816b2683da',1,'etk']]],
['fsntype_5fhome',['FSNType_home',['http://atria-soft.github.io/etk/namespaceetk.html#a661ec570d3bddcc050a21b1c4a421d86aafe2d7ca46505000342694c4526209b6',1,'etk']]],
['fsntype_5frelatif',['FSNType_relatif',['http://atria-soft.github.io/etk/namespaceetk.html#a661ec570d3bddcc050a21b1c4a421d86ae6596d8a97ab0bdd4775f66089ad894b',1,'etk']]],
['fsntype_5ftheme',['FSNType_theme',['http://atria-soft.github.io/etk/namespaceetk.html#a661ec570d3bddcc050a21b1c4a421d86ac430963593558fcb3de198c74fc9a63c',1,'etk']]],
['fsntype_5fthemedata',['FSNType_themeData',['http://atria-soft.github.io/etk/namespaceetk.html#a661ec570d3bddcc050a21b1c4a421d86ae2fc2115dae24e08f7025f4ac4671dea',1,'etk']]],
['fsntype_5funknow',['FSNType_unknow',['http://atria-soft.github.io/etk/namespaceetk.html#a661ec570d3bddcc050a21b1c4a421d86a263b4ecc93b26982d222fd87c3cf12a1',1,'etk']]],
['fsntype_5fuserdata',['FSNType_userData',['http://atria-soft.github.io/etk/namespaceetk.html#a661ec570d3bddcc050a21b1c4a421d86aff5b33005b2a7937bec1d9e426e1d9d2',1,'etk']]],
['fuchsia',['fuchsia',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#add8be07f05dd9acb1021cd813d5d09f5',1,'etk::color']]],
['furthestaxis',['furthestAxis',['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a741170b7eeb26c44c932023ce20e6a32',1,'etk::Vector2D::furthestAxis()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a741170b7eeb26c44c932023ce20e6a32',1,'Vector2D&lt; int32_t &gt;::furthestAxis()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a741170b7eeb26c44c932023ce20e6a32',1,'Vector2D&lt; uint32_t &gt;::furthestAxis()'],['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#a22acd16dde9aef7a81555f34f16804d5',1,'etk::Vector3D::furthestAxis()']]]
];

26
search/all_6.html Normal file
View File

@ -0,0 +1,26 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.8.12"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_6.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
createResults();
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

60
search/all_6.js Normal file
View File

@ -0,0 +1,60 @@
var searchData=
[
['g',['g',['http://atria-soft.github.io/etk/classetk_1_1_color.html#a86e26d2a589c9f714c4cc3871b333be7',1,'etk::Color']]],
['gainsboro',['gainsboro',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a9f3802248416e94cbe57301269bb4597',1,'etk::color']]],
['generate',['generate',['http://atria-soft.github.io/ejson/classejson_1_1_document.html#a81af42d7adbfd3dbc80b3e7ce5ca8f0f',1,'ejson::Document::generate()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_document.html#aff8f1f1c6923310ed1d877f342a42ceb',1,'ejson::internal::Document::generate()']]],
['generatehumanstring',['generateHumanString',['http://atria-soft.github.io/ejson/classejson_1_1_value.html#a32b6f57d2285fd48302ddd5769e8a86c',1,'ejson::Value']]],
['generatemachinestring',['generateMachineString',['http://atria-soft.github.io/ejson/classejson_1_1_value.html#a6e6ca6afd5d6c9c74817316ef363034c',1,'ejson::Value']]],
['get',['get',['http://atria-soft.github.io/etk/classetk_1_1_base_noise.html#aa405241a4a458be6dc3bc331a0cef516',1,'etk::BaseNoise::get()'],['http://atria-soft.github.io/etk/classetk_1_1_color.html#a5061b354436f6ef5fc193715ce4d5dab',1,'etk::Color::get() const'],['http://atria-soft.github.io/etk/classetk_1_1_color.html#a04925092def38969bc10afe95bd08f75',1,'etk::Color::get() const'],['http://atria-soft.github.io/etk/classetk_1_1_hash.html#ae9f1d4cebc9fc8d6222d7e98829380d4',1,'etk::Hash::get()'],['http://atria-soft.github.io/etk/classetk_1_1_noise.html#a8f3cdb6dfce36df0751cc8e1a50e2456',1,'etk::Noise::get()'],['http://atria-soft.github.io/ememory/classememory_1_1_shared_ptr.html#ad4b7eb0326a1d4aac87d2699eb6902cb',1,'ememory::SharedPtr::get() const'],['http://atria-soft.github.io/ememory/classememory_1_1_shared_ptr.html#ad0fb9399753ec0125f8456d716203d08',1,'ememory::SharedPtr::get()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_array.html#a819f53a44c40f5cfef8dbff666543181',1,'ejson::internal::Array::get(size_t _id)'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_array.html#afaf7b753a2b219465c179355d5c8e5a6',1,'ejson::internal::Array::get(size_t _id) const'],['http://atria-soft.github.io/ejson/classejson_1_1_boolean.html#a4df842959a4ef730174efdd38e21b55f',1,'ejson::Boolean::get()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_boolean.html#a3480b86ec52e077e65c7bd64390939df',1,'ejson::internal::Boolean::get()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_number.html#a6ca533ef245b35a0577e2671d11e340d',1,'ejson::internal::Number::get()'],['http://atria-soft.github.io/ejson/classejson_1_1_number.html#afe98a17bc93666be54da54bb5bf1d871',1,'ejson::Number::get()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_object.html#a55f787a15c01daa9aee6b549dec328dd',1,'ejson::internal::Object::get(const std::string &amp;_name)'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_object.html#a0601ed2ca045dfca2fafe79f1f2e58c7',1,'ejson::internal::Object::get(const std::string &amp;_name) const'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_object.html#a61f51317cbe74218a660345b03766909',1,'ejson::internal::Object::get(size_t _id)'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_object.html#aa0ed760c502bc04bc92507a28b653015',1,'ejson::internal::Object::get(size_t _id) const'],['http://atria-soft.github.io/ejson/classejson_1_1_string.html#ad8fa78302b225c6228ee8d971489726a',1,'ejson::String::get()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_string.html#a2a4a2b732415499063458a3d1bf7f8b5',1,'ejson::internal::String::get()']]],
['getapplicationname',['getApplicationName',['http://atria-soft.github.io/etk/namespaceetk.html#a8cf9a84c6f3effdf8ae0886a8317f85b',1,'etk']]],
['getcol',['getCol',['http://atria-soft.github.io/ejson/classejson_1_1_file_pos.html#aac363a503c41bf048cddeb3637d6ffdb',1,'ejson::FilePos']]],
['getcontent',['getContent',['http://atria-soft.github.io/etk/classetk_1_1_archive.html#a496024ba396746e78ccd6872b633138f',1,'etk::Archive::getContent(size_t _id) const'],['http://atria-soft.github.io/etk/classetk_1_1_archive.html#a2a32911fe1aa9945eac8478924c6ba17',1,'etk::Archive::getContent(const std::string &amp;_key) const']]],
['getcount',['getCount',['http://atria-soft.github.io/ememory/classememory_1_1_counter.html#ab57beaaee59c31438823a29fb24d4707',1,'ememory::Counter']]],
['getcounter',['getCounter',['http://atria-soft.github.io/ememory/classememory_1_1_shared_ptr.html#af3de746aec06d5e39d14b32085d37a8b',1,'ememory::SharedPtr::getCounter()'],['http://atria-soft.github.io/ememory/classememory_1_1_weak_ptr.html#a49bd7ef3006354416097d9d741ad8bdd',1,'ememory::WeakPtr::getCounter()']]],
['getcountshared',['getCountShared',['http://atria-soft.github.io/ememory/classememory_1_1_counter.html#a819fefc93965f5da013dd5f809471288',1,'ememory::Counter']]],
['getcountweak',['getCountWeak',['http://atria-soft.github.io/ememory/classememory_1_1_counter.html#ab059494abe4d8600369dd10ca8cf0f66',1,'ememory::Counter']]],
['getdatavector',['getDataVector',['http://atria-soft.github.io/etk/classetk_1_1_archive_content.html#aee51637347bcb52ea8ce0c7233db928d',1,'etk::ArchiveContent']]],
['getdeleter',['getDeleter',['http://atria-soft.github.io/ememory/classememory_1_1_shared_ptr.html#a20c3bc26755a4917c2ce1641aa2e1925',1,'ememory::SharedPtr']]],
['getdisplayerror',['getDisplayError',['http://atria-soft.github.io/ejson/classejson_1_1_document.html#a83b22672e2723fa1dd6fa8dfa3104382',1,'ejson::Document::getDisplayError()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_document.html#a1631cb019d5a45ff124d83b54c7a9679',1,'ejson::internal::Document::getDisplayError()']]],
['getdistance',['getDistance',['http://atria-soft.github.io/etk/classetk_1_1_plane.html#aa63645925f576389fc111737c1f6af30',1,'etk::Plane']]],
['getfilename',['getFileName',['http://atria-soft.github.io/etk/classetk_1_1_archive.html#abcd2958b8df98c6f3841dc20b934a26b',1,'etk::Archive']]],
['getfilesystemname',['getFileSystemName',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#ad3e7ec360ef0d80feed64edd1e43429b',1,'etk::FSNode']]],
['gethexstring',['getHexString',['http://atria-soft.github.io/etk/classetk_1_1_color.html#a1d7163026eda896df01c92924c19641d',1,'etk::Color']]],
['geti64',['getI64',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_number.html#a3a8e9d49dab452986af331f0115f16f3',1,'ejson::internal::Number::getI64()'],['http://atria-soft.github.io/ejson/classejson_1_1_number.html#a59dafdcafd077fa203646c44ed95dc5a',1,'ejson::Number::getI64()']]],
['getid',['getId',['http://atria-soft.github.io/etk/classetk_1_1_hash.html#adb138427203bbe63b6ab41e19ed33a6b',1,'etk::Hash::getId()'],['http://atria-soft.github.io/ejson/classejson_1_1iterator.html#a5a388a51dd8123064f7390fcf9c75969',1,'ejson::iterator::getId()']]],
['getintercept',['getIntercept',['http://atria-soft.github.io/etk/classetk_1_1_plane.html#ac701a8e4aae7df5874e1e97658703c7f',1,'etk::Plane']]],
['getkey',['getKey',['http://atria-soft.github.io/etk/classetk_1_1_hash.html#af2068c84a2a91241eb8a59402724a7b6',1,'etk::Hash::getKey()'],['http://atria-soft.github.io/ejson/classejson_1_1iterator.html#a8cc474c5f856eb2b67a2a6756767a745',1,'ejson::iterator::getKey()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_object.html#a2baac0d0e67e8f3e65896e9769aedb85',1,'ejson::internal::Object::getKey()'],['http://atria-soft.github.io/ejson/classejson_1_1_object.html#a4b50dca7a6821017f1f87392cfc20d10',1,'ejson::Object::getKey()']]],
['getkeys',['getKeys',['http://atria-soft.github.io/etk/classetk_1_1_hash.html#a31119d35657cb2e0798f58917b51d5c1',1,'etk::Hash::getKeys()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_object.html#a0d1a7d19470b497aa89d0d63b1d18a38',1,'ejson::internal::Object::getKeys()'],['http://atria-soft.github.io/ejson/classejson_1_1_object.html#ab8b6dc5982584d46780b454b521427f5',1,'ejson::Object::getKeys()']]],
['getlevel',['getLevel',['http://atria-soft.github.io/elog/namespaceelog.html#a31cfb5b0fcaba634b18b0c886e728b44',1,'elog']]],
['getline',['getLine',['http://atria-soft.github.io/ejson/classejson_1_1_file_pos.html#a7ced45d7ccbfc3d2349025ba871e1e66',1,'ejson::FilePos']]],
['getlistinstance',['getListInstance',['http://atria-soft.github.io/elog/namespaceelog.html#a08110480947e6d682ad69b5b4a4d18d5',1,'elog']]],
['getname',['getName',['http://atria-soft.github.io/etk/classetk_1_1_archive.html#a9da33ff502b21d05d6217963fe3246d4',1,'etk::Archive::getName()'],['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a0cd7ffd53fa3bc5e3654109509da15f7',1,'etk::FSNode::getName()']]],
['getnamefile',['getNameFile',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a047391b0333908c886ee0c53e12dec82',1,'etk::FSNode']]],
['getnamefolder',['getNameFolder',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a0c51598f0293cc347ed44d062f7374e1',1,'etk::FSNode']]],
['getnodetype',['getNodeType',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a86038b56fd2349317459c1ce4a58a788',1,'etk::FSNode']]],
['getnormal',['getNormal',['http://atria-soft.github.io/etk/classetk_1_1_plane.html#ab17849e22fddbc55964ef2990818e2a6',1,'etk::Plane']]],
['getnumberofref',['getNumberOfRef',['http://atria-soft.github.io/etk/classetk_1_1_archive_content.html#ae36e16fc3d90ee3b996f88b21770b7c3',1,'etk::ArchiveContent']]],
['getpos',['getPos',['http://atria-soft.github.io/etk/classutf8_1_1iterator.html#a491dfde52d1bb01bd284ddda702fac61',1,'utf8::iterator']]],
['getrelativefolder',['getRelativeFolder',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a596be9f5161b36379271158623e7f0f8',1,'etk::FSNode']]],
['getright',['getRight',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#ab757b8663591a87ae61ddbb0b69eff89',1,'etk::FSNode::getRight()'],['http://atria-soft.github.io/etk/classetk_1_1_f_s_node_right.html#ab3efc8325268838bb13695592804df2e',1,'etk::FSNodeRight::getRight()']]],
['getskewsymmetricmatrix',['getSkewSymmetricMatrix',['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#afccc043ebc6b0ebfbfaba8b5bc339a63',1,'etk::Vector3D']]],
['getstring',['getString',['http://atria-soft.github.io/etk/classetk_1_1_color.html#aa26efcdf5bb7dacc02d211b6fea63d4d',1,'etk::Color']]],
['gettheoricsize',['getTheoricSize',['http://atria-soft.github.io/etk/classetk_1_1_archive_content.html#a3073080dc08423e6801bce2767a6c6b8',1,'etk::ArchiveContent']]],
['gettype',['getType',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_value.html#abf21ef5171078e53637f6b708c96aa07',1,'ejson::internal::Value::getType()'],['http://atria-soft.github.io/ejson/classejson_1_1_value.html#abc2ff4ed6b3178ecbb771c0ad26f7ae4',1,'ejson::Value::getType()']]],
['gettypeaccess',['getTypeAccess',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a5f0c2f85b19d025bd113c62884230784',1,'etk::FSNode']]],
['getu64',['getU64',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_number.html#af31797173219ea00db28476ddbf43fc6',1,'ejson::internal::Number::getU64()'],['http://atria-soft.github.io/ejson/classejson_1_1_number.html#a8d9d2a95d2b6d29f1c8e4ab8f717f768',1,'ejson::Number::getU64()']]],
['getuserhomefolder',['getUserHomeFolder',['http://atria-soft.github.io/etk/namespaceetk.html#afa745063a5cc6f651f1245a1ff7ca3c1',1,'etk']]],
['getuserrunfolder',['getUserRunFolder',['http://atria-soft.github.io/etk/namespaceetk.html#a7a3491e777d456c9ddd6871e0f7ffdfc',1,'etk']]],
['getvalue',['getValue',['http://atria-soft.github.io/etk/classetk_1_1_hash.html#a650bf5f92fe0580e9d79793816adc3eb',1,'etk::Hash::getValue(size_t _pos) const'],['http://atria-soft.github.io/etk/classetk_1_1_hash.html#a041e5ec334a0ff90fc4f3590e5ab7c81',1,'etk::Hash::getValue(size_t _pos)']]],
['getw',['getW',['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html#acb9970685f257e57eae8271a07301d62',1,'etk::Vector4D']]],
['getx',['getX',['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a34206a690fdbfd8bcfabb4096dd1aa49',1,'etk::Vector2D::getX()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a34206a690fdbfd8bcfabb4096dd1aa49',1,'Vector2D&lt; int32_t &gt;::getX()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a34206a690fdbfd8bcfabb4096dd1aa49',1,'Vector2D&lt; uint32_t &gt;::getX()'],['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#a942d2907bf18905524de5a76d2bf3552',1,'etk::Vector3D::getX()'],['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html#acf3e239c49dba1a92083568187e6fefa',1,'etk::Vector4D::getX()']]],
['gety',['getY',['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a581d4dc0c67a2c029d20eac1d41c357f',1,'etk::Vector2D::getY()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a581d4dc0c67a2c029d20eac1d41c357f',1,'Vector2D&lt; int32_t &gt;::getY()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a581d4dc0c67a2c029d20eac1d41c357f',1,'Vector2D&lt; uint32_t &gt;::getY()'],['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#a17e7b662cee12b1d508dbba297ee6485',1,'etk::Vector3D::getY()'],['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html#aca1a2ad671bed213e0d02161e157ee5b',1,'etk::Vector4D::getY()']]],
['getz',['getZ',['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#a53d7e035a9a16535cd1b6f4a669550d5',1,'etk::Vector3D::getZ()'],['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html#aef2107e67a6470570b5138c41ac057f0',1,'etk::Vector4D::getZ()']]],
['ghostwhite',['ghostWhite',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a15bfc067a56f04e3c95ccc1e08e30582',1,'etk::color']]],
['gold',['gold',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#aa87df42bc06ea637f36058ded83172b8',1,'etk::color']]],
['goldenrod',['goldenRod',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#ab3e32a2d70fbe57ccbd45b490b32dfc0',1,'etk::color']]],
['gray',['gray',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a319c23dcc37291f96f330abe15b16f89',1,'etk::color']]],
['green',['green',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a6fc96147de6d001202802bca7bcf2ba9',1,'etk::color']]],
['greenyellow',['greenYellow',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a218efa62696750857b5ce07171c34cbd',1,'etk::color']]],
['grey',['grey',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a21d8358e48a38d1d701d2165e9ff7ef3',1,'etk::color']]]
];

26
search/all_7.html Normal file
View File

@ -0,0 +1,26 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.8.12"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_7.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
createResults();
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

11
search/all_7.js Normal file
View File

@ -0,0 +1,11 @@
var searchData=
[
['hash',['Hash',['http://atria-soft.github.io/etk/classetk_1_1_hash.html',1,'etk']]],
['hash',['Hash',['http://atria-soft.github.io/etk/classetk_1_1_hash.html#a2a2399e884a1a61be01ee702d90514db',1,'etk::Hash']]],
['hash_2ehpp',['Hash.hpp',['http://atria-soft.github.io/etk/__hash__8hpp.html',1,'']]],
['hash_3c_20ememory_3a_3asharedptr_3c_20ejson_3a_3ainternal_3a_3aejson_3a_3ainternal_3a_3avalue_20_3e_20_3e',['Hash&lt; ememory::SharedPtr&lt; ejson::internal::ejson::internal::Value &gt; &gt;',['http://atria-soft.github.io/etk/classetk_1_1_hash.html',1,'etk']]],
['hashdata',['HashData',['http://atria-soft.github.io/etk/classetk_1_1_hash_data.html#a37d8c4248a9d4d6f8df173d0f87469ee',1,'etk::HashData']]],
['hashdata',['HashData',['http://atria-soft.github.io/etk/classetk_1_1_hash_data.html',1,'etk']]],
['honeydew',['honeyDew',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#aa3411f95075bfc9977619fcea76266de',1,'etk::color']]],
['hotpink',['hotPink',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a03118a731faf900b1bec48f3b001a8dd',1,'etk::color']]]
];

26
search/all_8.html Normal file
View File

@ -0,0 +1,26 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.8.12"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_8.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
createResults();
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

59
search/all_8.js Normal file
View File

@ -0,0 +1,59 @@
var searchData=
[
['identity',['identity',['http://atria-soft.github.io/etk/classetk_1_1_matrix2.html#af472afddc7b5574eea3f6a4f9b0524f5',1,'etk::Matrix2::identity()'],['http://atria-soft.github.io/etk/classetk_1_1_matrix4.html#af2b709691e4d6dd41ed54572794ab2a2',1,'etk::Matrix4::identity()']]],
['igenerate',['iGenerate',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_array.html#af7a3f104edaf3c204b5d4bb0351f3091',1,'ejson::internal::Array::iGenerate()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_boolean.html#a6f3017156677066edd1dd16e116f847e',1,'ejson::internal::Boolean::iGenerate()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_document.html#aa4e1d9131daa8f8d31f2158c28533f42',1,'ejson::internal::Document::iGenerate()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_null.html#af15e9a549981dcd6c6ef8f2533270831',1,'ejson::internal::Null::iGenerate()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_number.html#a695f6d4c2cd6784d208bb122e7c66e3d',1,'ejson::internal::Number::iGenerate()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_object.html#a321803d73333a459417c3885c082371c',1,'ejson::internal::Object::iGenerate()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_string.html#aa00abbe02b10d73793fdc65cce230f2e',1,'ejson::internal::String::iGenerate()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_value.html#a9b3c575fa6012346ea95c9205c0e2a2a',1,'ejson::internal::Value::iGenerate()']]],
['imachinegenerate',['iMachineGenerate',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_array.html#a63b1e6dcbd879e53149e8011636c16d7',1,'ejson::internal::Array::iMachineGenerate()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_boolean.html#a572fc850496130c8b37e906fbc2cd551',1,'ejson::internal::Boolean::iMachineGenerate()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_null.html#a414f4acc6280835fc4c061a2b1636cf9',1,'ejson::internal::Null::iMachineGenerate()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_number.html#ad267b2c9ae75979ba33940578fcc537e',1,'ejson::internal::Number::iMachineGenerate()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_object.html#a8c354d4901c0682190ef1e420b688da0',1,'ejson::internal::Object::iMachineGenerate()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_string.html#aa58fa0a547c601df0fc6e02b34a78ed0',1,'ejson::internal::String::iMachineGenerate()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_value.html#a50009da862f5e689463843d4dced4350',1,'ejson::internal::Value::iMachineGenerate()']]],
['increaseref',['increaseRef',['http://atria-soft.github.io/etk/classetk_1_1_archive_content.html#abe8b416a3f6e5631e16560253ad4191b',1,'etk::ArchiveContent']]],
['incrementshared',['incrementShared',['http://atria-soft.github.io/ememory/classememory_1_1_counter.html#a99aef3a1f476e47bc9e2ccaed0cd0f7b',1,'ememory::Counter']]],
['incrementweak',['incrementWeak',['http://atria-soft.github.io/ememory/classememory_1_1_counter.html#a93aa2424f0ce29942ec95f486166ee46',1,'ememory::Counter']]],
['indianred',['indianRed',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a13e4d0783eb7e8c10ca87631e5385dcb',1,'etk::color']]],
['indigo',['indigo',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a3a93b5498bb8c81d57e7a759d1418579',1,'etk::color']]],
['init',['init',['http://atria-soft.github.io/elog/namespaceelog.html#a1005ac82c94e09b499d29b70a98cd5cc',1,'elog::init()'],['http://atria-soft.github.io/etk/namespaceetk.html#aa87d94d7a27bd41c9982fe0ba83d6f88',1,'etk::init()']]],
['initdefaultfolder',['initDefaultFolder',['http://atria-soft.github.io/etk/namespaceetk.html#af5156cd13050789ca79157400805b04e',1,'etk']]],
['int16_5f16_5ft',['int16_16_t',['http://musicdsp.github.io/audio/classaudio_1_1int16__16__t.html',1,'audio']]],
['int16_5f16_5ft_2ehpp',['int16_16_t.hpp',['http://musicdsp.github.io/audio/int16____16____t__8hpp.html',1,'']]],
['int16_5f32_5ft',['int16_32_t',['http://musicdsp.github.io/audio/classaudio_1_1int16__32__t.html',1,'audio']]],
['int16_5f32_5ft_2ehpp',['int16_32_t.hpp',['http://musicdsp.github.io/audio/int16____32____t__8hpp.html',1,'']]],
['int24_5f24_5ft',['int24_24_t',['http://musicdsp.github.io/audio/classaudio_1_1int24__24__t.html',1,'audio']]],
['int24_5f24_5ft_2ehpp',['int24_24_t.hpp',['http://musicdsp.github.io/audio/int24____24____t__8hpp.html',1,'']]],
['int24_5f32_5ft',['int24_32_t',['http://musicdsp.github.io/audio/classaudio_1_1int24__32__t.html',1,'audio']]],
['int24_5f32_5ft_2ehpp',['int24_32_t.hpp',['http://musicdsp.github.io/audio/int24____32____t__8hpp.html',1,'']]],
['int32_5f32_5ft',['int32_32_t',['http://musicdsp.github.io/audio/classaudio_1_1int32__32__t.html',1,'audio']]],
['int32_5f32_5ft_2ehpp',['int32_32_t.hpp',['http://musicdsp.github.io/audio/int32____32____t__8hpp.html',1,'']]],
['int32_5f64_5ft',['int32_64_t',['http://musicdsp.github.io/audio/classaudio_1_1int32__64__t.html',1,'audio']]],
['int32_5f64_5ft_2ehpp',['int32_64_t.hpp',['http://musicdsp.github.io/audio/int32____64____t__8hpp.html',1,'']]],
['int64_5f64_5ft',['int64_64_t',['http://musicdsp.github.io/audio/classaudio_1_1int64__64__t.html',1,'audio']]],
['int64_5f64_5ft_2ehpp',['int64_64_t.hpp',['http://musicdsp.github.io/audio/int64____64____t__8hpp.html',1,'']]],
['int8_5f16_5ft',['int8_16_t',['http://musicdsp.github.io/audio/classaudio_1_1int8__16__t.html',1,'audio']]],
['int8_5f16_5ft_2ehpp',['int8_16_t.hpp',['http://musicdsp.github.io/audio/int8____16____t__8hpp.html',1,'']]],
['int8_5f8_5ft',['int8_8_t',['http://musicdsp.github.io/audio/classaudio_1_1int8__8__t.html',1,'audio']]],
['int8_5f8_5ft_2ehpp',['int8_8_t.hpp',['http://musicdsp.github.io/audio/int8____8____t__8hpp.html',1,'']]],
['intersect3',['intersect3',['http://atria-soft.github.io/etk/classetk_1_1_plane.html#abc2a4dffb33f88c073d03799a81a902e',1,'etk::Plane']]],
['invert',['invert',['http://atria-soft.github.io/etk/classetk_1_1_matrix2.html#ae03bbf1ff6f750e3ecd5ad556b771c4e',1,'etk::Matrix2::invert()'],['http://atria-soft.github.io/etk/classetk_1_1_matrix4.html#adfc631d9817a7ac82d12c243fe52fb93',1,'etk::Matrix4::invert()']]],
['iparse',['iParse',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_array.html#a7fb8c36221de05354e6a292e68c87032',1,'ejson::internal::Array::iParse()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_boolean.html#a5369a1555b6d67c0f1ffa359755c4d76',1,'ejson::internal::Boolean::iParse()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_document.html#ab2f6be19864c8054e21cf201c619a132',1,'ejson::internal::Document::iParse()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_null.html#a2f42e4d809bb43ef1c0ab6dc20474bda',1,'ejson::internal::Null::iParse()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_number.html#a6515a25cc751732ee51b6967a26079af',1,'ejson::internal::Number::iParse()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_object.html#a618760d6e0abc4a8f2977d8688cdd127',1,'ejson::internal::Object::iParse()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_string.html#a15b9755e6a3599d449af196d2596164f',1,'ejson::internal::String::iParse()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_value.html#a77c4f471e2c584870cffbf230fdbb60e',1,'ejson::internal::Value::iParse()']]],
['irand',['irand',['http://atria-soft.github.io/etk/namespaceetk_1_1tool.html#a50bc6947ba9add861cd3096d9034effa',1,'etk::tool']]],
['isarray',['isArray',['http://atria-soft.github.io/ejson/classejson_1_1_value.html#ac768fc4eca4b99d889f755ce06f4ad79',1,'ejson::Value']]],
['isboolean',['isBoolean',['http://atria-soft.github.io/ejson/classejson_1_1_value.html#ac04e5417c337d52be790689f33e4d81c',1,'ejson::Value']]],
['isdocument',['isDocument',['http://atria-soft.github.io/ejson/classejson_1_1_value.html#a34e2e48b1ea92a22497d05a65a1e9e40',1,'ejson::Value']]],
['isgroupreadable',['isGroupReadable',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node_right.html#a453329fabaebc6c6cce4eadc0a2e49b7',1,'etk::FSNodeRight']]],
['isgrouprunable',['isGroupRunable',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node_right.html#a7a76ff5576933a63d759b326a74933a7',1,'etk::FSNodeRight']]],
['isgroupwritable',['isGroupWritable',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node_right.html#a4a275b98275492aa30a909b1a6f9e325',1,'etk::FSNodeRight']]],
['isnull',['isNull',['http://atria-soft.github.io/ejson/classejson_1_1_value.html#a282219883a584c153c4fcbdf783d8846',1,'ejson::Value']]],
['isnumber',['isNumber',['http://atria-soft.github.io/ejson/classejson_1_1_value.html#a0b39e6b79a9a7b4b9a0e608ff7fefc71',1,'ejson::Value']]],
['isobject',['isObject',['http://atria-soft.github.io/ejson/classejson_1_1_value.html#ab35590bc759b959b03582b0d107b5cd7',1,'ejson::Value']]],
['isotherreadable',['isOtherReadable',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node_right.html#af7fbdac5122f7ebf65a32651b9cf620e',1,'etk::FSNodeRight']]],
['isotherrunable',['isOtherRunable',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node_right.html#a0553403781de313a3a60cb08a917263c',1,'etk::FSNodeRight']]],
['isotherwritable',['isOtherWritable',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node_right.html#a5edec7678e987c70177a60097d762981',1,'etk::FSNodeRight']]],
['isspecialchar',['isSpecialChar',['http://atria-soft.github.io/etk/namespaceu32char.html#a408c8318f6077bfeeb94efa12d48e60f',1,'u32char']]],
['isstring',['isString',['http://atria-soft.github.io/ejson/classejson_1_1_value.html#a59e1df205a555e6486faeedee593813a',1,'ejson::Value']]],
['isuserreadable',['isUserReadable',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node_right.html#a6798f0adb3c79d279c8dfefdbeae0531',1,'etk::FSNodeRight']]],
['isuserrunable',['isUserRunable',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node_right.html#aa660aeb3b884f571b06019e02a5ba438',1,'etk::FSNodeRight']]],
['isuserwritable',['isUserWritable',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node_right.html#aa0ca67ebdf5fb0ca97836df70180f8da',1,'etk::FSNodeRight']]],
['iswhitechar',['isWhiteChar',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_value.html#a5028f3c0c9cf5645e2ec870394450640',1,'ejson::internal::Value::isWhiteChar()'],['http://atria-soft.github.io/etk/namespaceu32char.html#a7ffdd433efbedf5bed193e9d9df7eb6d',1,'u32char::isWhiteChar()']]],
['iszero',['isZero',['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#ab36e9267a66745c77199482284bb8a40',1,'etk::Vector2D::isZero()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#ab36e9267a66745c77199482284bb8a40',1,'Vector2D&lt; int32_t &gt;::isZero()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#ab36e9267a66745c77199482284bb8a40',1,'Vector2D&lt; uint32_t &gt;::isZero()'],['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#a5a2d0c1a587adb016eaf70aa3458c10d',1,'etk::Vector3D::isZero()'],['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html#ad5ed6c2d0564a9a165147006d891e3d6',1,'etk::Vector4D::isZero()']]],
['iterator',['iterator',['http://atria-soft.github.io/ejson/classejson_1_1iterator.html',1,'ejson']]],
['iterator',['iterator',['http://atria-soft.github.io/ejson/classejson_1_1_array.html#a8e0a515f9678646817a420e22f2f9f98',1,'ejson::Array::iterator()'],['http://atria-soft.github.io/ejson/classejson_1_1_object.html#ac4d2852ae98791af26abe9471a7743a3',1,'ejson::Object::iterator()'],['http://atria-soft.github.io/etk/classutf8_1_1iterator.html#aebb30cce96db460dffdb275170a979cb',1,'utf8::iterator::iterator()'],['http://atria-soft.github.io/etk/classutf8_1_1iterator.html#ad640e78bef39d56b5282e8a9011c0d59',1,'utf8::iterator::iterator(std::string &amp;_str)'],['http://atria-soft.github.io/etk/classutf8_1_1iterator.html#a2676d3eba675ecfa0f789ba15e7335d7',1,'utf8::iterator::iterator(std::string &amp;_str, const std::string::iterator &amp;_pos)'],['http://atria-soft.github.io/etk/classutf8_1_1iterator.html#a7f0ab43734e7324ad6c01c143d35a26a',1,'utf8::iterator::iterator(std::string &amp;_str, size_t _pos)'],['http://atria-soft.github.io/etk/classutf8_1_1iterator.html#a627ca7ef0ee43bf15445b4b29a775d2e',1,'utf8::iterator::iterator(std::string *_str, const std::string::iterator &amp;_pos)'],['http://atria-soft.github.io/etk/classutf8_1_1iterator.html#a92e5ead9e0b57f889a635306c7e7b6fe',1,'utf8::iterator::iterator(std::string *_str, size_t _pos)'],['http://atria-soft.github.io/etk/classutf8_1_1iterator.html#af9610f601ab0d2729b235f0ec4204ff1',1,'utf8::iterator::iterator(const iterator &amp;_obj)'],['http://atria-soft.github.io/ejson/classejson_1_1iterator.html#a67eda9f172a4402672c4d3e5b77499dc',1,'ejson::iterator::iterator(EJSON_BASE_T &amp;_obj, size_t _pos)'],['http://atria-soft.github.io/ejson/classejson_1_1iterator.html#ab9f2e2ac7424683b4df07ce2b2c68ee2',1,'ejson::iterator::iterator(const EJSON_BASE_T &amp;_obj, size_t _pos)'],['http://atria-soft.github.io/ejson/classejson_1_1iterator.html#adc41c1d4e113d4a4482a9e7c39e86ddb',1,'ejson::iterator::iterator(const iterator &amp;_obj)']]],
['iterator',['iterator',['http://atria-soft.github.io/etk/classutf8_1_1iterator.html',1,'utf8']]],
['iterator_2ehpp',['iterator.hpp',['http://atria-soft.github.io/ejson/iterator__8hpp.html',1,'']]],
['ivory',['ivory',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#ab44bec9b6c9231236729f749df94c7ba',1,'etk::color']]]
];

26
search/all_9.html Normal file
View File

@ -0,0 +1,26 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.8.12"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_9.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript"><!--
createResults();
--></script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

Some files were not shown because too many files have changed in this diff Show More