| @@ -163,9 +163,9 @@ public: | |||
| //============================================================================== | |||
| bool isValid() const { return node.isValid(); } | |||
| const ValueTree& getNode() const throw() { return node; } | |||
| ValueTree& getNode() throw() { return node; } | |||
| Project& getProject() const throw() { return *project; } | |||
| const ValueTree& getNode() const noexcept { return node; } | |||
| ValueTree& getNode() noexcept { return node; } | |||
| Project& getProject() const noexcept { return *project; } | |||
| bool operator== (const Item& other) const { return node == other.node && project == other.project; } | |||
| bool operator!= (const Item& other) const { return ! operator== (other); } | |||
| @@ -57,7 +57,7 @@ public: | |||
| PropertyPanelWithTooltips(); | |||
| ~PropertyPanelWithTooltips(); | |||
| PropertyPanel& getPanel() throw() { return panel; } | |||
| PropertyPanel& getPanel() noexcept { return panel; } | |||
| void paint (Graphics& g); | |||
| void resized(); | |||
| @@ -111,6 +111,7 @@ private: | |||
| << "Time and date: " << Time::getCurrentTime().toString (true, true) | |||
| << "\nUser logon name: " << SystemStats::getLogonName() | |||
| << "\nFull user name: " << SystemStats::getFullUserName() | |||
| << "\nHost name: " << SystemStats::getComputerName() | |||
| << "\nOperating system: " << SystemStats::getOperatingSystemName() | |||
| << "\nCPU vendor: " << SystemStats::getCpuVendor() | |||
| << "\nCPU speed: " << SystemStats::getCpuSpeedInMegaherz() << "MHz" | |||
| @@ -78,42 +78,42 @@ FilterGraph::~FilterGraph() | |||
| graph.clear(); | |||
| } | |||
| uint32 FilterGraph::getNextUID() throw() | |||
| uint32 FilterGraph::getNextUID() noexcept | |||
| { | |||
| return ++lastUID; | |||
| } | |||
| //============================================================================== | |||
| int FilterGraph::getNumFilters() const throw() | |||
| int FilterGraph::getNumFilters() const noexcept | |||
| { | |||
| return graph.getNumNodes(); | |||
| } | |||
| const AudioProcessorGraph::Node::Ptr FilterGraph::getNode (const int index) const throw() | |||
| const AudioProcessorGraph::Node::Ptr FilterGraph::getNode (const int index) const noexcept | |||
| { | |||
| return graph.getNode (index); | |||
| } | |||
| const AudioProcessorGraph::Node::Ptr FilterGraph::getNodeForId (const uint32 uid) const throw() | |||
| const AudioProcessorGraph::Node::Ptr FilterGraph::getNodeForId (const uint32 uid) const noexcept | |||
| { | |||
| return graph.getNodeForId (uid); | |||
| } | |||
| void FilterGraph::addFilter (const PluginDescription* desc, double x, double y) | |||
| { | |||
| if (desc != 0) | |||
| if (desc != nullptr) | |||
| { | |||
| String errorMessage; | |||
| AudioPluginInstance* instance | |||
| = AudioPluginFormatManager::getInstance()->createPluginInstance (*desc, errorMessage); | |||
| AudioProcessorGraph::Node* node = 0; | |||
| AudioProcessorGraph::Node* node = nullptr; | |||
| if (instance != 0) | |||
| if (instance != nullptr) | |||
| node = graph.addNode (instance); | |||
| if (node != 0) | |||
| if (node != nullptr) | |||
| { | |||
| node->properties.set ("x", x); | |||
| node->properties.set ("y", y); | |||
| @@ -152,7 +152,7 @@ void FilterGraph::setNodePosition (const int nodeId, double x, double y) | |||
| { | |||
| const AudioProcessorGraph::Node::Ptr n (graph.getNodeForId (nodeId)); | |||
| if (n != 0) | |||
| if (n != nullptr) | |||
| { | |||
| n->properties.set ("x", jlimit (0.0, 1.0, x)); | |||
| n->properties.set ("y", jlimit (0.0, 1.0, y)); | |||
| @@ -165,7 +165,7 @@ void FilterGraph::getNodePosition (const int nodeId, double& x, double& y) const | |||
| const AudioProcessorGraph::Node::Ptr n (graph.getNodeForId (nodeId)); | |||
| if (n != 0) | |||
| if (n != nullptr) | |||
| { | |||
| x = (double) n->properties ["x"]; | |||
| y = (double) n->properties ["y"]; | |||
| @@ -173,25 +173,25 @@ void FilterGraph::getNodePosition (const int nodeId, double& x, double& y) const | |||
| } | |||
| //============================================================================== | |||
| int FilterGraph::getNumConnections() const throw() | |||
| int FilterGraph::getNumConnections() const noexcept | |||
| { | |||
| return graph.getNumConnections(); | |||
| } | |||
| const AudioProcessorGraph::Connection* FilterGraph::getConnection (const int index) const throw() | |||
| const AudioProcessorGraph::Connection* FilterGraph::getConnection (const int index) const noexcept | |||
| { | |||
| return graph.getConnection (index); | |||
| } | |||
| const AudioProcessorGraph::Connection* FilterGraph::getConnectionBetween (uint32 sourceFilterUID, int sourceFilterChannel, | |||
| uint32 destFilterUID, int destFilterChannel) const throw() | |||
| uint32 destFilterUID, int destFilterChannel) const noexcept | |||
| { | |||
| return graph.getConnectionBetween (sourceFilterUID, sourceFilterChannel, | |||
| destFilterUID, destFilterChannel); | |||
| } | |||
| bool FilterGraph::canConnect (uint32 sourceFilterUID, int sourceFilterChannel, | |||
| uint32 destFilterUID, int destFilterChannel) const throw() | |||
| uint32 destFilterUID, int destFilterChannel) const noexcept | |||
| { | |||
| return graph.canConnect (sourceFilterUID, sourceFilterChannel, | |||
| destFilterUID, destFilterChannel); | |||
| @@ -245,7 +245,7 @@ const String FilterGraph::loadDocument (const File& file) | |||
| XmlDocument doc (file); | |||
| XmlElement* xml = doc.getDocumentElement(); | |||
| if (xml == 0 || ! xml->hasTagName (T("FILTERGRAPH"))) | |||
| if (xml == nullptr || ! xml->hasTagName (T("FILTERGRAPH"))) | |||
| { | |||
| delete xml; | |||
| return "Not a valid filter graph file"; | |||
| @@ -292,14 +292,14 @@ void FilterGraph::setLastDocumentOpened (const File& file) | |||
| } | |||
| //============================================================================== | |||
| static XmlElement* createNodeXml (AudioProcessorGraph::Node* const node) throw() | |||
| static XmlElement* createNodeXml (AudioProcessorGraph::Node* const node) noexcept | |||
| { | |||
| AudioPluginInstance* plugin = dynamic_cast <AudioPluginInstance*> (node->getProcessor()); | |||
| if (plugin == 0) | |||
| if (plugin == nullptr) | |||
| { | |||
| jassertfalse | |||
| return 0; | |||
| return nullptr; | |||
| } | |||
| XmlElement* e = new XmlElement ("FILTER"); | |||
| @@ -340,19 +340,19 @@ void FilterGraph::createNodeFromXml (const XmlElement& xml) | |||
| AudioPluginInstance* instance | |||
| = AudioPluginFormatManager::getInstance()->createPluginInstance (pd, errorMessage); | |||
| if (instance == 0) | |||
| if (instance == nullptr) | |||
| { | |||
| // xxx handle ins + outs | |||
| } | |||
| if (instance == 0) | |||
| if (instance == nullptr) | |||
| return; | |||
| AudioProcessorGraph::Node::Ptr node (graph.addNode (instance, xml.getIntAttribute (T("uid")))); | |||
| const XmlElement* const state = xml.getChildByName (T("STATE")); | |||
| if (state != 0) | |||
| if (state != nullptr) | |||
| { | |||
| MemoryBlock m; | |||
| m.fromBase64Encoding (state->getAllSubText()); | |||
| @@ -71,11 +71,11 @@ public: | |||
| ~FilterGraph(); | |||
| //============================================================================== | |||
| AudioProcessorGraph& getGraph() throw() { return graph; } | |||
| AudioProcessorGraph& getGraph() noexcept { return graph; } | |||
| int getNumFilters() const throw(); | |||
| const AudioProcessorGraph::Node::Ptr getNode (const int index) const throw(); | |||
| const AudioProcessorGraph::Node::Ptr getNodeForId (const uint32 uid) const throw(); | |||
| int getNumFilters() const noexcept; | |||
| const AudioProcessorGraph::Node::Ptr getNode (const int index) const noexcept; | |||
| const AudioProcessorGraph::Node::Ptr getNodeForId (const uint32 uid) const noexcept; | |||
| void addFilter (const PluginDescription* desc, double x, double y); | |||
| @@ -88,14 +88,14 @@ public: | |||
| void getNodePosition (const int nodeId, double& x, double& y) const; | |||
| //============================================================================== | |||
| int getNumConnections() const throw(); | |||
| const AudioProcessorGraph::Connection* getConnection (const int index) const throw(); | |||
| int getNumConnections() const noexcept; | |||
| const AudioProcessorGraph::Connection* getConnection (const int index) const noexcept; | |||
| const AudioProcessorGraph::Connection* getConnectionBetween (uint32 sourceFilterUID, int sourceFilterChannel, | |||
| uint32 destFilterUID, int destFilterChannel) const throw(); | |||
| uint32 destFilterUID, int destFilterChannel) const noexcept; | |||
| bool canConnect (uint32 sourceFilterUID, int sourceFilterChannel, | |||
| uint32 destFilterUID, int destFilterChannel) const throw(); | |||
| uint32 destFilterUID, int destFilterChannel) const noexcept; | |||
| bool addConnection (uint32 sourceFilterUID, int sourceFilterChannel, | |||
| uint32 destFilterUID, int destFilterChannel); | |||
| @@ -130,7 +130,7 @@ private: | |||
| AudioProcessorPlayer player; | |||
| uint32 lastUID; | |||
| uint32 getNextUID() throw(); | |||
| uint32 getNextUID() noexcept; | |||
| void createNodeFromXml (const XmlElement& xml); | |||
| @@ -73,13 +73,13 @@ PluginWindow* PluginWindow::getWindowFor (AudioProcessorGraph::Node* node, | |||
| && activePluginWindows.getUnchecked(i)->isGeneric == useGenericView) | |||
| return activePluginWindows.getUnchecked(i); | |||
| AudioProcessorEditor* ui = 0; | |||
| AudioProcessorEditor* ui = nullptr; | |||
| if (! useGenericView) | |||
| { | |||
| ui = node->getProcessor()->createEditorIfNeeded(); | |||
| if (ui == 0) | |||
| if (ui == nullptr) | |||
| useGenericView = true; | |||
| } | |||
| @@ -88,17 +88,17 @@ PluginWindow* PluginWindow::getWindowFor (AudioProcessorGraph::Node* node, | |||
| ui = new GenericAudioProcessorEditor (node->getProcessor()); | |||
| } | |||
| if (ui != 0) | |||
| if (ui != nullptr) | |||
| { | |||
| AudioPluginInstance* const plugin = dynamic_cast <AudioPluginInstance*> (node->getProcessor()); | |||
| if (plugin != 0) | |||
| if (plugin != nullptr) | |||
| ui->setName (plugin->getName()); | |||
| return new PluginWindow (ui, node, useGenericView); | |||
| } | |||
| return 0; | |||
| return nullptr; | |||
| } | |||
| PluginWindow::~PluginWindow() | |||
| @@ -132,7 +132,7 @@ public: | |||
| { | |||
| const AudioProcessorGraph::Node::Ptr node (graph.getNodeForId (filterID_)); | |||
| if (node != 0) | |||
| if (node != nullptr) | |||
| { | |||
| String tip; | |||
| @@ -195,9 +195,9 @@ public: | |||
| private: | |||
| FilterGraph& graph; | |||
| GraphEditorPanel* getGraphPanel() const throw() | |||
| GraphEditorPanel* getGraphPanel() const noexcept | |||
| { | |||
| return findParentComponentOfClass ((GraphEditorPanel*) 0); | |||
| return findParentComponentOfClass ((GraphEditorPanel*) nullptr); | |||
| } | |||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (PinComponent); | |||
| @@ -259,11 +259,11 @@ public: | |||
| { | |||
| AudioProcessorGraph::Node::Ptr f (graph.getNodeForId (filterID)); | |||
| if (f != 0) | |||
| if (f != nullptr) | |||
| { | |||
| PluginWindow* const w = PluginWindow::getWindowFor (f, r == 4); | |||
| if (w != 0) | |||
| if (w != nullptr) | |||
| w->toFront (true); | |||
| } | |||
| } | |||
| @@ -276,8 +276,8 @@ public: | |||
| { | |||
| Point<int> pos (originalPos + Point<int> (e.getDistanceFromDragStartX(), e.getDistanceFromDragStartY())); | |||
| if (getParentComponent() != 0) | |||
| pos = getParentComponent()->getLocalPoint (0, pos); | |||
| if (getParentComponent() != nullptr) | |||
| pos = getParentComponent()->getLocalPoint (nullptr, pos); | |||
| graph.setNodePosition (filterID, | |||
| (pos.getX() + getWidth() / 2) / (double) getParentWidth(), | |||
| @@ -293,11 +293,11 @@ public: | |||
| { | |||
| const AudioProcessorGraph::Node::Ptr f (graph.getNodeForId (filterID)); | |||
| if (f != 0) | |||
| if (f != nullptr) | |||
| { | |||
| PluginWindow* const w = PluginWindow::getWindowFor (f, false); | |||
| if (w != 0) | |||
| if (w != nullptr) | |||
| w->toFront (true); | |||
| } | |||
| } | |||
| @@ -343,7 +343,7 @@ public: | |||
| { | |||
| PinComponent* const pc = dynamic_cast <PinComponent*> (getChildComponent(i)); | |||
| if (pc != 0) | |||
| if (pc != nullptr) | |||
| { | |||
| const int total = pc->isInput ? numIns : numOuts; | |||
| const int index = pc->index == FilterGraph::midiChannelNumber ? (total - 1) : pc->index; | |||
| @@ -361,7 +361,7 @@ public: | |||
| { | |||
| PinComponent* const pc = dynamic_cast <PinComponent*> (getChildComponent(i)); | |||
| if (pc != 0 && pc->index == index && isInput == pc->isInput) | |||
| if (pc != nullptr && pc->index == index && isInput == pc->isInput) | |||
| { | |||
| x = getX() + pc->getX() + pc->getWidth() * 0.5f; | |||
| y = getY() + pc->getY() + pc->getHeight() * 0.5f; | |||
| @@ -374,7 +374,7 @@ public: | |||
| { | |||
| const AudioProcessorGraph::Node::Ptr f (graph.getNodeForId (filterID)); | |||
| if (f == 0) | |||
| if (f == nullptr) | |||
| { | |||
| delete this; | |||
| return; | |||
| @@ -443,9 +443,9 @@ private: | |||
| int numIns, numOuts; | |||
| DropShadowEffect shadow; | |||
| GraphEditorPanel* getGraphPanel() const throw() | |||
| GraphEditorPanel* getGraphPanel() const noexcept | |||
| { | |||
| return findParentComponentOfClass ((GraphEditorPanel*) 0); | |||
| return findParentComponentOfClass ((GraphEditorPanel*) nullptr); | |||
| } | |||
| FilterComponent (const FilterComponent&); | |||
| @@ -550,16 +550,16 @@ public: | |||
| GraphEditorPanel* const hostPanel = getGraphPanel(); | |||
| if (hostPanel != 0) | |||
| if (hostPanel != nullptr) | |||
| { | |||
| FilterComponent* srcFilterComp = hostPanel->getComponentForFilter (sourceFilterID); | |||
| if (srcFilterComp != 0) | |||
| if (srcFilterComp != nullptr) | |||
| srcFilterComp->getPinPos (sourceFilterChannel, false, x1, y1); | |||
| FilterComponent* dstFilterComp = hostPanel->getComponentForFilter (destFilterID); | |||
| if (dstFilterComp != 0) | |||
| if (dstFilterComp != nullptr) | |||
| dstFilterComp->getPinPos (destFilterChannel, true, x2, y2); | |||
| } | |||
| } | |||
| @@ -681,9 +681,9 @@ private: | |||
| Path linePath, hitPath; | |||
| bool dragging; | |||
| GraphEditorPanel* getGraphPanel() const throw() | |||
| GraphEditorPanel* getGraphPanel() const noexcept | |||
| { | |||
| return findParentComponentOfClass ((GraphEditorPanel*) 0); | |||
| return findParentComponentOfClass ((GraphEditorPanel*) nullptr); | |||
| } | |||
| void getDistancesFromEnds (int x, int y, double& distanceFromStart, double& distanceFromEnd) const | |||
| @@ -702,7 +702,7 @@ private: | |||
| //============================================================================== | |||
| GraphEditorPanel::GraphEditorPanel (FilterGraph& graph_) | |||
| : graph (graph_), | |||
| draggingConnector (0) | |||
| draggingConnector (nullptr) | |||
| { | |||
| graph.addChangeListener (this); | |||
| setOpaque (true); | |||
| @@ -726,9 +726,9 @@ void GraphEditorPanel::mouseDown (const MouseEvent& e) | |||
| { | |||
| PopupMenu m; | |||
| MainHostWindow* const mainWindow = findParentComponentOfClass ((MainHostWindow*) 0); | |||
| MainHostWindow* const mainWindow = findParentComponentOfClass ((MainHostWindow*) nullptr); | |||
| if (mainWindow != 0) | |||
| if (mainWindow != nullptr) | |||
| { | |||
| mainWindow->addPluginsToMenu (m); | |||
| @@ -750,11 +750,11 @@ FilterComponent* GraphEditorPanel::getComponentForFilter (const uint32 filterID) | |||
| { | |||
| FilterComponent* const fc = dynamic_cast <FilterComponent*> (getChildComponent (i)); | |||
| if (fc != 0 && fc->filterID == filterID) | |||
| if (fc != nullptr && fc->filterID == filterID) | |||
| return fc; | |||
| } | |||
| return 0; | |||
| return nullptr; | |||
| } | |||
| ConnectorComponent* GraphEditorPanel::getComponentForConnection (const AudioProcessorGraph::Connection& conn) const | |||
| @@ -763,7 +763,7 @@ ConnectorComponent* GraphEditorPanel::getComponentForConnection (const AudioProc | |||
| { | |||
| ConnectorComponent* const c = dynamic_cast <ConnectorComponent*> (getChildComponent (i)); | |||
| if (c != 0 | |||
| if (c != nullptr | |||
| && c->sourceFilterID == conn.sourceNodeId | |||
| && c->destFilterID == conn.destNodeId | |||
| && c->sourceFilterChannel == conn.sourceChannelIndex | |||
| @@ -773,7 +773,7 @@ ConnectorComponent* GraphEditorPanel::getComponentForConnection (const AudioProc | |||
| } | |||
| } | |||
| return 0; | |||
| return nullptr; | |||
| } | |||
| PinComponent* GraphEditorPanel::findPinAt (const int x, const int y) const | |||
| @@ -782,18 +782,18 @@ PinComponent* GraphEditorPanel::findPinAt (const int x, const int y) const | |||
| { | |||
| FilterComponent* const fc = dynamic_cast <FilterComponent*> (getChildComponent (i)); | |||
| if (fc != 0) | |||
| if (fc != nullptr) | |||
| { | |||
| PinComponent* const pin | |||
| = dynamic_cast <PinComponent*> (fc->getComponentAt (x - fc->getX(), | |||
| y - fc->getY())); | |||
| if (pin != 0) | |||
| if (pin != nullptr) | |||
| return pin; | |||
| } | |||
| } | |||
| return 0; | |||
| return nullptr; | |||
| } | |||
| void GraphEditorPanel::resized() | |||
| @@ -813,7 +813,7 @@ void GraphEditorPanel::updateComponents() | |||
| { | |||
| FilterComponent* const fc = dynamic_cast <FilterComponent*> (getChildComponent (i)); | |||
| if (fc != 0) | |||
| if (fc != nullptr) | |||
| fc->update(); | |||
| } | |||
| @@ -821,10 +821,10 @@ void GraphEditorPanel::updateComponents() | |||
| { | |||
| ConnectorComponent* const cc = dynamic_cast <ConnectorComponent*> (getChildComponent (i)); | |||
| if (cc != 0 && cc != draggingConnector) | |||
| if (cc != nullptr && cc != draggingConnector) | |||
| { | |||
| if (graph.getConnectionBetween (cc->sourceFilterID, cc->sourceFilterChannel, | |||
| cc->destFilterID, cc->destFilterChannel) == 0) | |||
| cc->destFilterID, cc->destFilterChannel) == nullptr) | |||
| { | |||
| delete cc; | |||
| } | |||
| @@ -869,7 +869,7 @@ void GraphEditorPanel::beginConnectorDrag (const uint32 sourceFilterID, const in | |||
| delete draggingConnector; | |||
| draggingConnector = dynamic_cast <ConnectorComponent*> (e.originalComponent); | |||
| if (draggingConnector == 0) | |||
| if (draggingConnector == nullptr) | |||
| draggingConnector = new ConnectorComponent (graph); | |||
| draggingConnector->setInput (sourceFilterID, sourceFilterChannel); | |||
| @@ -885,7 +885,7 @@ void GraphEditorPanel::dragConnector (const MouseEvent& e) | |||
| { | |||
| const MouseEvent e2 (e.getEventRelativeTo (this)); | |||
| if (draggingConnector != 0) | |||
| if (draggingConnector != nullptr) | |||
| { | |||
| draggingConnector->setTooltip (String::empty); | |||
| @@ -894,7 +894,7 @@ void GraphEditorPanel::dragConnector (const MouseEvent& e) | |||
| PinComponent* const pin = findPinAt (x, y); | |||
| if (pin != 0) | |||
| if (pin != nullptr) | |||
| { | |||
| uint32 srcFilter = draggingConnector->sourceFilterID; | |||
| int srcChannel = draggingConnector->sourceFilterChannel; | |||
| @@ -930,7 +930,7 @@ void GraphEditorPanel::dragConnector (const MouseEvent& e) | |||
| void GraphEditorPanel::endDraggingConnector (const MouseEvent& e) | |||
| { | |||
| if (draggingConnector == 0) | |||
| if (draggingConnector == nullptr) | |||
| return; | |||
| draggingConnector->setTooltip (String::empty); | |||
| @@ -946,7 +946,7 @@ void GraphEditorPanel::endDraggingConnector (const MouseEvent& e) | |||
| PinComponent* const pin = findPinAt (e2.x, e2.y); | |||
| if (pin != 0) | |||
| if (pin != nullptr) | |||
| { | |||
| if (srcFilter == 0) | |||
| { | |||
| @@ -994,7 +994,7 @@ public: | |||
| String newTip; | |||
| if (ttc != 0 && ! (underMouse->isMouseButtonDown() || underMouse->isCurrentlyBlockedByAnotherModalComponent())) | |||
| if (ttc != nullptr && ! (underMouse->isMouseButtonDown() || underMouse->isCurrentlyBlockedByAnotherModalComponent())) | |||
| newTip = ttc->getTooltip(); | |||
| if (newTip != tip) | |||
| @@ -1038,7 +1038,7 @@ GraphDocumentComponent::~GraphDocumentComponent() | |||
| deleteAllChildren(); | |||
| graphPlayer.setProcessor (0); | |||
| graphPlayer.setProcessor (nullptr); | |||
| keyState.removeListener (&graphPlayer.getMidiMessageCollector()); | |||
| graph.clear(); | |||
| @@ -148,7 +148,7 @@ public: | |||
| private: | |||
| StringPool identifierPool; | |||
| static DISPID getHashFromString (const String::CharPointerType& s) throw() | |||
| static DISPID getHashFromString (const String::CharPointerType& s) noexcept | |||
| { | |||
| return (DISPID) (pointer_sized_int) s.getAddress(); | |||
| } | |||
| @@ -539,7 +539,7 @@ public: | |||
| }; | |||
| //============================================================================== | |||
| static NPIdentifier getIdentifierFromString (const var::identifier& s) throw() | |||
| static NPIdentifier getIdentifierFromString (const var::identifier& s) noexcept | |||
| { | |||
| return browser.getstringidentifier (s.toString().toUTF8()); | |||
| } | |||
| @@ -22716,6 +22716,7 @@ const StringPairArray WavAudioFormat::createBWAVMetadata (const String& descript | |||
| namespace WavFileHelpers | |||
| { | |||
| inline int chunkName (const char* const name) noexcept { return (int) ByteOrder::littleEndianInt (name); } | |||
| #if JUCE_MSVC | |||
| #pragma pack (push, 1) | |||
| @@ -22854,7 +22855,7 @@ struct SMPLChunk | |||
| MemoryBlock data ((sizeNeeded + 3) & ~3); | |||
| data.fillWith (0); | |||
| SMPLChunk* s = (SMPLChunk*) data.getData(); | |||
| SMPLChunk* const s = static_cast <SMPLChunk*> (data.getData()); | |||
| // Allow these calls to overwrite an extra byte at the end, which is fine as long | |||
| // as they get called in the right order.. | |||
| @@ -22883,6 +22884,73 @@ struct SMPLChunk | |||
| } | |||
| } PACKED; | |||
| struct CueChunk | |||
| { | |||
| struct Cue | |||
| { | |||
| uint32 identifier; | |||
| uint32 order; | |||
| uint32 chunkID; | |||
| uint32 chunkStart; | |||
| uint32 blockStart; | |||
| uint32 offset; | |||
| } PACKED; | |||
| uint32 numCues; | |||
| Cue cues[1]; | |||
| void copyTo (StringPairArray& values, const int totalSize) const | |||
| { | |||
| values.set ("NumCuePoints", String (ByteOrder::swapIfBigEndian (numCues))); | |||
| for (uint32 i = 0; i < numCues; ++i) | |||
| { | |||
| if ((uint8*) (cues + (i + 1)) > ((uint8*) this) + totalSize) | |||
| break; | |||
| const String prefix ("Cue" + String(i)); | |||
| values.set (prefix + "Identifier", String (ByteOrder::swapIfBigEndian (cues[i].identifier))); | |||
| values.set (prefix + "Order", String (ByteOrder::swapIfBigEndian (cues[i].order))); | |||
| values.set (prefix + "ChunkID", String (ByteOrder::swapIfBigEndian (cues[i].chunkID))); | |||
| values.set (prefix + "ChunkStart", String (ByteOrder::swapIfBigEndian (cues[i].chunkStart))); | |||
| values.set (prefix + "BlockStart", String (ByteOrder::swapIfBigEndian (cues[i].blockStart))); | |||
| values.set (prefix + "Offset", String (ByteOrder::swapIfBigEndian (cues[i].offset))); | |||
| } | |||
| } | |||
| static MemoryBlock createFrom (const StringPairArray& values) | |||
| { | |||
| const int numCues = values.getValue ("NumCuePoints", "0").getIntValue(); | |||
| if (numCues <= 0) | |||
| return MemoryBlock(); | |||
| const size_t sizeNeeded = sizeof (CueChunk) + (numCues - 1) * sizeof (Cue); | |||
| MemoryBlock data ((sizeNeeded + 3) & ~3); | |||
| data.fillWith (0); | |||
| CueChunk* const c = static_cast <CueChunk*> (data.getData()); | |||
| c->numCues = ByteOrder::swapIfBigEndian ((uint32) numCues); | |||
| const String dataChunkID (chunkName ("data")); | |||
| for (int i = 0; i < numCues; ++i) | |||
| { | |||
| const String prefix ("Cue" + String(i)); | |||
| c->cues[i].identifier = ByteOrder::swapIfBigEndian ((uint32) values.getValue (prefix + "Identifier", "0").getIntValue()); | |||
| c->cues[i].order = ByteOrder::swapIfBigEndian ((uint32) values.getValue (prefix + "Order", "0").getIntValue()); | |||
| c->cues[i].chunkID = ByteOrder::swapIfBigEndian ((uint32) values.getValue (prefix + "ChunkID", dataChunkID).getIntValue()); | |||
| c->cues[i].chunkStart = ByteOrder::swapIfBigEndian ((uint32) values.getValue (prefix + "ChunkStart", "0").getIntValue()); | |||
| c->cues[i].blockStart = ByteOrder::swapIfBigEndian ((uint32) values.getValue (prefix + "BlockStart", "0").getIntValue()); | |||
| c->cues[i].offset = ByteOrder::swapIfBigEndian ((uint32) values.getValue (prefix + "Offset", "0").getIntValue()); | |||
| } | |||
| return data; | |||
| } | |||
| } PACKED; | |||
| struct ExtensibleWavSubFormat | |||
| { | |||
| uint32 data1; | |||
| @@ -22907,8 +22975,6 @@ struct DataSize64Chunk // chunk ID = 'ds64' if data size > 0xffffffff, 'JUNK' | |||
| #endif | |||
| #undef PACKED | |||
| inline int chunkName (const char* const name) { return (int) ByteOrder::littleEndianInt (name); } | |||
| } | |||
| class WavAudioFormatReader : public AudioFormatReader | |||
| @@ -23026,7 +23092,6 @@ public: | |||
| } | |||
| else if (chunkType == chunkName ("data")) | |||
| { | |||
| // get the data chunk's position | |||
| if (! isRF64) // data size is expected to be -1, actual data size is in ds64 chunk | |||
| dataLength = length; | |||
| @@ -23040,7 +23105,6 @@ public: | |||
| bwavChunkStart = input->getPosition(); | |||
| bwavSize = length; | |||
| // Broadcast-wav extension chunk.. | |||
| HeapBlock <BWAVChunk> bwav; | |||
| bwav.calloc (jmax ((size_t) length + 1, sizeof (BWAVChunk)), 1); | |||
| input->read (bwav, length); | |||
| @@ -23053,6 +23117,13 @@ public: | |||
| input->read (smpl, length); | |||
| smpl->copyTo (metadataValues, length); | |||
| } | |||
| else if (chunkType == chunkName ("cue ")) | |||
| { | |||
| HeapBlock <CueChunk> cue; | |||
| cue.calloc (jmax ((size_t) length + 1, sizeof (CueChunk)), 1); | |||
| input->read (cue, length); | |||
| cue->copyTo (metadataValues, length); | |||
| } | |||
| else if (chunkEnd <= input->getPosition()) | |||
| { | |||
| break; | |||
| @@ -23143,6 +23214,7 @@ public: | |||
| { | |||
| bwavChunk = BWAVChunk::createFrom (metadataValues); | |||
| smplChunk = SMPLChunk::createFrom (metadataValues); | |||
| cueChunk = CueChunk ::createFrom (metadataValues); | |||
| } | |||
| headerPosition = out->getPosition(); | |||
| @@ -23199,7 +23271,7 @@ public: | |||
| private: | |||
| ScopedPointer<AudioData::Converter> converter; | |||
| MemoryBlock tempBlock, bwavChunk, smplChunk; | |||
| MemoryBlock tempBlock, bwavChunk, smplChunk, cueChunk; | |||
| uint64 lengthInSamples, bytesWritten; | |||
| int64 headerPosition; | |||
| bool writeFailed; | |||
| @@ -23238,6 +23310,7 @@ private: | |||
| + 8 + audioDataSize + (audioDataSize & 1) | |||
| + (bwavChunk.getSize() > 0 ? (8 + bwavChunk.getSize()) : 0) | |||
| + (smplChunk.getSize() > 0 ? (8 + smplChunk.getSize()) : 0) | |||
| + (cueChunk .getSize() > 0 ? (8 + cueChunk .getSize()) : 0) | |||
| + (8 + 28); // (ds64 chunk) | |||
| riffChunkSize += (riffChunkSize & 0x1); | |||
| @@ -23316,6 +23389,13 @@ private: | |||
| output->write (smplChunk.getData(), (int) smplChunk.getSize()); | |||
| } | |||
| if (cueChunk.getSize() > 0) | |||
| { | |||
| output->writeInt (chunkName ("cue ")); | |||
| output->writeInt ((int) cueChunk.getSize()); | |||
| output->write (cueChunk.getData(), (int) cueChunk.getSize()); | |||
| } | |||
| output->writeInt (chunkName ("data")); | |||
| output->writeInt (isRF64 ? -1 : (int) (lengthInSamples * bytesPerFrame)); | |||
| @@ -242212,16 +242292,17 @@ static void juce_getCpuVendor (char* const v) | |||
| { | |||
| int vendor[4] = { 0 }; | |||
| #ifdef JUCE_64BIT | |||
| #else | |||
| #if JUCE_64BIT | |||
| /// xxx todo | |||
| #else | |||
| #ifndef __MINGW32__ | |||
| __try | |||
| #endif | |||
| { | |||
| #if JUCE_GCC | |||
| #if JUCE_GCC | |||
| unsigned int dummy = 0; | |||
| __asm__ ("cpuid" : "=a" (dummy), "=b" (vendor[0]), "=c" (vendor[2]),"=d" (vendor[1]) : "a" (0)); | |||
| #else | |||
| #else | |||
| __asm | |||
| { | |||
| mov eax, 0 | |||
| @@ -242230,15 +242311,15 @@ static void juce_getCpuVendor (char* const v) | |||
| mov [vendor + 4], edx | |||
| mov [vendor + 8], ecx | |||
| } | |||
| #endif | |||
| #endif | |||
| } | |||
| #ifndef __MINGW32__ | |||
| #ifndef __MINGW32__ | |||
| __except (EXCEPTION_EXECUTE_HANDLER) | |||
| { | |||
| *v = 0; | |||
| } | |||
| #endif | |||
| #endif | |||
| #endif | |||
| #endif | |||
| memcpy (v, vendor, 16); | |||
| } | |||
| @@ -242256,11 +242337,11 @@ void SystemStats::initialiseStats() | |||
| cpuFlags.hasMMX = IsProcessorFeaturePresent (PF_MMX_INSTRUCTIONS_AVAILABLE) != 0; | |||
| cpuFlags.hasSSE = IsProcessorFeaturePresent (PF_XMMI_INSTRUCTIONS_AVAILABLE) != 0; | |||
| cpuFlags.hasSSE2 = IsProcessorFeaturePresent (PF_XMMI64_INSTRUCTIONS_AVAILABLE) != 0; | |||
| #ifdef PF_AMD3D_INSTRUCTIONS_AVAILABLE | |||
| #ifdef PF_AMD3D_INSTRUCTIONS_AVAILABLE | |||
| cpuFlags.has3DNow = IsProcessorFeaturePresent (PF_AMD3D_INSTRUCTIONS_AVAILABLE) != 0; | |||
| #else | |||
| #else | |||
| cpuFlags.has3DNow = IsProcessorFeaturePresent (PF_3DNOW_INSTRUCTIONS_AVAILABLE) != 0; | |||
| #endif | |||
| #endif | |||
| { | |||
| SYSTEM_INFO systemInfo; | |||
| @@ -242279,9 +242360,9 @@ void SystemStats::initialiseStats() | |||
| (void) res; | |||
| jassert (res == TIMERR_NOERROR); | |||
| #if JUCE_MSVC && JUCE_CHECK_MEMORY_LEAKS | |||
| #if JUCE_MSVC && JUCE_CHECK_MEMORY_LEAKS | |||
| _CrtSetDbgFlag (_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); | |||
| #endif | |||
| #endif | |||
| } | |||
| SystemStats::OperatingSystemType SystemStats::getOperatingSystemType() | |||
| @@ -242327,9 +242408,9 @@ const String SystemStats::getOperatingSystemName() | |||
| bool SystemStats::isOperatingSystem64Bit() | |||
| { | |||
| #ifdef _WIN64 | |||
| #ifdef _WIN64 | |||
| return true; | |||
| #else | |||
| #else | |||
| typedef BOOL (WINAPI* LPFN_ISWOW64PROCESS) (HANDLE, PBOOL); | |||
| LPFN_ISWOW64PROCESS fnIsWow64Process = (LPFN_ISWOW64PROCESS) GetProcAddress (GetModuleHandle (L"kernel32"), "IsWow64Process"); | |||
| @@ -242339,7 +242420,7 @@ bool SystemStats::isOperatingSystem64Bit() | |||
| return (fnIsWow64Process != 0) | |||
| && fnIsWow64Process (GetCurrentProcess(), &isWow64) | |||
| && (isWow64 != FALSE); | |||
| #endif | |||
| #endif | |||
| } | |||
| int SystemStats::getMemorySizeInMegabytes() | |||
| @@ -242386,11 +242467,11 @@ int64 Time::getHighResolutionTicksPerSecond() noexcept | |||
| static int64 juce_getClockCycleCounter() noexcept | |||
| { | |||
| #if JUCE_USE_INTRINSICS | |||
| #if JUCE_USE_INTRINSICS | |||
| // MS intrinsics version... | |||
| return __rdtsc(); | |||
| #elif JUCE_GCC | |||
| #elif JUCE_GCC | |||
| // GNU inline asm version... | |||
| unsigned int hi = 0, lo = 0; | |||
| @@ -242406,7 +242487,7 @@ static int64 juce_getClockCycleCounter() noexcept | |||
| : "cc", "eax", "ebx", "ecx", "edx", "memory"); | |||
| return (int64) ((((uint64) hi) << 32) | lo); | |||
| #else | |||
| #else | |||
| // MSVC inline asm version... | |||
| unsigned int hi = 0, lo = 0; | |||
| @@ -242420,7 +242501,7 @@ static int64 juce_getClockCycleCounter() noexcept | |||
| } | |||
| return (int64) ((((uint64) hi) << 32) | lo); | |||
| #endif | |||
| #endif | |||
| } | |||
| int SystemStats::getCpuSpeedInMegaherz() | |||
| @@ -242479,7 +242560,7 @@ int SystemStats::getPageSize() | |||
| const String SystemStats::getLogonName() | |||
| { | |||
| TCHAR text [256] = { 0 }; | |||
| DWORD len = numElementsInArray (text) - 2; | |||
| DWORD len = numElementsInArray (text) - 1; | |||
| GetUserName (text, &len); | |||
| return String (text, len); | |||
| } | |||
| @@ -242489,6 +242570,14 @@ const String SystemStats::getFullUserName() | |||
| return getLogonName(); | |||
| } | |||
| const String SystemStats::getComputerName() | |||
| { | |||
| TCHAR text [MAX_COMPUTERNAME_LENGTH + 1] = { 0 }; | |||
| DWORD len = numElementsInArray (text) - 1; | |||
| GetComputerName (text, &len); | |||
| return String (text, len); | |||
| } | |||
| #endif | |||
| /*** End of inlined file: juce_win32_SystemStats.cpp ***/ | |||
| @@ -260274,6 +260363,15 @@ const String SystemStats::getFullUserName() | |||
| return getLogonName(); | |||
| } | |||
| const String SystemStats::getComputerName() | |||
| { | |||
| char name [256] = { 0 }; | |||
| if (gethostname (name, sizeof (name) - 1) == 0) | |||
| return name; | |||
| return String::empty; | |||
| } | |||
| void SystemStats::initialiseStats() | |||
| { | |||
| const String flags (LinuxStatsHelpers::getCpuInfo ("flags")); | |||
| @@ -267642,6 +267740,12 @@ const String SystemStats::getFullUserName() | |||
| return nsStringToJuce (NSFullUserName()); | |||
| } | |||
| const String SystemStats::getComputerName() | |||
| { | |||
| return nsStringToJuce ([[NSProcessInfo processInfo] hostName]) | |||
| .upToLastOccurrenceOf (".local", false, true); | |||
| } | |||
| uint32 juce_millisecondsSinceStartup() noexcept | |||
| { | |||
| return (uint32) (mach_absolute_time() * SystemStatsHelpers::highResTimerToMillisecRatio); | |||
| @@ -284701,6 +284805,15 @@ const String SystemStats::getFullUserName() | |||
| return getLogonName(); | |||
| } | |||
| const String SystemStats::getComputerName() | |||
| { | |||
| char name [256] = { 0 }; | |||
| if (gethostname (name, sizeof (name) - 1) == 0) | |||
| return name; | |||
| return String::empty; | |||
| } | |||
| void SystemStats::initialiseStats() | |||
| { | |||
| // TODO | |||
| @@ -18160,6 +18160,9 @@ public: | |||
| */ | |||
| static const String getFullUserName(); | |||
| /** Returns the host-name of the computer. */ | |||
| static const String getComputerName(); | |||
| // CPU and memory information.. | |||
| /** Returns the approximate CPU speed. | |||
| @@ -71,6 +71,7 @@ const StringPairArray WavAudioFormat::createBWAVMetadata (const String& descript | |||
| //============================================================================== | |||
| namespace WavFileHelpers | |||
| { | |||
| inline int chunkName (const char* const name) noexcept { return (int) ByteOrder::littleEndianInt (name); } | |||
| #if JUCE_MSVC | |||
| #pragma pack (push, 1) | |||
| @@ -211,7 +212,7 @@ struct SMPLChunk | |||
| MemoryBlock data ((sizeNeeded + 3) & ~3); | |||
| data.fillWith (0); | |||
| SMPLChunk* s = (SMPLChunk*) data.getData(); | |||
| SMPLChunk* const s = static_cast <SMPLChunk*> (data.getData()); | |||
| // Allow these calls to overwrite an extra byte at the end, which is fine as long | |||
| // as they get called in the right order.. | |||
| @@ -240,7 +241,75 @@ struct SMPLChunk | |||
| } | |||
| } PACKED; | |||
| //============================================================================== | |||
| struct CueChunk | |||
| { | |||
| struct Cue | |||
| { | |||
| uint32 identifier; | |||
| uint32 order; | |||
| uint32 chunkID; | |||
| uint32 chunkStart; | |||
| uint32 blockStart; | |||
| uint32 offset; | |||
| } PACKED; | |||
| uint32 numCues; | |||
| Cue cues[1]; | |||
| void copyTo (StringPairArray& values, const int totalSize) const | |||
| { | |||
| values.set ("NumCuePoints", String (ByteOrder::swapIfBigEndian (numCues))); | |||
| for (uint32 i = 0; i < numCues; ++i) | |||
| { | |||
| if ((uint8*) (cues + (i + 1)) > ((uint8*) this) + totalSize) | |||
| break; | |||
| const String prefix ("Cue" + String(i)); | |||
| values.set (prefix + "Identifier", String (ByteOrder::swapIfBigEndian (cues[i].identifier))); | |||
| values.set (prefix + "Order", String (ByteOrder::swapIfBigEndian (cues[i].order))); | |||
| values.set (prefix + "ChunkID", String (ByteOrder::swapIfBigEndian (cues[i].chunkID))); | |||
| values.set (prefix + "ChunkStart", String (ByteOrder::swapIfBigEndian (cues[i].chunkStart))); | |||
| values.set (prefix + "BlockStart", String (ByteOrder::swapIfBigEndian (cues[i].blockStart))); | |||
| values.set (prefix + "Offset", String (ByteOrder::swapIfBigEndian (cues[i].offset))); | |||
| } | |||
| } | |||
| static MemoryBlock createFrom (const StringPairArray& values) | |||
| { | |||
| const int numCues = values.getValue ("NumCuePoints", "0").getIntValue(); | |||
| if (numCues <= 0) | |||
| return MemoryBlock(); | |||
| const size_t sizeNeeded = sizeof (CueChunk) + (numCues - 1) * sizeof (Cue); | |||
| MemoryBlock data ((sizeNeeded + 3) & ~3); | |||
| data.fillWith (0); | |||
| CueChunk* const c = static_cast <CueChunk*> (data.getData()); | |||
| c->numCues = ByteOrder::swapIfBigEndian ((uint32) numCues); | |||
| const String dataChunkID (chunkName ("data")); | |||
| for (int i = 0; i < numCues; ++i) | |||
| { | |||
| const String prefix ("Cue" + String(i)); | |||
| c->cues[i].identifier = ByteOrder::swapIfBigEndian ((uint32) values.getValue (prefix + "Identifier", "0").getIntValue()); | |||
| c->cues[i].order = ByteOrder::swapIfBigEndian ((uint32) values.getValue (prefix + "Order", "0").getIntValue()); | |||
| c->cues[i].chunkID = ByteOrder::swapIfBigEndian ((uint32) values.getValue (prefix + "ChunkID", dataChunkID).getIntValue()); | |||
| c->cues[i].chunkStart = ByteOrder::swapIfBigEndian ((uint32) values.getValue (prefix + "ChunkStart", "0").getIntValue()); | |||
| c->cues[i].blockStart = ByteOrder::swapIfBigEndian ((uint32) values.getValue (prefix + "BlockStart", "0").getIntValue()); | |||
| c->cues[i].offset = ByteOrder::swapIfBigEndian ((uint32) values.getValue (prefix + "Offset", "0").getIntValue()); | |||
| } | |||
| return data; | |||
| } | |||
| } PACKED; | |||
| //============================================================================== | |||
| struct ExtensibleWavSubFormat | |||
| { | |||
| uint32 data1; | |||
| @@ -266,8 +335,6 @@ struct DataSize64Chunk // chunk ID = 'ds64' if data size > 0xffffffff, 'JUNK' | |||
| #endif | |||
| #undef PACKED | |||
| inline int chunkName (const char* const name) { return (int) ByteOrder::littleEndianInt (name); } | |||
| } | |||
| @@ -387,7 +454,6 @@ public: | |||
| } | |||
| else if (chunkType == chunkName ("data")) | |||
| { | |||
| // get the data chunk's position | |||
| if (! isRF64) // data size is expected to be -1, actual data size is in ds64 chunk | |||
| dataLength = length; | |||
| @@ -401,7 +467,6 @@ public: | |||
| bwavChunkStart = input->getPosition(); | |||
| bwavSize = length; | |||
| // Broadcast-wav extension chunk.. | |||
| HeapBlock <BWAVChunk> bwav; | |||
| bwav.calloc (jmax ((size_t) length + 1, sizeof (BWAVChunk)), 1); | |||
| input->read (bwav, length); | |||
| @@ -414,6 +479,13 @@ public: | |||
| input->read (smpl, length); | |||
| smpl->copyTo (metadataValues, length); | |||
| } | |||
| else if (chunkType == chunkName ("cue ")) | |||
| { | |||
| HeapBlock <CueChunk> cue; | |||
| cue.calloc (jmax ((size_t) length + 1, sizeof (CueChunk)), 1); | |||
| input->read (cue, length); | |||
| cue->copyTo (metadataValues, length); | |||
| } | |||
| else if (chunkEnd <= input->getPosition()) | |||
| { | |||
| break; | |||
| @@ -506,6 +578,7 @@ public: | |||
| { | |||
| bwavChunk = BWAVChunk::createFrom (metadataValues); | |||
| smplChunk = SMPLChunk::createFrom (metadataValues); | |||
| cueChunk = CueChunk ::createFrom (metadataValues); | |||
| } | |||
| headerPosition = out->getPosition(); | |||
| @@ -563,7 +636,7 @@ public: | |||
| private: | |||
| ScopedPointer<AudioData::Converter> converter; | |||
| MemoryBlock tempBlock, bwavChunk, smplChunk; | |||
| MemoryBlock tempBlock, bwavChunk, smplChunk, cueChunk; | |||
| uint64 lengthInSamples, bytesWritten; | |||
| int64 headerPosition; | |||
| bool writeFailed; | |||
| @@ -602,6 +675,7 @@ private: | |||
| + 8 + audioDataSize + (audioDataSize & 1) | |||
| + (bwavChunk.getSize() > 0 ? (8 + bwavChunk.getSize()) : 0) | |||
| + (smplChunk.getSize() > 0 ? (8 + smplChunk.getSize()) : 0) | |||
| + (cueChunk .getSize() > 0 ? (8 + cueChunk .getSize()) : 0) | |||
| + (8 + 28); // (ds64 chunk) | |||
| riffChunkSize += (riffChunkSize & 0x1); | |||
| @@ -680,6 +754,13 @@ private: | |||
| output->write (smplChunk.getData(), (int) smplChunk.getSize()); | |||
| } | |||
| if (cueChunk.getSize() > 0) | |||
| { | |||
| output->writeInt (chunkName ("cue ")); | |||
| output->writeInt ((int) cueChunk.getSize()); | |||
| output->write (cueChunk.getData(), (int) cueChunk.getSize()); | |||
| } | |||
| output->writeInt (chunkName ("data")); | |||
| output->writeInt (isRF64 ? -1 : (int) (lengthInSamples * bytesPerFrame)); | |||
| @@ -99,6 +99,9 @@ public: | |||
| */ | |||
| static const String getFullUserName(); | |||
| /** Returns the host-name of the computer. */ | |||
| static const String getComputerName(); | |||
| //============================================================================== | |||
| // CPU and memory information.. | |||
| @@ -105,6 +105,15 @@ const String SystemStats::getFullUserName() | |||
| return getLogonName(); | |||
| } | |||
| const String SystemStats::getComputerName() | |||
| { | |||
| char name [256] = { 0 }; | |||
| if (gethostname (name, sizeof (name) - 1) == 0) | |||
| return name; | |||
| return String::empty; | |||
| } | |||
| //============================================================================== | |||
| void SystemStats::initialiseStats() | |||
| { | |||
| @@ -116,6 +116,15 @@ const String SystemStats::getFullUserName() | |||
| return getLogonName(); | |||
| } | |||
| const String SystemStats::getComputerName() | |||
| { | |||
| char name [256] = { 0 }; | |||
| if (gethostname (name, sizeof (name) - 1) == 0) | |||
| return name; | |||
| return String::empty; | |||
| } | |||
| //============================================================================== | |||
| void SystemStats::initialiseStats() | |||
| { | |||
| @@ -182,6 +182,12 @@ const String SystemStats::getFullUserName() | |||
| return nsStringToJuce (NSFullUserName()); | |||
| } | |||
| const String SystemStats::getComputerName() | |||
| { | |||
| return nsStringToJuce ([[NSProcessInfo processInfo] hostName]) | |||
| .upToLastOccurrenceOf (".local", false, true); | |||
| } | |||
| //============================================================================== | |||
| uint32 juce_millisecondsSinceStartup() noexcept | |||
| { | |||
| @@ -69,16 +69,17 @@ static void juce_getCpuVendor (char* const v) | |||
| { | |||
| int vendor[4] = { 0 }; | |||
| #ifdef JUCE_64BIT | |||
| #else | |||
| #if JUCE_64BIT | |||
| /// xxx todo | |||
| #else | |||
| #ifndef __MINGW32__ | |||
| __try | |||
| #endif | |||
| { | |||
| #if JUCE_GCC | |||
| #if JUCE_GCC | |||
| unsigned int dummy = 0; | |||
| __asm__ ("cpuid" : "=a" (dummy), "=b" (vendor[0]), "=c" (vendor[2]),"=d" (vendor[1]) : "a" (0)); | |||
| #else | |||
| #else | |||
| __asm | |||
| { | |||
| mov eax, 0 | |||
| @@ -87,15 +88,15 @@ static void juce_getCpuVendor (char* const v) | |||
| mov [vendor + 4], edx | |||
| mov [vendor + 8], ecx | |||
| } | |||
| #endif | |||
| #endif | |||
| } | |||
| #ifndef __MINGW32__ | |||
| #ifndef __MINGW32__ | |||
| __except (EXCEPTION_EXECUTE_HANDLER) | |||
| { | |||
| *v = 0; | |||
| } | |||
| #endif | |||
| #endif | |||
| #endif | |||
| #endif | |||
| memcpy (v, vendor, 16); | |||
| } | |||
| @@ -115,11 +116,11 @@ void SystemStats::initialiseStats() | |||
| cpuFlags.hasMMX = IsProcessorFeaturePresent (PF_MMX_INSTRUCTIONS_AVAILABLE) != 0; | |||
| cpuFlags.hasSSE = IsProcessorFeaturePresent (PF_XMMI_INSTRUCTIONS_AVAILABLE) != 0; | |||
| cpuFlags.hasSSE2 = IsProcessorFeaturePresent (PF_XMMI64_INSTRUCTIONS_AVAILABLE) != 0; | |||
| #ifdef PF_AMD3D_INSTRUCTIONS_AVAILABLE | |||
| #ifdef PF_AMD3D_INSTRUCTIONS_AVAILABLE | |||
| cpuFlags.has3DNow = IsProcessorFeaturePresent (PF_AMD3D_INSTRUCTIONS_AVAILABLE) != 0; | |||
| #else | |||
| #else | |||
| cpuFlags.has3DNow = IsProcessorFeaturePresent (PF_3DNOW_INSTRUCTIONS_AVAILABLE) != 0; | |||
| #endif | |||
| #endif | |||
| { | |||
| SYSTEM_INFO systemInfo; | |||
| @@ -138,9 +139,9 @@ void SystemStats::initialiseStats() | |||
| (void) res; | |||
| jassert (res == TIMERR_NOERROR); | |||
| #if JUCE_MSVC && JUCE_CHECK_MEMORY_LEAKS | |||
| #if JUCE_MSVC && JUCE_CHECK_MEMORY_LEAKS | |||
| _CrtSetDbgFlag (_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); | |||
| #endif | |||
| #endif | |||
| } | |||
| //============================================================================== | |||
| @@ -187,9 +188,9 @@ const String SystemStats::getOperatingSystemName() | |||
| bool SystemStats::isOperatingSystem64Bit() | |||
| { | |||
| #ifdef _WIN64 | |||
| #ifdef _WIN64 | |||
| return true; | |||
| #else | |||
| #else | |||
| typedef BOOL (WINAPI* LPFN_ISWOW64PROCESS) (HANDLE, PBOOL); | |||
| LPFN_ISWOW64PROCESS fnIsWow64Process = (LPFN_ISWOW64PROCESS) GetProcAddress (GetModuleHandle (L"kernel32"), "IsWow64Process"); | |||
| @@ -199,10 +200,9 @@ bool SystemStats::isOperatingSystem64Bit() | |||
| return (fnIsWow64Process != 0) | |||
| && fnIsWow64Process (GetCurrentProcess(), &isWow64) | |||
| && (isWow64 != FALSE); | |||
| #endif | |||
| #endif | |||
| } | |||
| //============================================================================== | |||
| int SystemStats::getMemorySizeInMegabytes() | |||
| { | |||
| @@ -249,11 +249,11 @@ int64 Time::getHighResolutionTicksPerSecond() noexcept | |||
| static int64 juce_getClockCycleCounter() noexcept | |||
| { | |||
| #if JUCE_USE_INTRINSICS | |||
| #if JUCE_USE_INTRINSICS | |||
| // MS intrinsics version... | |||
| return __rdtsc(); | |||
| #elif JUCE_GCC | |||
| #elif JUCE_GCC | |||
| // GNU inline asm version... | |||
| unsigned int hi = 0, lo = 0; | |||
| @@ -269,7 +269,7 @@ static int64 juce_getClockCycleCounter() noexcept | |||
| : "cc", "eax", "ebx", "ecx", "edx", "memory"); | |||
| return (int64) ((((uint64) hi) << 32) | lo); | |||
| #else | |||
| #else | |||
| // MSVC inline asm version... | |||
| unsigned int hi = 0, lo = 0; | |||
| @@ -283,7 +283,7 @@ static int64 juce_getClockCycleCounter() noexcept | |||
| } | |||
| return (int64) ((((uint64) hi) << 32) | lo); | |||
| #endif | |||
| #endif | |||
| } | |||
| int SystemStats::getCpuSpeedInMegaherz() | |||
| @@ -345,7 +345,7 @@ int SystemStats::getPageSize() | |||
| const String SystemStats::getLogonName() | |||
| { | |||
| TCHAR text [256] = { 0 }; | |||
| DWORD len = numElementsInArray (text) - 2; | |||
| DWORD len = numElementsInArray (text) - 1; | |||
| GetUserName (text, &len); | |||
| return String (text, len); | |||
| } | |||
| @@ -355,5 +355,12 @@ const String SystemStats::getFullUserName() | |||
| return getLogonName(); | |||
| } | |||
| const String SystemStats::getComputerName() | |||
| { | |||
| TCHAR text [MAX_COMPUTERNAME_LENGTH + 1] = { 0 }; | |||
| DWORD len = numElementsInArray (text) - 1; | |||
| GetComputerName (text, &len); | |||
| return String (text, len); | |||
| } | |||
| #endif | |||