/[svn]/libgig/trunk/src/gig.cpp
ViewVC logotype

Diff of /libgig/trunk/src/gig.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 3112 by schoenebeck, Wed Feb 15 13:21:31 2017 UTC revision 3117 by schoenebeck, Sun Apr 16 23:20:30 2017 UTC
# Line 2  Line 2 
2   *                                                                         *   *                                                                         *
3   *   libgig - C++ cross-platform Gigasampler format file access library    *   *   libgig - C++ cross-platform Gigasampler format file access library    *
4   *                                                                         *   *                                                                         *
5   *   Copyright (C) 2003-2016 by Christian Schoenebeck                      *   *   Copyright (C) 2003-2017 by Christian Schoenebeck                      *
6   *                              <cuse@users.sourceforge.net>               *   *                              <cuse@users.sourceforge.net>               *
7   *                                                                         *   *                                                                         *
8   *   This library is free software; you can redistribute it and/or modify  *   *   This library is free software; you can redistribute it and/or modify  *
# Line 269  namespace { Line 269  namespace {
269       * steps.       * steps.
270       *       *
271       * Once the whole data was processed by __calculateCRC(), one should       * Once the whole data was processed by __calculateCRC(), one should
272       * call __encodeCRC() to get the final CRC result.       * call __finalizeCRC() to get the final CRC result.
273       *       *
274       * @param buf     - pointer to data the CRC shall be calculated of       * @param buf     - pointer to data the CRC shall be calculated of
275       * @param bufSize - size of the data to be processed       * @param bufSize - size of the data to be processed
# Line 286  namespace { Line 286  namespace {
286       *       *
287       * @param crc - variable previously passed to __calculateCRC()       * @param crc - variable previously passed to __calculateCRC()
288       */       */
289      inline static uint32_t __encodeCRC(const uint32_t& crc) {      inline static void __finalizeCRC(uint32_t& crc) {
290          return crc ^ 0xffffffff;          crc ^= 0xffffffff;
291      }      }
292    
293    
# Line 1294  namespace { Line 1294  namespace {
1294          // if this is the last write, update the checksum chunk in the          // if this is the last write, update the checksum chunk in the
1295          // file          // file
1296          if (pCkData->GetPos() == pCkData->GetSize()) {          if (pCkData->GetPos() == pCkData->GetSize()) {
1297                __finalizeCRC(crc);
1298              File* pFile = static_cast<File*>(GetParent());              File* pFile = static_cast<File*>(GetParent());
1299              pFile->SetSampleChecksum(this, __encodeCRC(crc));              pFile->SetSampleChecksum(this, crc);
1300          }          }
1301          return res;          return res;
1302      }      }
# Line 1416  namespace { Line 1417  namespace {
1417              if (nRead <= 0) break;              if (nRead <= 0) break;
1418              __calculateCRC(&buffer[0], nRead * FrameSize, crc);              __calculateCRC(&buffer[0], nRead * FrameSize, crc);
1419          }          }
1420          __encodeCRC(crc);          __finalizeCRC(crc);
1421          return crc;          return crc;
1422      }      }
1423    
# Line 4246  namespace { Line 4247  namespace {
4247          // recalculate CRC32 check sum          // recalculate CRC32 check sum
4248          __resetCRC(crc);          __resetCRC(crc);
4249          __calculateCRC(&data[0], data.size(), crc);          __calculateCRC(&data[0], data.size(), crc);
4250          __encodeCRC(crc);          __finalizeCRC(crc);
4251          // make sure chunk exists and has the required size          // make sure chunk exists and has the required size
4252          const file_offset_t chunkSize = (file_offset_t) 7*sizeof(int32_t) + Name.size() + data.size();          const file_offset_t chunkSize = (file_offset_t) 7*sizeof(int32_t) + Name.size() + data.size();
4253          if (!pChunk) pChunk = pGroup->pList->AddSubChunk(CHUNK_ID_SCRI, chunkSize);          if (!pChunk) pChunk = pGroup->pList->AddSubChunk(CHUNK_ID_SCRI, chunkSize);
# Line 4297  namespace { Line 4298  namespace {
4298          return pGroup;          return pGroup;
4299      }      }
4300    
4301        /**
4302         * Make a (semi) deep copy of the Script object given by @a orig
4303         * and assign it to this object. Note: the ScriptGroup this Script
4304         * object belongs to remains untouched by this call.
4305         *
4306         * @param orig - original Script object to be copied from
4307         */
4308        void Script::CopyAssign(const Script* orig) {
4309            Name        = orig->Name;
4310            Compression = orig->Compression;
4311            Encoding    = orig->Encoding;
4312            Language    = orig->Language;
4313            Bypass      = orig->Bypass;
4314            data        = orig->data;
4315        }
4316    
4317      void Script::RemoveAllScriptReferences() {      void Script::RemoveAllScriptReferences() {
4318          File* pFile = pGroup->pFile;          File* pFile = pGroup->pFile;
4319          for (int i = 0; pFile->GetInstrument(i); ++i) {          for (int i = 0; pFile->GetInstrument(i); ++i) {
# Line 5612  namespace { Line 5629  namespace {
5629              mGroups[pFile->GetSample(i)->GetGroup()]->AddSample(s);              mGroups[pFile->GetSample(i)->GetGroup()]->AddSample(s);
5630              mSamples[pFile->GetSample(i)] = s;              mSamples[pFile->GetSample(i)] = s;
5631          }          }
5632            
5633            // clone script groups and their scripts
5634            for (int iGroup = 0; pFile->GetScriptGroup(iGroup); ++iGroup) {
5635                ScriptGroup* sg = pFile->GetScriptGroup(iGroup);
5636                ScriptGroup* dg = AddScriptGroup();
5637                dg->Name = "COPY" + ToString(iCallCount) + "_" + sg->Name;
5638                for (int iScript = 0; sg->GetScript(iScript); ++iScript) {
5639                    Script* ss = sg->GetScript(iScript);
5640                    Script* ds = dg->AddScript();
5641                    ds->CopyAssign(ss);
5642                }
5643            }
5644    
5645          //BUG: For some reason this method only works with this additional          //BUG: For some reason this method only works with this additional
5646          //     Save() call in between here.          //     Save() call in between here.
5647          //          //

Legend:
Removed from v.3112  
changed lines
  Added in v.3117

  ViewVC Help
Powered by ViewVC